【问题标题】:MATLAB tif file format vrs PNG file format. True lossless compression?MATLAB tiff 文件格式与 PNG 文件格式。真正的无损压缩?
【发布时间】:2012-10-08 14:17:50
【问题描述】:

我一直在解决一个问题,我需要将矩阵保存为图像,并使其成为 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

imTiffD 和 testImage 的区别

imPngD 和 testImage 的区别

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

【问题讨论】:

  • 它们有何不同?会不会只是浮点错误的副作用?
  • 像素值是否适合 PNG 的 16 位?如果值有小数,转换为 16 位整数可能会导致精度损失。如果要写入真正的双值像素,请查看 Tiff 对象。
  • 对不起,我不熟悉浮点错误。差异很小,如果我取 testImage - imTiffD 之间的最大和最小差异,答案是 +- 0.001960784313725,而对于 testImage - imPngD,答案是 +- 7.629510948348184e-06

标签: matlab compression png tiff lossless


【解决方案1】:

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

如果您超出 8 位或 16 位值可以承载的精度,那么您会发现差异。

【讨论】:

  • 所以我可以正确地得出结论,在上面的图像 2-3(刚刚添加)与 testImage 存在差异的区域中,testImage 的矩阵值的精度在我将矩阵保存为 png 或 tiff?
  • 你可能在那个区域溢出了。由于您的源图像是双倍的,因此 0 到 1 的范围被缩放到 0 到 255。如果数据小于 0 或大于 1,那么您将环绕,当它返回时,所有值都将介于0 和 1。检查您的数据。
猜你喜欢
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多