【发布时间】:2011-05-10 22:25:18
【问题描述】:
我需要一种简单快速的方法来比较两张图片的相似度。 IE。如果它们包含完全相同的东西,但背景可能略有不同,并且可能会移动/调整几个像素,我想获得一个高值。
(更具体地说,如果重要的话:一张图片是图标,另一张图片是屏幕截图的子区域,我想知道该子区域是否正是图标。)
我手头有 OpenCV,但我还是不太习惯。
到目前为止,我想到了一种可能性:将两张图片分成 10x10 个单元格,并为这 100 个单元格中的每一个单元格比较颜色直方图。然后我可以设置一些虚构的阈值,如果我得到的值高于该阈值,我认为它们是相似的。
我还没有尝试过它的效果如何,但我想它已经足够好了。这些图像已经非常相似(在我的用例中),所以我可以使用相当高的阈值。
我想还有很多其他可能的解决方案或多或少会起作用(因为任务本身非常简单,因为我只想检测相似性是否真的非常相似)。你有什么建议?
关于从图像中获取签名/指纹/哈希有几个非常相关/相似的问题:
- OpenCV / SURF How to generate a image hash / fingerprint / signature out of the descriptors?
- Image fingerprint to compare similarity of many images
- Near-Duplicate Image Detection
- OpenCV: Fingerprint Image and Compare Against Database。
- more, more, more, more, more, more, more
另外,我偶然发现了这些具有获取指纹功能的实现:
- pHash
- imgSeek (GitHub repo) (GPL) 基于论文Fast Multiresolution Image Querying
- image-match。与我正在寻找的非常相似。类似于 pHash,基于An image signature for any kind of image, Goldberg et al。使用 Python 和 Elasticsearch。
- iqdb
- ImageHash。支持 pHash。
- Image Deduplicator (imagededup)。支持 CNN、PHash、DHash、WHash、AHash。
关于感知图像哈希的一些讨论:here
有点题外话:有很多方法可以创建音频指纹。 MusicBrainz,一个提供基于指纹的歌曲查找的网络服务,有一个good overview in their wiki。他们现在使用AcoustID。这是为了查找精确(或大部分精确)匹配。要查找相似的匹配项(或者如果您只有一些 sn-ps 或高噪音),请查看 Echoprint。一个相关的 SO 问题是here。所以这似乎解决了音频问题。所有这些解决方案都非常有效。
关于模糊搜索的一般性问题是here。例如。有locality-sensitive hashing 和nearest neighbor search。
【问题讨论】:
-
也许图像指纹可以提供帮助? stackoverflow.com/questions/596262/…
-
Wasserstein 度量,也称为地球移动距离 (EMD),是人们似乎不知道的东西,但在这里几乎可以满足您的需求。
-
嗨,我想出了改进的 dHash——我称之为 IDHash:github.com/Nakilon/dhash-vips
-
还有像 image-match 这样的库还在维护吗?
标签: image-processing opencv computer-vision