如何测量两个图像之间的相似度?

我想将一个应用程序(可能是网页)的屏幕快照与先前获取的屏幕快照进行比较,以确定该应用程序是否正确显示了自己。我不希望进行完全匹配比较,因为方面可能略有不同(对于Web应用程序,取决于浏览器,某些元素可能位于稍有不同的位置)。它应该衡量屏幕截图的相似程度。

是否已经有一个库/工具?您将如何实施?


慕娘9325324
浏览 1155回答 3
3回答

慕标琳琳

这完全取决于您希望算法的智能程度。例如,这是一些问题:裁剪的图像与未裁剪的图像带有文字的图像与没有文字的图像镜像图像我见过的最简单最简单的算法就是对每个图像执行以下步骤:缩放到较小的尺寸(例如64x64或32x32),而不考虑宽高比,请使用组合缩放算法而不是最近的像素缩放颜色范围,以使最暗的为黑色,最亮的为白色旋转并翻转图像,以使最大的颜色在左上角,然后右上角变暗,左下角变暗(当然要尽可能)编辑一个结合缩放算法是一个缩放10个像素时下降到一个会使用一个函数,所有的10个像素的颜色和它们组合成一个做到这一点。可以使用平均,均值或更复杂的算法(例如三次三次样条)来完成。然后计算两个图像之间逐像素的平均距离。要在数据库中查找可能的匹配项,请将像素颜色存储为数据库中的各个列,对它们进行索引(但不是全部,除非使用很小的图像),然后进行查询以对每个像素使用范围像素值,即 小图像中像素在要查找的图像的-5到+5之间的每个图像。这很容易实现,并且运行起来相当快,但是当然不能处理大多数高级差异。为此,您需要更高级的算法。

米脂

衡量这种情况的“经典”方法是将图像分解为一定数量的标准部分(例如10x10网格),然后计算每个单元格内部的RGB值直方图并比较相应的直方图。首选这种类型的算法,因为它简单易行,并且缩放和(small!)转换不变。

隔江千里

使用规格化的颜色直方图。(在此处阅读有关应用程序的部分),它们通常用于图像检索/匹配系统,并且是一种非常可靠,相对快速且易于实现的匹配图像的标准方法。本质上,颜色直方图将捕获图像的颜色分布。然后可以将其与另一张图像进行比较,以查看颜色分布是否匹配。这种匹配非常适合缩放(一旦对直方图进行归一化),旋转/移位/移动等。避免逐像素比较,因为图像稍微旋转/移动可能会导致报告较大差异。直方图很容易生成(假设您可以访问像素值),但是如果您不喜欢它,则OpenCV库是进行此类操作的理想资源。这是一个PowerPoint演示文稿,向您展示如何使用OpenCV创建直方图。
打开App,查看更多内容
随时随地看视频慕课网APP