重复的图像检测算法?

我正在考虑为图像创建一个数据库系统,用紧凑的签名存储这些图像,然后与“查询图像”进行匹配,“查询图像”可以是存储图像的resize,裁剪,增亮,旋转或翻转版本。 请注意,我不是在谈论图像相似度算法,而是严格来说是重复检测。 这会使事情变得简单得多。 系统不关心两个图像是否有大象,只检测这两个图像是否实际上是同一图像。

直方图比较根本不适用于裁剪的查询图像。 我看到唯一可行的方法是形状/边缘检测。 首先,图像将以某种方式离散化,例如,每个像素被转换为8级灰度。 离散化的图像将包含相同颜色的大区域,这有助于指示形状。 然后可以用系数描述这些形状,并且可以记住它们的相对位置。 紧凑的签名将由此产生。 当必须进行比较时,将对存储的每个图像以及每个查询图像执行该处理。 这听起来像一个有效和可实现的算法? 为了说明这个想法:

删除了死的ImageShack链接

我知道这是一个不成熟的研究领域,我已经阅读了关于这个主题的维基百科,我会请你提出你对这种算法的想法。

SURF应该做好自己的工作。

http://en.wikipedia.org/wiki/SURF

它快速稳健,在旋转和缩放以及blure和对比度/闪电方面都是不变的(但不是那么强烈)。
有自动全景拼接的例子。

首先查看SIFT上的文章
http://en.wikipedia.org/wiki/Scale-invariant_feature_transform

如果你想做一个特征检测驱动模型,你可以采用图像的奇异值分解 (你可能不得不为每种颜色做一个SVD)并使用U和V矩阵的前几列以及相应的奇异值来判断图像的相似程度。

与SVD方法非常相似的是一种称为主成分分析 ,我认为它可以更容易用于比较图像。 PCA方法非常接近于仅采用SVD并通过将它们分解为U和V矩阵来消除奇异值。 如果您遵循PCA路径,您可能还需要查看对应分析 。 顺便说一下,PCA方法是Netflix奖中用于提取特征的常用方法。

如何将这个python代码转换回C?

查看tineye.com他们有一个很好的系统,一直在改进。 我相信你可以找到关于这个主题的研究论文。

您可能在维基百科上提到的有关特征检测的文章 。

如果您在Intel / AMD处理器上运行,则可以使用Intel Integrated Performance Primitives访问图像处理function库。 除此之外,还有OpenCV项目,还有另一个图像处理函数库。 使用库的优点是,您可以尝试已经实现的各种算法,以查看适用于您的情况的内容。