MATLAB:使用负值和自定义颜色映射进行模拟

时间:2014-01-23 18:51:48

标签: image matlab color-mapping

我有一个自定义颜色地图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的新比例重新生成自定义颜色贴图,但是从中创建的图像也是不可读的。

有关如何实现这一目标的任何想法?

2 个答案:

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

我希望这能帮助你解决一些给我带来的麻烦!