Matlab 图像阈值



下面的代码显示了蓝色和红色组合的图像。但是如果我删除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。在这种情况下,默认colormapparula ,其阴影从蓝色到黄色。

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

正如@dlegland所指出的,这是颜色图的问题。

在 MATLAB 中,颜色图定义了数据(在图像、绘图等中)映射到屏幕上颜色的方式。这是通过线性映射完成的,每个轴可能不同。

当你调用imshow时,它是一个相对高级的函数,它改变了显示它的轴的许多属性。这包括颜色图、颜色限制和其他内容,如刻度线。在您的情况下,由于您向它提供了灰度图像(您使用rgb2gray创建),它将图形/轴设置为使用gray颜色图。

然而,imagesc是一个较低级别的函数,它不会对当前轴进行任何更改,除了它更改颜色限制以跨越图像的整个动态范围。因此,当您使用 imagesc 在以前由 imshow 使用的轴上绘制图像时。它只是使用imshow正在使用的颜色图(gray)。

如果未调用imshow,则图形将使用默认颜色图(通常为parula),并且图像将使用此颜色图显示。

现在的好处是您可以更改与 colormap 命令一起使用的颜色图。例如,要使用灰度,您将这样做

colormap gray

或者,如果您只想为特定轴指定该颜色图,则可以执行以下操作

ax = axes();
colormap(ax, gray)

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

最新更新