如何测量两个图像之间的相似度? [关闭]
image
image-processing
language-agnostic
5
0

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

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

参考资料:
Stack Overflow
收藏
评论
共 10 个回答
高赞 时间 活跃

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

例如,这是一些问题:

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

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

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

编辑 组合缩放算法是一种将10像素缩小到1的算法 ,该函数将使用所有这10个像素的颜色并将它们合并为一个的函数。可以使用平均,均值或更复杂的算法(例如三次三次样条)来完成。

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

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

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

收藏
评论

我想知道(我真的只是想把想法扔掉),是否可以通过从另一张图片中减去一张图片,然后将生成的图片压缩为gif jpeg,并将文件大小设为相似度。

如果您有两个相同的图像,则会得到一个白色框,该框的压缩效果非常好。图像差异越大,代表的图像就越复杂,因此可压缩性越差。

可能不是理想的测试,并且可能比必要的测试慢得多,但是它可能是快速而肮脏的实现。

收藏
评论

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

收藏
评论

您将需要模式识别 。为了确定两个图像之间的细微差异, Hopfield网络工作得很好并且很容易实现。我不知道任何可用的实现。

收藏
评论

您可以使用O(n^2)的纯数学方法,但是仅当您确定没有偏移量或类似的东西时,它才有用。 (尽管如果您有一些具有均匀颜色的对象,它仍然可以很好地工作。)

无论如何,这个想法是计算两个矩阵的归一化点积。 C = sum(Pij*Qij)^2/(sum(Pij^2)*sum(Qij^2))

该公式实际上是矩阵之间的角度(余弦)的“余弦”。相似度越大(让我们说Pij=Qij ),C将等于1,如果它们完全不同,则对于每个i,j Qij = 1 (避免零除),让Pij = 255 ,然后使大小nxnn越大,我们越接近零。 (通过粗略计算: C=1/n^2 )。

收藏
评论

您可能会看一下开放源代码工具findimagedupes的代码,尽管它似乎是用perl编写的,所以我不能说它的解析是多么容易...

阅读我喜欢的findimagedupes页面,我发现有一个C ++实现了相同的算法 。大概这将更容易理解。

看来您也可以使用gqview

收藏
评论

如何测量两个图像之间的相似性完全取决于您要测量的内容,例如:对比度,亮度,模态,噪声...,然后选择最适合您的相似性度量。您可以选择适合测量亮度的MAD (平均绝对差), MSD (均方差)...还有可用的CR (相关系数),可以很好地表示两个图像之间的相关性。您还可以从基于直方图的相似性度量(例如SDH (差异图像直方图的标准偏差))或多模态相似性度量(如MI (互信息)或NMI (标准化互信息))中进行选择。

由于这种相似性度量会花费大量时间,因此建议在对这些度量应用这些度量之前先缩小图像。

收藏
评论

像MPEG这样的视频编码算法不计算视频的每个帧之间的差异,以便它们可以对增量进行编码吗?您可能会研究视频编码算法如何计算那些帧差异。

查看此开源图像搜索应用程序http://www.semanticmetadata.net/lire/ 。它描述了几种图像相似度算法,其中三种来自MPEG-7标准:ScalableColor,ColorLayout,EdgeHistogram和Auto Color Correlogram。

收藏
评论

可以在这里找到红宝石溶液

从自述文件:

Phashion是围绕pHash库(“感知哈希”)的Ruby包装,可检测重复的和几乎重复的多媒体文件

收藏
评论

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

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

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

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号