评估图像在压缩方面的质量?

12

我有一些用于计算机视觉任务的图像。这个任务对图像质量非常敏感。我想删除所有低于某个阈值的图像,但我不确定是否有任何方法/启发式来自动检测通过JPEG大量压缩的图像。有人有想法吗?


1
你最终解决了问题吗?看看我的更新答案。我在周末实现了它(结合各向异性扩散和SSIM方法),似乎给出了有希望的结果。我使用了各向异性扩散而不是高斯模糊。 - mpenkov
3个回答

23

图像质量评估是一个快速发展的研究领域。由于您没有提到能够访问原始(未压缩)图像,因此您对无参考图像质量评估感兴趣。这实际上是一个相当棘手的问题,但以下是一些入门的要点:

  • 由于您提到了JPEG,导致JPEG压缩图片中出现的两个主要退化特征: 阻塞模糊
  • 无参考图像质量评估指标通常会查找这两个特征
  • 阻塞比较容易检测,因为它只出现在宏块边界处。宏块是固定大小的 -- 8x8或16x16,具体取决于图像是用什么编码的
  • 模糊比较困难。它是由于图像中的高频率被衰减(移除),所以你可以将图像分成块,对每个块进行DCT(离散余弦变换)并检查其DCT结果的高频成分。如果大多数块的高频成分都不足,则可能是模糊的图像。
  • 检测模糊的另一种方法是测量图像边缘的平均宽度。对图像执行Sobel边缘检测,然后测量每个边缘两侧局部极小值/极大值之间的距离。搜索Marziliano的“A no-reference perceptual blur metric”,这是一种著名的方法。“No Reference Block Based Blur Detection”是Debing最近的一篇论文。

无论您使用哪种指标,都要考虑如何处理假阳性/阴性。与简单的阈值相反,我会使用指标结果对图像进行排序,然后剪切看起来只包含模糊图像的列表末尾。

如果您的图像集包含相似的内容(例如仅包含人脸),那么您的任务将更加简单。这是因为遗憾的是,图像质量评估指标通常会受到图像内容的影响。

Google Scholar在这里确实是您的好朋友。我希望我能给您一个具体的解决方案,但我目前还没有一个 - 如果有的话,我会成为一个非常成功的硕士研究生。

更新:

我想到了另一个想法:对于每个图像,使用JPEG重新压缩该图像,并检查重新压缩前后文件大小的变化。如果重新压缩后的文件大小显著小于之前的大小,则很可能该图像没有被强烈压缩,因为重新压缩时移除了一些重要细节。否则(差异非常小或重新压缩后文件大小更大),则很可能该图像已经被强烈压缩。

在重新压缩过程中使用图像质量设置将允许您确定何为强烈压缩

如果您使用Linux,那么使用bash和imageMagick的convert实用程序实现这个想法应该不太难。

您可以尝试这个方法的其他变体:

  • 不要使用JPEG压缩,而是使用另一种退化方式,比如高斯模糊
  • 不仅仅比较文件大小,而是尝试使用完整的参考指标,例如 SSIM -- 有一个OpenCV实现可供免费使用。其他实现(例如Matlab、C#)也存在,所以请自行搜索。

请告诉我您的进展情况。


Misha - 我正在研究 SSIM 实现,想知道两幅输入图像是什么?一个可能是我想要估计压缩率的图像,那另一幅图像呢?或者我们如何通过比较两幅图像来估计质量? - user973743

5
我有许多照片拍摄的古书(布局类似,每个图像两页),但其中一些非常模糊,以至于无法阅读文字。我搜索了一个现成的批处理脚本来查找最模糊的照片,但没有找到有用的,所以我使用了从网络上获取的另一部分脚本(基于ImageMagick,但不再起作用;我无法找到作者进行致谢!),用于评估单个图像的模糊程度,对其进行了调整,并在整个文件夹中自动化。我上传了这里:

https://gist.github.com/888239

希望这对其他人有用。它适用于Linux系统,并使用ImageMagick(以及一些通常安装在命令行的工具,如gawk,sort,grep等)。

0

一个简单的启发式方法是查看 width * height * color depth < sigma * file size。当然,您需要确定sigma的一个好值。 sigma将取决于您正在查看的图像的预期熵。


1
这只考虑了文件大小与图像尺寸的关系。但是,有些内容比其他内容更容易压缩;因此,一张图像在高压缩率下可能看起来很好,而另一张则不行。 - muckabout
有趣的方法,但我的图像将具有广泛的熵范围,因此我需要一种通用的方法。 - muckabout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接