我在黑色背景上有一个带有深蓝色斑点的图像。 我想将其转换为逆灰度。反过来,我的意思是,我希望黑色地面是白色的。
当我将其转换为灰度时,它会使一切看起来都变黑并且很难区分。
我现在在MATLAB中使用img = rgb2gray(img);
。
答案 0 :(得分:2)
IM2 = imcomplement(IM)
答案 1 :(得分:0)
- 有没有办法做黑色的逆灰度 背景采用浅色调?
醇>
根据您的图片说明我创建了一张图片sample.png
:
img1 = imread('sample.png'); % Read rgb image from graphics file.
imshow(img1); % Display image.
然后,我使用imcomplement
函数获取原始图像的补码(如this answer中所示)。
img2 = imcomplement(img1); % Complement image.
imshow(img2); % Display image.
结果如下:
- 或者,另一个更好的选择是将蓝色表示为白色和 黑色为黑色。
醇>
在这种情况下,最简单的选择是使用蓝色通道。现在,根据您的需求,您可以使用两种方法:
This comment建议使用logical operation img(:,:,3) > 0
,它将返回蓝色通道的二进制数组,其中每个非零值像素都将映射到1
(白色),其余像素的值为0
(黑色)。
虽然这种方法简单有效,binary images有一个失去intensity information的巨大缺点。这可以改变图像的感知属性。看看代码:
img3 = img1(:, :, 3) > 0; % Convert blue channel to binary image.
imshow(img3); % Display image.
结果如下:
请注意,由于强度信息丢失,原始图像中的圆形斑点在二值图像中变为八边形。
更好的方法是使用grayscale image,因为强度信息会被保留。
imshow
函数提供imshow(I,[low high])
重载,通过color axis scaling参数调整灰度图像的DisplayRange。
这种超载的一个非常酷的功能是,我们可以让imshow
为我们工作。
如果指定空矩阵
([])
,则imshow
使用[min(I(:)) max(I(:))]
。换句话说,请将I
中的最小值用作黑色,将最大值用作白色。
看看代码:
img4 = img1(:, :, 3); % Extract blue channel.
imshow(img4, []); % Display image.
结果如下:
请注意,斑点的圆形形状与原始图像完全一致。