2016-03-08 211 views
0

以下代码显示了蓝色和红色组合的图像。但是,如果我删除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); 

回答

3

当你调用imshow功能,新的图形被创建,并且默认colormap设置为grayscale。如果您未关闭,则imagesc使用相同的colormap,并使用灰度级显示二进制图像。

否则,当前数字被破坏,创建一个新数字,并且imagesc函数定义新的colormap。在这种情况下,默认的colormapparula,其从蓝色变为黄色。

请注意,您可以直接使用imshow函数来显示二进制图像。

1

由于@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) 

你唯一的选择grayparula。 MATLAB有一些内置的colormaps,或者你甚至可以指定你自己的自定义色彩地图。