如何使用Scikit-Image库在Python中提取RGB图像的绿色通道?

11

对于Python中用于图像处理的scikit-image (skimage) 库,我非常陌生(刚才才开始学习!)。我已经使用imread将图像文件读入numpy.ndarray中。该数组是3维的,第三个维度的大小为3(分别对应图像的红色、绿色和蓝色组件)。

rgb_image = imread("input_rgb_image.jpg")
rgb_image.shape # gives (1411L, 1411L, 3L)

我尝试提取绿色通道为:

green_image = rgb_image[:,:,1]

但是,当我将这个图像矩阵写入输出文件时:

imsave("green_output_image.jpg",green_image)

我得到了一张看起来不完全是绿色的图片!


哦,我的错。我想我所做的只是用较小的尺寸创建了一个新的RGB图像。感谢指点! - exAres
奇怪的是,再次提取绿色通道会得到一张红色图像。这是我尝试从中提取绿色通道的图片链接:http://upload.wikimedia.org/wikipedia/commons/3/37/Fundus_photograph_of_normal_right_eye.jpg - exAres
好的。所以我应该将红色分量设为零,如下:rgb_image[:,:,0] = 0 等等... - exAres
还可以看一下这里的教程(https://github.com/scikit-image/skimage-tutorials)和这里的教程(http://scikit-image.org/docs/stable/user_guide.html)。 - Stefan van der Walt
1个回答

30
您提取的是单个通道,这显示出每个像素具有多少绿色。这将最终被呈现为灰度图像,其中较暗的像素表示在那些点上没有太多的“绿度”,而较亮的像素表示在那些点上有大量的“绿度”。
如果我正确理解了您的意思,您希望可视化每种颜色的“绿色”部分。在这种情况下,请将红色和蓝色通道都设置为零,保留绿色通道不变。
因此:
green_image = rgb_image.copy() # Make a copy
green_image[:,:,0] = 0
green_image[:,:,2] = 0

请注意,我已经复制了您的原始图像并更改了通道,而不是修改原始图像,以防您需要它。 但是,如果您只想提取绿色通道,并将其视为灰度图像,就像我上面提到的那样,则使用您的green_image变量进行上述操作就可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接