Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image MATLAB:RGB到黑白图像_Image_Matlab_Rgb - Fatal编程技术网

Image MATLAB:RGB到黑白图像

Image MATLAB:RGB到黑白图像,image,matlab,rgb,Image,Matlab,Rgb,我有一个图像是160x64x3。此图像具有灰点和其他颜色。我想要的是将灰色部分转换为0,将其他部分转换为1 下图: 我所做的如下,但我认为这是不确定的,因为可能有一些点是相同的所有红色,绿色和蓝色。这个有特殊功能吗 ~((image(:,:,1)==image(:,:,2))&(image(:,:,1)==image(:,:,3))&(image(:,:,2)==image(:,:,3))) 我不知道任何特殊函数,但解决方案非常简单: I = imread('sLUp2.p

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

下图:

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

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

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

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)、白色像素(255255)和(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


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

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)、白色像素(255255)和(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


难道你不能找出灰度的强度值,然后将其设置为0,其余的设置为1吗?当然你只需要取饱和度(对于灰度像素,饱和度为0)将其阈值设置为零,这将使所有非灰色变为白色。难道你不能找出灰色的强度值并将其设置为0,其余设置为1吗?当然,你只需将饱和度(灰色像素为零)设置为零,并将其阈值设置为零,这将使所有非灰色变为白色。没有明确说明,但灰色的“面具”不太可能不为人所知。因此,大概解决方案就像过滤精确的rgb元组一样简单。另外,值得指出的是,顶部的解决方案还将包括“黑色”和灰度点,给出示例图像似乎并不是有意的。这并不是一个完美的解决方案。请看以下示例:并将其与原始图像进行比较:@Sardar_Usama您可能是对的。我猜Toygan想要的是第二种解决方案,其中(0,0,0)和(255255255)不被认为是灰色的。我认为这最初也是OP的问题,似乎在编辑的解决方案中得到了解决。它没有明确说明,但灰色的“遮罩”不太可能是未知的。因此,大概解决方案就像过滤精确的rgb元组一样简单。另外,值得指出的是,顶部的解决方案还将包括“黑色”和灰度点,给出示例图像似乎并不是有意的。这并不是一个完美的解决方案。请看以下示例:并将其与原始图像进行比较:@Sardar_Usama您可能是对的。我猜Toygan想要的是第二个解决方案,其中(0,0,0)和(255255)不被认为是灰色的。我认为这最初也是OP关注的问题,似乎在编辑的解决方案中得到了解决。