【问题标题】:Matlab Image thresholdingMatlab图像阈值处理
【发布时间】:2016-03-08 14:58:20
【问题描述】:
以下代码显示了一个由蓝色和红色组合而成的图像。但是如果我删除 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);
【问题讨论】:
标签:
matlab
image-processing
matlab-figure
【解决方案1】:
当您调用imshow 函数时,会创建一个新图形,默认colormap 设置为grayscale。如果不调用 close,imagesc 使用相同的colormap,并使用灰度级显示二进制图像。
否则,当前图形被销毁,创建一个新图形,imagesc 函数定义一个新的colormap。在这种情况下,默认的colormap 是parula,从蓝色变为黄色。
请注意,您可以直接使用imshow 函数显示二进制图像。
【解决方案2】:
正如@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,您甚至可以指定自己的自定义颜色图。