软件链来查找重复的图像

我正在努力实现的

我正在寻找一个软件链来查找重复的图像。 首先,我是如何定义一个重复图像的:这里有一个原始图像,直接来自相机,以及该图像的修改版本。 修改图像可以是以下操作中的任何一个或其组合:

  • 改变亮度,对比度和着色(图像的修改版本可能在黑白)
  • 裁剪
  • 调整
  • 旋转
  • 在图像周围添加一个框架
  • 写在框架上
  • 一个真实世界的例子:

    原始图像 原始图像

    亮度+亮度变化+调整大小 修改后的版本#1

    裁剪 修改版本#2

    框架+文字 修改版本#3

    匹配一对以上的任何图像应该会导致重复。 正如你所看到的,修改并不是为了破坏性的,而是为了改善。 例如,图像的主要主题(这里是闹钟)永远不会在其中间被裁剪。

    修改可以被链接(新的修改可以基于先前的修改而不是基于原始图像),导致图像被压缩很多次。

    然后,摄影师可以拍摄另一张照片:

    全新的形象

    观点和主题已经改变(现在是0:02!)=>与上面的任何图片相比,这个新图片不应该被视为重复。

    我到目前为止做的是什么

    #1:摆脱框架

    首先,我使用OpenCV的Canny Detector + Hough算法在图像上查找垂直和水平线条。 然后,我根据算法找到的线裁剪图片。

    问题我一直面对这种解决方案:当原始图片的背景中存在水平或垂直线条时,很难区分哪些线条来自框架,哪些线条来自图片=>手动评论。

    为了避免太多的误报,我还设置了更高的thresold:不幸的是,一些精细的框架(例如带有渐变)会通过。

    有没有更好的算法来检测这些帧?

    #2:找到重复

    到目前为止,我一直在使用pHash和它的DCT图像哈希。 它计算视觉散列,并提供一种在大型数据库中搜索相似图像的非常有效的方法。

    优点 :

  • 速度非常快
  • 您可以搜索成千上万的图像
  • 它适用于我所有的标准(裁剪,调整大小,重新压缩图像,旋转)
  • 缺点:

  • 许多误报
  • 查找已从完全不同的点视图拍摄的图像的重复项
  • 当图像有修改组合时,可能会遗漏一些重复项
  • 所有重复的pHash查找最终都在人工审查中。 除非输入数据是同一主题的数千幅图像,否则这不是问题。 重复检查的次数然后以二次方式增长,这不是很方便。

    关于如何改进重复检测的想法

    我一直在挖掘如何减少pHash的误报数量。 我的第一个想法是将OpenCV的模板匹配添加到我现有的软件链中。 问题:它不适用于旋转的图像。

    然后,我了解了特征检测,并且我认为这可能是要走的路。 但是,这是一个非常广阔的领域,这是我需要帮助的地方。

    我在本PDF的第81页发现了一个有趣的特征探测器比较。 如果我理解正确,我需要“旋转不变”,“尺度不变”,而不是“仿射不变”(这似乎是视点中的变化)。 这将给我以下选择:

  • 哈里斯 - 拉普拉斯
  • 黑森州 - 拉普拉斯
  • 冲浪
  • 这些算法能够满足我的需求吗? 我应该将它们整合到现有的连锁店中,还是应该从新的连锁店开始? 特征检测重复匹配似乎还有很长的路要走,最好的方法是什么?


    你应该采取本地特征匹配方法(SURF / ORB / BRISK ...)你可以在这里找到一个很好的教程:http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html如果效率是非常重要的是,你可以用自定义的find-rigid-transform代码代替OpenCV的findHomography ,但如果它不是一个大问题, findHomography可能会很好地为你服务。

    链接地址: http://www.djcxy.com/p/68755.html

    上一篇: Software chain to find duplicate images

    下一篇: Data structure design and storing