如何在matlab中恢复以前的colormap?

时间:2015-02-02 11:27:01

标签: matlab colormap

我在一些数字范围内有一些图像。这是一个图像的例子:

laplacian

这是图片Laplacian Pyramid中的级别。 (没有必要了解拉普拉斯金字塔是什么......)

现在我需要对这些图像进行一些操作,我需要更改颜色图。我将它改为灰色(256)并进行了我需要的操作。所以现在我在colormap(gray(256))中有不同的图像。

现在我需要缩小到之前的范围。但我不知道以前的范围或色彩图。我尝试在操作之前保存色彩映射。

我试过了:

imwrite(img,colormap(gray(256)),str);

但是将整个矩阵改为255。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

imwrite(img,colormap(gray(256)),str);

colormap仅设置figure的颜色,因此您在imwrite中不需要它。事实上,它在这里没有任何价值。如果您传递地图gray(256),它会将其写为索引图像。也就是说,它会在文件中保存像素值和地图,这些值表示这些值的含义。

但是,它不会缩放输入图像以巧妙地匹配色彩映射。正如文档中所述:

  

如果A是数据类型为double或single的索引图像,则为imwrite   通过从每个索引中减去1将索引转换为从零开始的索引   元素,然后将数据写为uint8。如果A中的数据是   单个,在写入GIF或TIFF文件之前将A转换为double。

这意味着如果您的img包含所有256或更高的值,imwrite将减去1,并写为uint8,剪裁值超过255到255(及低于0)到0)。所以你的图像全部显示为255。

您需要先将img缩放到适当的范围(例如,在对其执行任何操作之前记录输入矩阵的最大值和最小值 - 而不是colormap! - )。这只是数学 - 例如像img = img/256这样的东西可能就是你所需要的。在大多数情况下,没有必要使用地图保存它 - 您只是将您的值写为灰度,您可以使用imwrite将它们保存到普通图像中。

imwrite通常希望double的范围为0到1,uint8的范围为0到255.如果您的值不匹配,则,你会得到剪辑/"空白"图像等。

但是,由于值以大多数图像格式存储为整数(uint8),因此我不知道如何使用imwrite保存您在示例中显示的值的类型不失精度。您也无法保存任何负值。因此,最好以不同的格式(*.mat文件,csv等)保存您的实际值,并在需要可视化时保存图像,但不能存储计算值。