将灰度图像保存为在喷射颜色图中显示的图像



我有灰度卫星图像,它是根据光谱数据处理的(波段分类)。如果我在imshow中使用jet颜色映射,它将显示绝对颜色映射图像。但如果我试图在特定的地方输入,它会像一个蓝色的图像一样保存下来。我在matlab中心看到了一个例子,但我没有得到。有人能帮我用彩色图像来写我的图像吗。

Matlab中心链接:http://www.mathworks.in/matlabcentral/answers/25026-saving-grayscale-image-as-it-appears-in-jet-colormap-of-imagesc

可接受的答案链接是:http://www.mathworks.com/matlabcentral/fileexchange/7943

我已经试过很多次了,这将在绘图中显示彩色地图图像(imshow),他们在任何地方都没有用彩色地图绘制。现在我想用彩色贴图来写我的图像。

示例代码:

I= imread('image path');
imshow(I,'colormap',jet);
imwrite(I,'path','jpg');  /not working

imwrite(I,jet,'path','jpg');  /not working

请帮助解决此问题。

使用imshow时,颜色映射总是根据图像中的值范围进行调整。但是,如果使用singledouble数据类型,则imwrite假定图像的值范围为[0,1]。保存之前,请尝试将图像缩放到[0,1]范围。

如果您在对imwrite的调用中提供了一个颜色映射,MATLAB会假设您使用的是索引图像。因此,您必须首先将图像转换为索引格式。以下片段适用于我的测试图像I

% scale to [0,1]
I = I - min(I(:));
I = I ./ max(I(:));
% Create indexed image
[J,~] = gray2ind(I);
% Save image
imwrite(J,jet,'path','jpg');

hbaderts的解决方案对我来说效果很好,但后来我发现一些图像的缩放方式与imshow略有不同。

然而,我可能会找到一个原始问题的原因。Matlab启动后,其默认颜色映射(包括"jet")设置为64种颜色(64x3)。然后,如果任何图像显示为具有颜色映射,例如,如果执行imshow('cameraman.tif'), colormap('jet'),则所有默认颜色映射变为256x3(可以在之前和之后使用jetMap=jet;进行验证)。然后,可能会发生这样的情况,即图像的颜色映射与应用于图像图形的颜色映射不同(例如,如果图形在imwrite之后调用)。

最后我找到了这个解决方案(不需要图像预缩放):

% Create indexed image, explicitly using 256 colors
imInd=gray2ind(im,256);
% Convert indexed image to RGB using 256-colors jet map
jetRGB=ind2rgb(imInd,jet(256));
% Save image
imwrite(jetRGB,'jet.png');

我使用的图像现在有相同的色阶,既有保存的图像,也有图中所示的图像。

最新更新