保存在jet colormap中显示的灰度图像

时间:2014-11-06 06:27:50

标签: image matlab image-processing octave

我有从光谱数据(波段分类)处理的灰度卫星图像。如果我在imshow中使用jet colormap,它将显示绝对色彩映射图像。但是,如果我试图在特定的地方涂抹,它会像蓝色图像一样被保存。我在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),他们没有用彩色图像写任何地方。现在我想用colormaped编写我的图像。

示例代码:

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

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

请帮助解决此问题。

2 个答案:

答案 0 :(得分:4)

使用imshow时,色彩映射始终会调整为图像中的值范围。但是,如果您使用imwritesingle数据类型,则double假设您的图片的值范围为[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');

答案 1 :(得分:0)

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');

我使用的图像现在具有相同的色标,保存的图像和图中所示的图像。