Matlab图像阈值处理
以下代码显示了蓝色和红色组合的图像。但是,如果我删除close
声明它产生一个灰度图像(这是我想要的)。Matlab图像阈值处理
为什么会发生,以便将来避免它?
我正在关注this tutorial on 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
。如果您未关闭,则imagesc
使用相同的colormap
,并使用灰度级显示二进制图像。
否则,当前数字被破坏,创建一个新数字,并且imagesc
函数定义新的colormap
。在这种情况下,默认的colormap
是parula
,其从蓝色变为黄色。
请注意,您可以直接使用imshow
函数来显示二进制图像。
由于@dlegland指出,这是colormap的问题。
在MATLAB中,a 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,或者你甚至可以指定你自己的自定义色彩地图。