我一直在研究一个问题,我需要将矩阵保存为图像,并使其成为 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 is the matrix I would like to save losslessly.
I used the following lines to write the matrix as a tif and 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 并非真正完全无损?
如果您认为有帮助,我可以提供图片。
我认为这些图片可能会有所帮助:
测试图片
imTiffD 和 testImage 的区别
imPngD 和 testImage 的区别
请注意:图像 2-3 中的灰色像素值为零,即 testImage 与重新加载图像之间的差异为零。
最佳答案
PNG 和 TIFF 都是真正无损的(忽略 TIFF 选项来打包 JPEG,您没有使用它)。然而,考虑到它们的输入,它们是真正无损的,对于 PNG,每个像素每个颜色值 8 位或 16 位,或者对于 TIFF,每个像素每个颜色值 8 位。
如果您正在寻找超出 8 位或 16 位值可以携带的精度,那么您会看到差异。
关于MATLAB tiff 文件格式与 PNG 文件格式。真正的无损压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12783602/