问题:
MATLAB保存的图像使用别的代码/程序打开后,发现和保存前的图像不一致。为什么?怎么办?
先说结论
使用MATLAB对浮点型的图像结果进行保存,imwrite函数,会对当前保存的图像格式进行一个分类。
uint8和uint16自然不必多说, 主要对于浮点型数据的处理,
如果 A 是灰度图像或者属于数据类型 double 或 single 的 RGB 彩色图像,则 imwrite 假设动态范围是
[0,1],并在将其作为 8 位值写入文件之前自动按 255 缩放数据。如果 A 中的数据是 single,则在将其写入 GIF 或
TIFF 文件之前将 A 转换为 double。
这段话里面,对于imwrite的动态范围[0,1]的假设,其实就是说MATLAB认为数据范围在[0,1]之间,在此范围外的数据都会被截断到[0,1]之间。
下一步呢,就是把这个[0,1]之间的数据,缩放到[0,255],然后转换为uint8进行保存。
那么这种操作出现了两个问题,一个是在截断的时候出现了失真,第二个是在取整的时候精度变化。
所以如果还要接着对保存的图像进行操作,那么建议使用MAT格式,即save保存为MAT格式。