我需要一种简单快速的方法来比较两个图像的相似性.即如果它们包含完全相同的东西但是可能有一些稍微不同的背景并且可能被移动/调整大小几个像素,我想获得高值.
(更具体的是,如果重要的话:一张图片是一个图标,另一张图片是截图的子区域,我想知道该子区域是否恰好是图标.)
我手边有OpenCV,但我仍然不习惯它.
到目前为止我想到的一种可能性:将两张图片分成10x10个单元格,对于这100个单元格中的每一个,比较颜色直方图.然后我可以设置一些补偿阈值,如果我得到的值高于该阈值,我认为它们是相似的.
我还没有尝试过它的效果如何,但我想它会足够好.图像已经非常相似(在我的用例中),所以我可以使用相当高的阈值.
我想有很多其他可能的解决方案可以或多或少地工作(因为任务本身非常简单,因为我只想检测相似性,如果它们非常相似).你会建议什么?
关于从图像中获取签名/指纹/哈希,有一些非常相关/类似的问题:
另外,我偶然发现了这些具有获取指纹功能的实现:
关于感知图像哈希的一些讨论:这里
有点offtopic:有很多方法来创建音频指纹.MusicBrainz是一种为歌曲提供基于指纹的查找的网络服务,在他们的维基中有很好的概述.他们现在正在使用AcoustID.这是为了找到精确(或大部分精确)的匹配.要查找类似的匹配(或者如果您只有一些片段或高噪音),请查看Echoprint.一个相关的SO问题在这里.所以这似乎解决了音频问题.所有这些解决方案都非常有效.
我需要创建许多图像(大约100.000现有,每天1000新,RGB,JPEG,最大尺寸800x800)的指纹,以便非常快速地将每个图像与每个其他图像进行比较.我不能使用二进制比较方法,因为也应该识别几乎相似的图像.
最好的是现有的库,但对现有算法的一些提示对我有很大的帮助.
通过它们彼此的相似性来对一组给定图像进行排序的快速方法是什么.
目前我有一个系统在两个图像之间进行直方图分析,但这是一个非常昂贵的操作,似乎太过分了.
最理想的是,我正在寻找一种能够为每个图像提供分数的算法(例如整数分数,例如RGB平均值),我可以按该分数进行排序.相同的分数或分数彼此相邻可能是重复的.
0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994
Run Code Online (Sandbox Code Playgroud)
每张图像的RGB平均值很糟糕,有类似的东西吗?
我有大约150,000张照片,其中一些是重复的.我认为SSIM算法是比较两张图片并查看它们是否重复的不错选择.但是,如果我想以这种方式找到重复,我将不得不比较150.000*149.999图片,这将永远.
所以我现在正在寻找的是一种快速有效的算法,可以为每张图片创建平均值,然后只比较接近其平均值的图像.
简而言之:我正在寻找一种有效的图片分类方法!
我打算使用C++ CImg库来完成这项任务,因为它很快.
谢谢!