重复的图像检测算法?

时间:2010-02-08 01:58:55

标签: c algorithm image

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

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

删除了死亡的ImageShack链接

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

5 个答案:

答案 0 :(得分:7)

SURF应该发挥作用。

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

查看tineye.com他们拥有一个始终在不断改善的良好系统。我相信你可以找到关于这个主题的研究论文。

答案 3 :(得分:1)

如何将this python codes转换回C?

答案 4 :(得分:1)

您可能会引用on Wikipedia on feature detection的文章。

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