我在打开JPEG文件时遇到了MATLAB和libjpg的不同。
基本上,如果你在libjpg中打开JPEG文件(使用libjpg9或使用Gimp)并将文件保存为位图(无损),则将JPEG和BMP文件打开到matlab中,如下所示:
A=imread('example1.jpg');
B=imread('example2.bmp');
C=abs(double(A(:,:,1))-double(B)(:,:,1));
现在我希望,因为它们是相同的图像,阵列C将包含零,但事实证明,每个通道上的libjpg最多可以有5个阴影!
图像更清晰,差异更大。
最令人不安的是,我正在尝试制作焦点堆叠工具,我发现我的输出图像在Matlab中比使用libjpeg的c ++程序更清晰。我已经看了两周几周,我已经缩小了JPEG文件加载时的差异。似乎MATLAB将图像加载为比libjpg更锐利(或更高质量)。当您比较我的两个脚本的结果时,这一点很清楚。
还有其他人遇到过这个问题吗?为什么libjpg9以不同于MATLAB的方式解释jpeg文件?为什么libjpg9在加载JPEG时会失去质量?
编辑:
例如,请下载此zip。里面有sRGB颜色空间的JPG和MATLAB m脚本。要使用该示例,请在gimp中打开JPG并将其导出为BMP。然后只需运行脚本,它就会加载并比较两个文件。
https://dl.dropboxusercontent.com/u/15883001/JPGError.zip
我发现使用GIMP保存的JPG很好,问题似乎是sRGB颜色空间中的JPG。
在示例中,您还可以看到在将JPG读入MATLAB时每个通道都更清晰。这是我的主要关注点,略有不同的颜色表示很好,但细节的丢失(即清晰度的损失)真的很糟糕。
EDIT2:
我使用'Paint Shop Pro 5.0'读取JPG并将其保存为BMP,它与MATLAB版本完全匹配!我使用的是MATLAB 7.8.0(R2009a)
我尝试使用最新版本的Paint.NET,但它也关闭了,但与libjpg略有不同,看起来它更随意地关闭而不是丢失像libjpg这样的细节。我也确认在matlab中就是这种情况,因为检测到的边缘量大致相似。这更像是我期望的颜色空间略有不同,总体而言,Paint.NET对JPG的解释并未丢失细节。
我现在认为这是libjpg中的一个错误。
有关信息,我使用的是Gimp 2.8.10和Paint.NET v3.5.11。