简单快速的方法来比较图像的相似性
我需要一种简单快速的方法来比较两个图像的相似性。即如果它们包含完全相同的东西但是可能有一些稍微不同的背景并且可能被移动/调整大小几个像素,我想获得高值。
(更具体的是,如果重要的话:一张图片是一个图标,另一张图片是截图的子区域,我想知道该子区域是否恰好是图标。)
我手边有OpenCV,但我仍然不习惯它。
到目前为止我想到的一种可能性:将两张图片分成10x10个单元格,对于这100个单元格中的每一个,比较颜色直方图。然后我可以设置一些补偿阈值,如果我得到的值高于该阈值,我认为它们是相似的。
我还没有尝试过它的效果如何,但我想它会足够好。图像已经非常相似(在我的用例中),所以我可以使用相当高的阈值。
我想有很多其他可能的解决方案可以或多或少地工作(因为任务本身非常简单,因为我只想检测相似性,如果它们非常相似)。你会建议什么?
关于从图像中获取签名/指纹/哈希,有一些非常相关/类似的问题:
另外,我偶然发现了这些具有获取指纹功能的实现:
imgSeek(GitHub repo)(GPL)基于纸张快速多分辨率图像查询
图像匹配。与我的搜索非常相似。与pHash类似,基于任何类型图像的图像签名,Goldberg等。使用Python和Elasticsearch。
ImageHash。支持pHash。
关于感知图像哈希的一些讨论:这里
有点offtopic:有很多方法来创建音频指纹。MusicBrainz是一种为歌曲提供基于指纹的查找的网络服务,在他们的维基中有很好的概述。他们现在正在使用AcoustID。这是为了找到精确(或大部分精确)的匹配。要查找类似的匹配(或者如果您只有一些片段或高噪音),请查看Echoprint。一个相关的SO问题在这里。所以这似乎解决了音频问题。所有这些解决方案都非常有效。
对一般的模糊搜索一个稍微更通用的问题是在这里。例如,存在局部敏感的散列和最近邻搜索。