我不确定你的问题到底是什么,但下面的代码可能会帮助你实现结果。如果您发表评论,我可以改进答案。
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');
不能使用不同的颜色单一的通道,其原因,如果你认为什么样的价值纯白将在R,G和B颜色分割为更通常的RGB没有这样做,这将成为明显的,但在另一个像HSV的色彩空间。 – nkjt
我明白了,所以在使用'rgb2hsv()'之前我已经转换为HSV colorspace,但问题仍然是,我需要在值通道上执行哪些操作来标记像素? –
最终图像应该是什么样子?这听起来像是你想创建一个新的图像(最初)为绿色像素为0,否则为1。以这种方式,你会得到一张黑白照片。 – Alessiox