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

简单快速的方法来比较图像的相似性

/ 猿问

简单快速的方法来比较图像的相似性

慕村225694 2019-07-23 15:54:36

简单快速的方法来比较图像的相似性

我需要一种简单快速的方法来比较两个图像的相似性。即如果它们包含完全相同的东西但是可能有一些稍微不同的背景并且可能被移动/调整大小几个像素,我想获得高值。

(更具体的是,如果重要的话:一张图片是一个图标,另一张图片是截图的子区域,我想知道该子区域是否恰好是图标。)

我手边有OpenCV,但我仍然不习惯它。

到目前为止我想到的一种可能性:将两张图片分成10x10个单元格,对于这100个单元格中的每一个,比较颜色直方图。然后我可以设置一些补偿阈值,如果我得到的值高于该阈值,我认为它们是相似的。

我还没有尝试过它的效果如何,但我想它会足够好。图像已经非常相似(在我的用例中),所以我可以使用相当高的阈值。

我想有很多其他可能的解决方案可以或多或少地工作(因为任务本身非常简单,因为我只想检测相似性,如果它们非常相似)。你会建议什么?


关于从图像中获取签名/指纹/哈希,有一些非常相关/类似的问题:

另外,我偶然发现了这些具有获取指纹功能的实现:

关于感知图像哈希的一些讨论:这里


有点offtopic:有很多方法来创建音频指纹。MusicBrainz是一种为歌曲提供基于指纹的查找的网络服务,在他们的维基中很好的概述。他们现在正在使用AcoustID。这是为了找到精确(或大部分精确)的匹配。要查找类似的匹配(或者如果您只有一些片段或高噪音),请查看Echoprint。一个相关的SO问题在这里。所以这似乎解决了音频问题。所有这些解决方案都非常有效。

对一般的模糊搜索一个稍微更通用的问题是在这里。例如,存在局部敏感的散列最近邻搜索


查看完整描述

3 回答

?
白板的微信

屏幕截图或图标可以转换(缩放,旋转,倾斜......)吗?我脑子里有很多方法可以帮到你:

  • @carlosdc提到的简单欧几里德距离(不适用于转换后的图像,您需要一个阈值)。

  • (标准化)交叉关联 - 可用于比较图像区域的简单指标。它比简单的欧几里德距离更强大,但不适用于转换后的图像,您将再次需要一个阈值。

  • 直方图比较 - 如果使用标准化直方图,此方法效果很好,不受仿射变换的影响。问题是确定正确的阈值。它对颜色变化(亮度,对比度等)也非常敏感。您可以将它与前两个结合使用。

  • 突出点/区域的探测器 - 例如MSER(最大稳定极值区域)SURFSIFT。这些是非常强大的算法,它们可能对您的简单任务来说太复杂了。好的是,您不必拥有只有一个图标的确切区域,这些探测器足够强大,可以找到正确的匹配。本文对这些方法进行了很好的评估:局部不变特征检测器:一项调查

其中大部分已经在OpenCV中实现 - 例如参见cvMatchTemplate方法(使用直方图匹配):http://dasl.mem.drexel.edu/~noahKuntz/openCVTut6.html 。突出点/面积检测器也可用 - 请参阅OpenCV特征检测


查看完整回答
反对 2019-07-23
?
慕用2447696

屏幕截图是否仅包含图标?如果是这样,两个图像的L2距离可能就足够了。如果L2距离不起作用,下一步就是尝试一些简单而完善的东西,例如:Lucas-Kanade。我确信在OpenCV中可用。


查看完整回答
反对 2019-07-23
  • 3 回答
  • 0 关注
  • 567 浏览

添加回答

回复

举报

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