Matlab图像阈值

时间:2016-03-08 14:58:21

标签: matlab image-processing matlab-figure

以下代码显示的是蓝色和红色组合的图像。但是,如果我删除close语句,它会产生一个灰度图像(这就是我想要的)。

为什么会这样,以便我将来可以避免它?

我关注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);

2 个答案:

答案 0 :(得分:3)

当您调用imshow函数时,会创建一个新数字,默认colormap设置为grayscale。如果您不拨打电话,imagesc会使用相同的colormap,并使用灰度显示二进制图片。

否则,将破坏当前图形,创建新图形,imagesc函数定义新的colormap。在这种情况下,默认colormapparula,从蓝色变为黄色。

请注意,您可以直接使用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)

您唯一的选择不是 grayparula。 MATLAB有许多内置的colormaps,你甚至可以指定自己的自定义色图。