为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

这完全取决于您希望算法的智能程度。

例如,这是一些问题:

  • 裁剪的图像与未裁剪的图像

  • 带有文字的图像与没有文字的图像

  • 镜像图像

我见过的最简单最简单的算法就是对每个图像执行以下步骤:

  1. 缩放到较小的尺寸(例如64x64或32x32),而不考虑宽高比,请使用组合缩放算法而不是最近的像素

  2. 缩放颜色范围,以使最暗的为黑色,最亮的为白色

  3. 旋转并翻转图像,以使最大的颜色在左上角,然后右上角变暗,左下角变暗(当然要尽可能)

编辑一个结合缩放算法是一个缩放10个像素时下降到一个会使用一个函数,所有的10个像素的颜色和它们组合成一个做到这一点。可以使用平均,均值或更复杂的算法(例如三次三次样条)来完成。

然后计算两个图像之间逐像素的平均距离。

要在数据库中查找可能的匹配项,请将像素颜色存储为数据库中的各个列,对它们进行索引(但不是全部,除非使用很小的图像),然后进行查询以对每个像素使用范围像素值,即 小图像中像素在要查找的图像的-5到+5之间的每个图像。

这很容易实现,并且运行起来相当快,但是当然不能处理大多数高级差异。为此,您需要更高级的算法。


查看完整回答
反对 回复 2019-10-23
?
米脂

TA贡献1836条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-10-23
?
隔江千里

TA贡献1906条经验 获得超10个赞

使用规格化的颜色直方图。(在此处阅读有关应用程序的部分),它们通常用于图像检索/匹配系统,并且是一种非常可靠,相对快速且易于实现的匹配图像的标准方法。


本质上,颜色直方图将捕获图像的颜色分布。然后可以将其与另一张图像进行比较,以查看颜色分布是否匹配。


这种匹配非常适合缩放(一旦对直方图进行归一化),旋转/移位/移动等。


避免逐像素比较,因为图像稍微旋转/移动可能会导致报告较大差异。


直方图很容易生成(假设您可以访问像素值),但是如果您不喜欢它,则OpenCV库是进行此类操作的理想资源。这是一个PowerPoint演示文稿,向您展示如何使用OpenCV创建直方图。


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 1151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信