一尘不染

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

algorithm

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

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


阅读 445

收藏
2020-07-28

共1个答案

一尘不染

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

例如,这是一些问题:

  • 裁剪的图像与未裁剪的图像
  • 带有文本的图像与没有文本的图像
  • 镜像图像

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

  1. 缩放到较小的尺寸(例如64x64或32x32),而不考虑宽高比,请使用组合缩放算法而不是最近的像素
  2. 缩放颜色范围,以使最暗的为黑色,最亮的为白色
  3. 旋转并翻转图像,以使最大的颜色在左上角,然后右上角的下一个变暗,左下角的下一个变暗(当然要尽可能)

编辑 一个 结合缩放算法
是一个比例10个像素降低到一个时候会使用一个函数,所有的10个像素,并将其组合的颜色到一个做到这一点。可以使用平均,均值算法或双三次样条曲线等更复杂的算法来完成。

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

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

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

2020-07-28