如何创建反向灰度?

时间:2017-04-28 21:36:05

标签: matlab grayscale

我在黑色背景上有一个带有深蓝色斑点的图像我想将其转换为灰度。反过来,我的意思是,我希望黑色地面是白色的。

当我将其转换为灰度时,它会使一切看起来都变黑并且很难区分。

  1. 有没有办法做一个反向灰度,黑色背景采用较浅的色调?
  2. 或者,另一个首选选项是将蓝色表示为白色,将黑色表示为黑色。
  3. 我现在在MATLAB中使用img = rgb2gray(img);

2 个答案:

答案 0 :(得分:2)

From mathworks site

IM2 = imcomplement(IM)

答案 1 :(得分:0)

  
      
  1. 有没有办法做黑色的逆灰度   背景采用浅色调?
  2.   

根据您的图片说明我创建了一张图片sample.png

img1 = imread('sample.png');        % Read rgb image from graphics file.
imshow(img1);                       % Display image.

original image

然后,我使用imcomplement函数获取原始图像的补码(如this answer中所示)。

img2 = imcomplement(img1);          % Complement image.
imshow(img2);                       % Display image.

结果如下:

complement image

  
      
  1. 或者,另一个更好的选择是将蓝色表示为白色和   黑色为黑色。
  2.   

在这种情况下,最简单的选择是使用蓝色通道。现在,根据您的需求,您可以使用两种方法:

方法1:将蓝色通道转换为二进制图像(B& W)

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.

结果如下:

binary image

请注意,由于强度信息丢失,原始图像中的圆形斑点在二值图像中变为八边形。

方法2:将蓝色通道转换为灰度图像

更好的方法是使用grayscale image,因为强度信息会被保留。

imshow函数提供imshow(I,[low high])重载,通过color axis scaling参数调整灰度图像的DisplayRange

这种超载的一个非常酷的功能是,我们可以让imshow为我们工作。

来自documentation

  

如果指定空矩阵([]),则imshow使用[min(I(:)) max(I(:))]。换句话说,请将I中的最小值用作黑色,将最大值用作白色。

看看代码:

img4 = img1(:, :, 3);               % Extract blue channel.
imshow(img4, []);                   % Display image.

结果如下:

grayscale image

请注意,斑点的圆形形状与原始图像完全一致。