我一直在研究一个问题,我需要将矩阵保存为图像,并使其成为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
imTiffD和testImage之间的区别
imPngD和testImage之间的区别
请注意:图像2-3中灰色像素的值为零,即testImage和重新加载的图像之间的差值为零。
答案 0 :(得分:1)
PNG和TIFF都是真正无损的(忽略打包JPEG的TIFF选项,你没有使用它)。然而,根据输入,它们确实是无损的,即PNG每个颜色值为8或16位,或者每个颜色值为TIFF为每像素8位。
如果您正在超越8位或16位值可以承载的精度,那么您将看到差异。