MATLAB:RGB到白色和黑色图像

时间:2016-09-11 03:38:34

标签: image matlab rgb

我有一张160x64x3的图片。此图像具有灰色点和其他颜色。我想要的是将灰色部分转换为0,将其他部分转换为1.

图片如下:

Image

我所做的是下面但我认为不确定,因为可能有一些点对于所有红色,绿色和蓝色是相同的。这有特殊功能吗?

~((image(:,:,1)==image(:,:,2))&(image(:,:,1)==image(:,:,3))&(image(:,:,2)==image(:,:,3))) 

1 个答案:

答案 0 :(得分:2)

我不知道任何特殊功能,但解决方案非常简单:

I = imread('sLUp2.png'); %Read source image.

%Initialize all destination pixels to 1
J = ones(size(I,1), size(I,2));

%Set to zero pixels which are gray in I (where Red==Green and Red==Blue).
J((I(:,:,1) == I(:,:,2)) & (I(:,:,1) == I(:,:,3))) = 0;

在上述解决方案中,所有R = G = B的源灰度像素都被认为是灰色的 例如:黑色像素:(0,0,0),白色像素(255,255,255)和(x,x,x)被视为灰色...

如果您只想查找单个常见灰度级(并非所有"灰度级"像素),您可以执行以下操作:

R = I(:, :, 1); %Red color plane.
Gray = R((I(:,:,1) == I(:,:,2)) & (I(:,:,1) == I(:,:,3))); %All values in which R=G=B.
H = imhist(Gray, 256); %Collect histogram of Gray.
common_gray = find(H == max(H)) - 1; %Find the most common gray value in histogram.

%Now, set only common_gray pixels to zero in destination image J.
J = ones(size(I,1), size(I,2));
J(R == common_gray) = 0;

在您的图片中,常见的灰度("灰点")等于 128

enter image description here