将JPEG加载到Matlab和libjpeg中的差异

时间:2014-05-20 06:22:29

标签: c++ image matlab gimp

我在打开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。

0 个答案:

没有答案