3

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

我尝试以无损形式将图像写为 png 和 tiff:

名称大小字节类属性

  差异 237x354 671184 双              
  imPNG 237x354 167796 uint16              
  imPNGD 237x354 671184 双              
  imTiff 237x354 83898 uint8               
  imTiffD 237x354 671184 双              
  带衬垫的 2042x2170 35449120 双              
  测试图像 237x354 671184 双              

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

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

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

然后我将图像加载回工作空间(imTiff 和 inPng)并将它们转换为双倍。

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

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

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

如果您认为有帮助,我可以提供图片。

我认为这些图像可能会有所帮助: testImage
testImage - 原始
ImTiffD 和 testImage 之间的差异 imPngD 和 testImage
imTiffD 和 testImage 的区别
之间的差异
imPngD 和 testImage 的区别

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

4

1 回答 1

1

PNG 和 TIFF 都是真正无损的(忽略打包 JPEG 的 TIFF 选项,您没有使用该选项)。然而,考虑到它们的输入,它们是真正无损的,对于 PNG,每个颜色值每个像素 8 或 16 位,或者对于 TIFF,每个颜色值每个像素 8 位。

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

于 2012-10-08T15:15:28.397 回答