我需要一个简单而快速的方法来比较两个图像的相似性。也就是说,如果它们包含完全相同的内容,但可能有一些略微不同的背景,并且可能被移动/调整了几个像素,我想要得到一个高值。
(更具体地说,如果这很重要的话:一张图片是一个图标,另一张图片是截图的一个子区域,我想知道这个子区域是否就是图标。)
我手头有OpenCV,但我仍然不太习惯它。
到目前为止,我想到的一种可能是:将两张图片分成10x10的单元格,对于这100个单元格中的每一个,比较颜色直方图。然后我可以设置一些虚构的阈值,如果我得到的值高于该阈值,我就假设它们是相似的。
我还没有试过它的效果如何,但我想它应该足够好了。图像已经非常相似(在我的用例中),所以我可以使用一个相当高的阈值。
我猜还有其他几十种可能的解决方案,它们或多或少会起作用(因为任务本身很简单,因为我只想检测相似性,如果它们真的非常相似)。你有什么建议吗?
关于从图像中获取签名/指纹/散列,有几个非常相关/相似的问题:
如何生成图像哈希/指纹/签名的描述符? 图像指纹可以比较多个图像的相似度 近重复图像检测 OpenCV:指纹图像和比对数据库。 更多,更多,更多,更多,更多,更多
此外,我偶然发现了这些实现,它们有这样的功能来获取指纹:
pHash 基于imgSeek (GitHub repo) (GPL)的快速多分辨率图像查询 图像匹配。跟我一直在找的东西很像。类似于pHash,基于任何类型图像的图像签名,Goldberg等人。使用Python和Elasticsearch。 iqdb ImageHash。支持pHash。 Image重复数据删除器(imagededup)。支持CNN, PHash, DHash, WHash, AHash。
关于知觉图像哈希的一些讨论:这里
有点跑题:有很多方法可以创建音频指纹。MusicBrainz,一个提供基于指纹的歌曲查找的网络服务,在他们的维基中有一个很好的概述。他们现在正在使用AcoustID。这是为了找到精确的(或大部分精确的)匹配。为了找到相似的匹配(或者如果你只有一些片段或高噪音),看看echopprint。这里有一个相关的SO问题。音频问题似乎解决了。所有这些解决方案都很有效。
这里有一个关于模糊搜索的更一般的问题。例如,有位置敏感哈希和最近邻居搜索。