我想要实现的
我正在寻找一个软件链,以找到重复的图像。首先,这里是我如何定义一个重复的图像:有一个原始图像,直接来自一个相机,和修改版本的这个图像。修改映像可以是以下操作的任意操作或组合:
一个现实世界的例子:
原始图像

光度+亮度变化+大小调整

种植

帧+文本

匹配上述任何一组图像将导致找到一个副本。正如你所看到的,这种修改并不是为了破坏,而是为了改善。例如,图像的主体(这里是闹钟)将永远不会被裁剪在它的中间。
修改可以链接(新的修改可以基于以前的修改,而不是原始图像),导致图像被压缩了很多次。
然后,摄影师可以拍另一张照片:

这个观点和主题已经改变了(现在是0:02!) =>,与上面的任何图像相比,这个新的图像不应该被看作是重复的。
我到目前为止所做的事
#1 :摆脱框架
首先,我使用OpenCV的Canny检测器+ Hough算法在图像上找到垂直和水平线。然后,根据算法找到的线条对图像进行裁剪。
我一直面临这个解决方案的问题:当原始图片的背景中有水平线或垂直线时,很难区分哪些线条是从框架中,哪些是从图片=>手动检查。
我还设置了一个更高的阈值,以避免获得太多的假阳性:不幸的是,一些精心设计的框架(例如,具有梯度)会通过。
是否有更好的算法来检测这些帧?
#2 :寻找重复
到目前为止,我一直在使用pHash及其DCT图像哈希。它计算一个可视散列,并提供了一种在大型数据库中搜索类似图像的非常有效的方法。
优势:
缺点:
所有重复的pHash发现的结果也是手工评审。这不是问题,除非输入的数据是同一主题的数千张图像。要审查的重复数量则呈二次增长,这不太方便。
关于改进重复检测的几点思考
我一直在研究如何减少来自pHash的假阳性。我的第一个想法是将OpenCV的模板匹配到我现有的软件链中。问题:它不适用于旋转图像。
然后,我学到了特征检测,我认为这可能是一条路。然而,这是一个非常广阔的领域,这是我需要帮助的地方。
我在本PDF第81页发现了一个有趣的特征检测器的比较。如果我做得对,我需要“旋转不变”、“尺度不变”,而不是“仿射不变”(这似乎是观点的改变)。这将给我以下几种选择:
这些算法能满足我的需求吗?我应该将它们整合到我现有的链中,还是应该重新创建一个新的链?特征检测到重复匹配似乎还有很长的路要走,最好的方法是什么?
发布于 2014-01-03 07:37:03
您应该采用本地特性匹配方法(SURF/ORB/ should .)您可以在这里找到一个很好的教程:matcher.html--如果效率非常重要,您可以用一个定制的查找-刚性转换代码替换OpenCV的findHomography,但是如果它不是一个大问题,findHomography可能会很好地为您服务。
https://stackoverflow.com/questions/20802211
复制相似问题