以下代码显示的是蓝色和红色组合的图像。但是,如果我删除close
语句,它会产生一个灰度图像(这就是我想要的)。
为什么会这样,以便我将来可以避免它?
clear;
animal1=imread('animal1.jpg');
%% GrayScale
animal2=rgb2gray(animal1);
%% scale
bright=animal2*1.5;
imshow(bright);
close;
%% threshold
binary= bright>220;
imagesc(binary);
答案 0 :(得分:3)
当您调用imshow
函数时,会创建一个新数字,默认colormap
设置为grayscale
。如果您不拨打电话,imagesc
会使用相同的colormap
,并使用灰度显示二进制图片。
否则,将破坏当前图形,创建新图形,imagesc
函数定义新的colormap
。在这种情况下,默认colormap
为parula
,从蓝色变为黄色。
请注意,您可以直接使用imshow
功能显示二进制图像。
答案 1 :(得分:1)
正如@dlegland指出的那样,这是彩色地图的一个问题。
在MATLAB中,colormap定义数据(在图像,图中,等等)映射到屏幕上的颜色的方式。这是通过线性映射完成的,可以是different for each axes。
当你调用imshow
时,它是一个相对高级的函数,它改变了显示的轴的许多属性。这包括色彩映射,颜色限制以及刻度等其他内容。在您的情况下,由于您为其提供了灰度图像(使用rgb2gray
创建),因此将图形/轴设置为使用gray
色彩图。
imagesc
是一个较低级别的函数,不会对当前轴进行任何更改,但会改变颜色限制以覆盖整个动态范围的图像。因此,当您使用imagesc
在先前由imshow
使用的轴上绘制图像时。它只是使用imshow
正在使用的色彩映射(gray
)。
如果imshow
没有被调用,那么该图将使用默认的色彩图(通常为parula
),您的图像将使用此色彩图显示。
现在好处是您可以使用colormap
命令更改正在使用的色彩映射表。例如,要使用灰度,您可以
colormap gray
或者,如果您只想为特定轴指定该色彩图,则可以执行以下操作
ax = axes();
colormap(ax, gray)
您唯一的选择不是 gray
或parula
。 MATLAB有许多内置的colormaps,你甚至可以指定自己的自定义色图。