过度的绿色提取实施

时间:2015-04-25 14:37:41

标签: matlab image-processing matlab-figure

我想将图像像素分割成植被和非植被。为此开发了过多的绿色提取算法。算法如下所示。

Outimage(x,y,z)= inimage(x,y,z)

if {inimage(x,y,r)< (x,y,g)inimage(x,y,b)< (x,y,g)}

outimage(x,y,z)= 0否则*

其中outimage(x,y,z)是以jpg格式保存的过度绿色分割后的输出图像,inimage(x,y,z)是相机获取的图像,x是每行中的像素数,y是每列中的像素数,z是红色的主色平面,z等于1,绿色z是2,蓝色是z。

我没有得到如何实现这一点,所以请帮助我实现它。或者只是给出一些粗略的想法或建议如何实现它。

输入图片:

input image

输出:

我希望在应用上述算法后输出采用这种格式

2 个答案:

答案 0 :(得分:4)

构建2D蒙版,然后使用bsxfun将其应用于所有颜色分量(第三个暗淡切片):

inimage = imread('filename'); %// type uint8
mask = inimage(:,:,1)<inimage(:,:,2) & inimage(:,:,3)<inimage(:,:,2); %// 2D mask
outimage = bsxfun(@times, inimage, uint8(mask)); %// apply mask replicated along 3rd dim

enter image description here

答案 1 :(得分:1)

另一种解决方案是将图像转换为HSV colorspace,如果您不熟悉它,它会将RGB值转换为Hue(颜色),饱和度(颜色多么鲜艳),〜亮度(照度级)。关于这一点的好处是你可以在所有照明条件下寻找相同的颜色。

除了我们如何获得我们的面具(使用绿色色调)之外,它与rgb版本采用的过程完全相同

inimage = imread('plants.png');
hsv_im = rgb2hsv(inimage);

%plots only the hues so we can get an idea of what to segment out
hue_channel = 1;
figure(1)
imshow(hsv_im(:,:,hue_channel));   %displays only the hue channel/layer
colormap(hsv)            %uses the hue colormap
colorbar                 %displays the colorbar

%masks the greenish regions (this is subjective)
mask = hsv_im(:,:,hue_channel) < 0.5 & hsv_im(:,:,hue_channel) > 0.2;

%applies the mask to all 3 color layers
outimage = bsxfun(@times, inimage, uint8(mask));
figure(2)
subplot(1,2,1);imshow(inimage);title('original image')
subplot(1,2,2),imshow(outimage);title('segmented image')

enter image description here enter image description here