我有类似这样的代码
from skimage import io as sio
test_image = imread('/home/username/pat/file.png')
test_image = skimage.transform.resize(test_image, (IMG_HEIGHT, IMG_WIDTH), mode='constant', preserve_range=True)
print test_image.shape # prints (128,128)
print test_image.max(), test_image.min() # prints 65535.0 0.0
sio.imshow(test_image)
更重要的是,我需要将该图像分成3个通道,这样我才能将其输入到期望输入的神经网络中,知道怎么做?
我想将一个1通道的图像转换为一个3通道的图像,当我绘制它时,它看起来是合理的,有意义的,等等。
我尝试使用0填充,我尝试为3个通道复制相同的值3次,但是当我尝试显示图像时,看起来像乱七八糟的东西。那么,如何将图像转换成3个通道,即使它变成蓝标而不是灰度,但仍然能够以有意义的方式对其进行可视化?
编辑: 如果我尝试
test_image = skimage.color.gray2rgb(test_image)
我得到全白色的图像,带有一些黑点。
如果我尝试的话,我会得到全白的,罕见的小黑点
convert Test1_PC_1.tif -colorspace sRGB -type truecolor Test1_PC_1_new.tif
在尝试使用gray2rgb进行转换之前
print type(test_image[0,0])
<type 'numpy.uint16'>
之后
print type(test_image[0,0,0])
<type 'numpy.float64'>
答案 0 :(得分:4)
您需要将数组从2D转换为3D,其中第三维是颜色。
您可以使用skimage提供的gray2rgb功能:
test_image = skimage.color.gray2rgb(test_image)
或者,您可以编写自己的转换-这样可以灵活地调整像素值:
# basic conversion from gray to RGB encoding
test_image = np.array([[[s,s,s] for s in r] for r in test_image],dtype="u1")
# conversion from gray to RGB encoding -- putting the image in the green channel
test_image = np.array([[[0,s,0] for s in r] for r in test_image],dtype="u1")
我从您的max()
值中注意到,您使用的是16位样本值(不常见)。您需要一个不同的dtype
,也许是"u16"
或"int32"
。另外,您可能需要玩一些游戏才能使图像以正确的极性显示(可能以黑白反转显示)。
一种实现方法是只反转所有像素值:
test_image = 65535-test_image ## invert 16-bit pixels
答案 1 :(得分:2)
通过将灰度值复制三遍以使R==G==B
正确,您可以从灰度值转换为RGB。
显示结果异常可能是由显示期间的假设引起的。在显示之前,您需要先缩放数据。
通常,uint8图像的值介于0-255之间,它们映射到显示的最小-最大比例。 Uint16的值为0-65535,其中65535映射为最大值。浮点图像通常被认为在0-1范围内,其中1映射到最大值。然后,任何更大的值也将被映射为max。这就是为什么您在输出图像中看到这么多白色的原因。
如果您将每个输出样本除以图片中的最大值,则可以正确显示它。
答案 2 :(得分:1)
好吧,imshow默认情况下使用一种热图来显示图像强度。要显示灰度图像,只需如上所述指定颜色图即可:
plt.imshow(image, cmap="gray")
现在,我认为您可以通过执行以下操作获得图像的频道:
image[:,:,i] where i is in {0,1,2}
要提取特定频道的图像,请执行以下操作:
red_image = image.copy()
red_image[:,:,1] = 0
red_image[:,:,2] = 0
编辑: 您是否一定要使用skimage? python-opencv模块呢? 您是否尝试过以下示例?
import cv2
import cv
color_img = cv2.cvtColor(gray_img, cv.CV_GRAY2RGB)