如何在matlab中使用colormap?

时间:2015-06-10 07:55:10

标签: matlab

我想阅读自定义图像并应用matlab中的示例中的颜色图。我怎样才能做到这一点?我看到示例imageext使用自定义图像并应用了色彩图,我想对我的图像做同样的事情。怎么做到呢?我想在matlab中使用我自己的图片作为imageext这样的例子。

这不起作用:

I = im2double(imread('niklas3.png')); figure(1); imshow(I,[]); daspect([1 1 1]); axis off; colormap gray;

niklas3.png:

enter image description here

但是这段代码有效:

I = im2double(imread('cameraman.tif')); figure(1); imshow(I,[]); daspect([1 1 1]); axis off; colormap summer;

1 个答案:

答案 0 :(得分:2)

如果之前显示在图中,您可以在所需的任何图像中应用色彩图。

我建议您使用 imagesc imshow 来显示图像。为此,您需要使用 imread 加载图像。一个好的做法是将图像数据转换为双精度。

I = im2double(imread('cameraman.tif'));

如您所见, im2double 将图像数据转换为从0值到1值的双精度。如果您不想这样,可以使用 double 函数,范围从0到255。

稍后,您需要将图像显示为图形。我强烈建议使用 imagesc 而不是 imshow ,因为 imagesc 允许您自定义数据和显示(例如,添加不同的colormap )。

figure(1); imagesc(I); daspect([1 1 1]); axis off; 

现在,您可以使用所需的色彩映射表。输入 help colormap 以获取更多信息,但您可以使用 jet colormap(默认), grey hot bones 或任何你想要的东西,只需输入:

colormap gray;

如果您绘制了多个图像,则需要使用以下标记指示目标图像:

figure(1); colormap gray;

如果您想使用 imshow ,只需输入:

即可
figure(1); imshow(I,[]); daspect([1 1 1]); axis off; colormap gray;

编辑:一旦我看到您的图片,我就知道您的问题是您正在尝试将色彩映射应用到RGB图像中。也就是说,您尝试将其应用到3D矩阵中,其中行和列标识像素值,第三维标识RGB组件。

因此,您需要将RGB图像转换为2D矩阵(黑白色矩阵)。您可以通过沿第三维执行平均值来完成此操作。

I = nanmean(I,3);

最后,你应该像我之前说的那样应用色彩映射。最终的代码是:

I = im2double(imread('niklas3.jpg'));
I = nanmean(I,3);
figure(1); imshow(I,[]); daspect([1 1 1 ]); axis off;
colormap jet;

这是使用 jet 色彩映射的结果:

Jet colormap applied to the RGB image