【发布时间】: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