我有从光谱数据(波段分类)处理的灰度卫星图像。如果我在imshow中使用jet colormap,它将显示绝对色彩映射图像。但是,如果我试图在特定的地方涂抹,它会像蓝色图像一样被保存。我在matlab中心看到了一个例子,但我没有得到。任何人都可以帮我用彩色图像来写我的图像。
接受的答案链接是: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
请帮助解决此问题。
答案 0 :(得分:4)
使用imshow
时,色彩映射始终会调整为图像中的值范围。但是,如果您使用imwrite
或single
数据类型,则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');
我使用的图像现在具有相同的色标,保存的图像和图中所示的图像。