软件链找到重复的图像

时间:2013-12-27 14:17:09

标签: opencv image-processing duplicates computer-vision similarity

我想要实现的目标

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

  • 改变亮度,对比度,着色(图像的修改版本可以是黑白两种)
  • 裁剪
  • 调整大小
  • 旋转
  • 在图像周围添加框架
  • 在框架上书写

一个真实世界的例子:

原始图片 The original image

亮度+亮度变化+调整大小 Modified version #1

种植 Modified version #2

框架+文字 Modified version #3

匹配上面任意一对图像应该会找到重复的图像。 正如您所看到的,修改并非旨在具有破坏性,而是具有改进性。例如,图像的主要主体(这里是闹钟)永远不会在其中间被裁剪。

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

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

A brand new image

观点和主要主题已经改变(现在是0:02!)=>与上述任何图像相比,此新图像不应视为重复图像。

到目前为止我在做什么

#1:摆脱框架

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

问题我一直面对这个解决方案:当原始图片的背景中有水平或垂直线时,很难区分哪些线与帧,哪一条来自图片=>人工审查。

我还设置了一个更高的thresold以避免得到太多的误报:不幸的是,一些精心设计的框架(例如,有一个渐变)经过。

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

#2:找到重复的

到目前为止,我一直在使用pHash and its DCT image hash。它计算可视化哈希值,并提供了一种在大型数据库中搜索类似图像的非常有效的方法。

优点:

  • 非常快
  • 您可以搜索数千张图片
  • 我的所有标准(裁剪,调整大小,重新压缩图像,旋转)都足够好

缺点:

  • 许多误报
  • 查找从完全不同的观点视图中拍摄的图像的重复项
  • 当图片经过多次修改时,可能会遗漏一些重复内容

所有重复的pHash发现也会在人工审核中结束。这不是问题,除非输入数据是同一主题的数千张图像。然后要检查的重复数量呈二次方增长,这不太方便。

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

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

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

我在page 81 of this PDF找到了一个有趣的特征检测器比较。 如果我做对了,我需要“旋转不变”,“缩放不变”而不是“仿射不变”(这似乎是视点的变化)。 这将给我以下选项:

  • 哈里斯 - 拉普拉斯
  • 海森 - 拉普拉斯
  • SURF

这些算法会满足我的需求吗?我应该将它们整合到我现有的链中还是应该重新开始一个新链?重复匹配的特征检测似乎还有很长的路要走,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

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