我有一个自定义颜色地图cmap
,用于显示包含负值的矩阵X
。我用
image(X, 'CDataMapping', 'scaled');
colormap(cmap);
axis normal;
效果很好,但现在我想将矩阵保存为具有相同颜色映射的图像。
当我尝试以下操作时:
imwrite(X, cmap, 'test.tif');
我得到一张全黑的图片。我知道tiff想要将这些映射到0到1或0到2 ^ 16的空间,所以我试着做了
X = X - min(X(:));
X = (X/max(X(:)))*(2^16);
X = uint16(X);
但是当我尝试使用X
保存cmap
时,该文件已损坏且无法打开。我尝试使用0到2 ^ 16-1的新比例重新生成自定义颜色贴图,但是从中创建的图像也是不可读的。
有关如何实现这一目标的任何想法?
答案 0 :(得分:0)
似乎没有支持16位索引彩色图像保存的图像文件格式:
TIFF不支持索引颜色,PNG不支持16位索引。
尝试转换为完整RGB并将其保存为tiff:
rgb = ind2rgb( uint16(X), cmp ); % with X scaled as in your question
imwrite( rgb, 'myTiffImage.tif' ); % write the RGB image
答案 1 :(得分:0)
以下是我最终解决的问题:
除了修改矩阵之外,我还必须将颜色映射规范化为0到1的空间。我也不得不乘以彩色地图的长度而不是2 ^ 16。
以下是最终的结果:
cmap = cmap - min(cmap(:));
cmap = cmap/max(cmap(:));
N = size(cmap, 1);
X = X - min(X(:));
X = (X/max(X(:)))*N;
X = uint16(X);
imwrite(X, cmap, 'test.tif');
我希望这能帮助你解决一些给我带来的麻烦!