我经常将16位灰度图像数据转换为8位图像数据进行显示。调整最小和最大显示强度以突出图像的“有趣”部分几乎总是有用的。使用numpy高效地将16位图像数据转换为8位显示,并进行强度缩放
下面的代码大致上是我想要的,但它丑陋而且效率低下,并且产生了很多图像数据的中间副本。 如何以最小的内存占用量和处理时间实现相同的结果?
import numpy
image_data = numpy.random.randint(#Realistic images would be much larger
low=100, high=14000, size=(1, 5, 5)).astype(numpy.uint16)
display_min = 1000
display_max = 10000.0
print(image_data)
threshold_image = ((image_data.astype(float) - display_min) *
(image_data > display_min))
print(threshold_image)
scaled_image = (threshold_image * (255./(display_max - display_min)))
scaled_image[scaled_image > 255] = 255
print(scaled_image)
display_this_image = scaled_image.astype(numpy.uint8)
print(display_this_image)
非常好!这是我自己不想拿出来的东西。 – Andrew
美丽而优雅的解决方案! – RockJake28