我有灰度卫星图像,它是根据光谱数据处理的(波段分类)。如果我在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
时,颜色映射总是根据图像中的值范围进行调整。但是,如果使用single
或double
数据类型,则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');
我使用的图像现在有相同的色阶,既有保存的图像,也有图中所示的图像。