我有一个图像,我试图将绿色的像素标记为0,并将所有绿色标记为1.但是,由于像素的格式为(x,y),因此我不确定如何处理它。到目前为止,我已经加载了图像并提取了绿色通道,假设它是RGB格式,所以类似于(0,255,0)
这是我到目前为止所拥有的:
% 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 :(得分: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');