下面的代码显示了蓝色和红色组合的图像。但是如果我删除close
语句,它会产生灰度图像(这就是我想要的)。
为什么会发生这种情况,以便将来可以避免它?
我在YouTube上遵循本教程。
clear;
animal1=imread('animal1.jpg');
%% GrayScale
animal2=rgb2gray(animal1);
%% scale
bright=animal2*1.5;
imshow(bright);
close;
%% threshold
binary= bright>220;
imagesc(binary);
调用 imshow
函数时,将创建一个新图形,并将默认colormap
设置为 grayscale
。如果不调用 close,imagesc
将使用相同的colormap
,并使用灰度级别来显示二进制图像。
否则,当前图形将被销毁,创建一个新图形,并且 imagesc
函数定义一个新的colormap
。在这种情况下,默认colormap
是 parula
,其阴影从蓝色到黄色。
请注意,您可以直接使用 imshow
函数显示二进制图像。
正如@dlegland所指出的,这是颜色图的问题。
在 MATLAB 中,颜色图定义了数据(在图像、绘图等中)映射到屏幕上颜色的方式。这是通过线性映射完成的,每个轴可能不同。
当你调用imshow
时,它是一个相对高级的函数,它改变了显示它的轴的许多属性。这包括颜色图、颜色限制和其他内容,如刻度线。在您的情况下,由于您向它提供了灰度图像(您使用rgb2gray
创建),它将图形/轴设置为使用gray
颜色图。
然而,imagesc
是一个较低级别的函数,它不会对当前轴进行任何更改,除了它更改颜色限制以跨越图像的整个动态范围。因此,当您使用 imagesc
在以前由 imshow
使用的轴上绘制图像时。它只是使用imshow
正在使用的颜色图(gray
)。
如果未调用imshow
,则图形将使用默认颜色图(通常为parula
),并且图像将使用此颜色图显示。
现在的好处是您可以更改与 colormap
命令一起使用的颜色图。例如,要使用灰度,您将这样做
colormap gray
或者,如果您只想为特定轴指定该颜色图,则可以执行以下操作
ax = axes();
colormap(ax, gray)
您唯一的选择不是gray
或parula
。MATLAB 有许多内置的色彩图,您甚至可以指定自己的自定义色彩图。