2016-02-28 29 views
0

我有一个图像,我试图标记为绿色的像素为0,一切都不绿色为1.但是,由于像素是在格式(x,y),我不知道如何去做。到目前为止,我已经加载的图像和提取的绿色通道,假定它是RGB格式,所以像(0,255,0)如何在Matlab中标记像素?

这是我到目前为止有:

% read in the image and display to make sure its loading correctly 
    I = imread('Sample.tif'); 
    imshow(I) 
    % extract green color channel 
    green = I(:,:,2); 
    % Extract all green pixels as an array? Then mark them as 0? 

    % Display resulting image 
    imshow(I) 

任何建议或资源在这里?提前致谢!

+0

不能使用不同的颜色单一的通道,其原因,如果你认为什么样的价值纯白将在R,G和B颜色分割为更通常的RGB没有这样做,这将成为明显的,但在另一个像HSV的色彩空间。 – nkjt

+0

我明白了,所以在使用'rgb2hsv()'之前我已经转换为HSV colorspace,但问题仍然是,我需要在值通道上执行哪些操作来标记像素? –

+0

最终图像应该是什么样子?这听起来像是你想创建一个新的图像(最初)为绿色像素为0,否则为1。以这种方式,你会得到一张黑白照片。 – Alessiox

回答

0

我不确定你的问题到底是什么,但下面的代码可能会帮助你实现结果。如果您发表评论,我可以改进答案。

0)以RGB格式读入图像。

第一种方法:分离出绿色和其他成分(分别绘制出每个成分),并将所有非绿色成分的最终图表设置为1.注意:由于所有成分都含有一定量的绿色。

第二种选择:根据最大贡献将图像分为红色,绿色或蓝色。最后一张图显示转换为黑白。注意:该算法不是矢量化的,所以如果处理大量/许多图像,这将会很慢。

I = imread('autumn.tif'); 

IG = I; IG(:,:,[1 3]) = 0; % Green only 
INoG = I-IG; 
INoG1 = INoG; INoG1(abs(INoG1) > 0) = 1; 
       % Possibly what you want? 


% Display resulting images 
subplot(4,2,1) 
imshow(I) 
title('Original'); 

subplot(4,2,2) 
imshow(INoG) 
title('No Green'); 

subplot(4,2,3) 
imshow(IG) 
title('Only Green'); 

subplot(4,2,4) 
imshow(INoG1) 
title('No Green (all 1?)'); 
% Note: There is a bit of each color in every pixel... 
%  => Potential solution: Use major contributor 

% Not vectorized => Slow for large images 
IRGB = I*0; 
for i = 1:size(I,1) 
for j = 1:size(I,2) 
    [~,k] = max(I(i,j,:)); 
    if (size(k) > 1) 
     k = k(1); 
    end 

    IRGB(i,j,k) = 255; 
end 
end 

IRGBG = IRGB; IRGBG(:,:,[1 3]) = 0; % Green only 
IRGBNoG = IRGB-IRGBG; 
BandWNoG = IRGBG(:,:,2); % Possibly what you want? 

% Display resulting images 
subplot(4,2,5) 
imshow(IRGB); 
title('RGB - Original'); 

subplot(4,2,6) 
imshow(IRGBNoG); 
title('RGB - No Green'); 

subplot(4,2,7) 
imshow(IRGBG); 
title('RGB - Only Green'); 

subplot(4,2,8) 
imshow(BandWNoG) 
title('Black and White - No Green'); 
+0

正是我想要做的。我部分得到了你现在在这里的东西。无论如何,子图很好地看到每个处理步骤发生了什么,我可以加我的噪音并继续,谢谢@PZwan –

相关问题