MATLAB tif文件格式vrs PNG文件格式。真正的无损压缩?

时间:2012-10-08 14:17:51

标签: matlab compression png tiff lossless

我一直在研究一个问题,我需要将矩阵保存为图像,并使其成为MATLAB中矩阵的真正无损示例。

我尝试用无损形式将图像写成png和tiff:

Name              Size                 Bytes  Class     Attributes

  diff            237x354               671184  double              
  imPng           237x354               167796  uint16              
  imPngD          237x354               671184  double              
  imTiff          237x354                83898  uint8               
  imTiffD         237x354               671184  double              
  padded         2042x2170            35449120  double              
  testImage       237x354               671184  double              

testImage是我想无损保存的矩阵。

我使用以下行将矩阵写为tif和png:

EDU>> imwrite(testImage,'imTiff.tif','tiff','compression','none');
EDU>> imwrite(testImage,'imTiff.png','PNG','bitdepth',16);

然后我将图像加载回工作区(imTiff和inPng)并将它们转换为double。

EDU>> imPngD = im2double(imPng);
EDU>> imTiffD = im2double(imTiff);

但是当我从testImage中减去imPngD或imTiffD时,剩下剩余的值。

我的问题是:
我的处理有问题吗?
如果不是,这是否意味着tif和png并非真正完全无损?

如果你觉得它有用,我可以提供图像。

我认为这些图片可能会有所帮助: testImage
testImage - original
imTiffD和testImage之间的区别
Difference between imTiffD and testImage
imPngD和testImage之间的区别
Difference between imPngD and testImage

请注意:图像2-3中灰色像素的值为零,即testImage和重新加载的图像之间的差值为零。

1 个答案:

答案 0 :(得分:1)

PNG和TIFF都是真正无损的(忽略打包JPEG的TIFF选项,你没有使用它)。然而,根据输入,它们确实是无损的,即PNG每个颜色值为8或16位,或者每个颜色值为TIFF为每像素8位。

如果您正在超越8位或16位值可以承载的精度,那么您将看到差异。