C 重复图像检测算法?

C 重复图像检测算法?,c,algorithm,image,C,Algorithm,Image,我正在考虑为图像创建一个数据库系统,在该系统中,图像以紧凑的签名存储,然后与一个“查询图像”进行匹配,该图像可以是存储图像的大小调整、裁剪、加亮、旋转或翻转版本。请注意,我不是在谈论图像相似性算法,而是严格地谈论重复检测。这将使事情简单得多。系统不会在意两幅图像上是否有大象,重要的是检测两幅图像是否是同一幅图像 直方图比较对于裁剪的查询图像根本不起作用。我认为唯一可行的方法是形状/边缘检测。首先,图像将以某种方式离散化,例如,每个像素都转换为8级灰度。离散化图像将包含大量相同颜色的区域,这将有助

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

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

拆下固定的影像棚链接


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

看看他们有一个不断改进的好系统。我相信你可以从他们那里找到关于这个问题的研究论文

转换回C怎么样?

您可能会参考的文章


如果您运行的是Intel/AMD处理器,则可以使用Intel Integrated Performance Primitives访问图像处理函数库。除此之外,还有OpenCV项目,这也是为您提供的另一个图像处理函数库。使用库的优点是,您可以尝试各种已经实现的算法,看看哪些算法适合您的情况。

如果您想使用功能检测驱动的模型,您可能需要对图像进行分析(您可能需要对每种颜色进行SVD)并使用U和V矩阵的前几列以及相应的奇异值来判断图像的相似程度


与SVD方法非常相似的是一种称为SVD的方法,我认为这种方法更易于在图像之间进行比较。PCA方法非常接近于仅采用奇异值分解并通过将奇异值分解到U和V矩阵中来去除奇异值。如果您遵循PCA路径,您可能还希望查看。顺便说一句,PCA方法是在中用于提取特征的常用方法。

SURF应该完成它的工作

它是一种快速而稳健的方法,在旋转和缩放以及模糊和对比度/闪电(但不是那么强烈)时保持不变。
有一个自动全景拼接的例子

首先检查筛选的文章

我更喜欢在这里阅读和总结不同的观点。我以前见过Tineye。尝试不同的处理功能不是重点。我很感兴趣,如果你有一个特别的想法,甚至是一个非常稀疏的想法来完成任务。你能从目标和查询图像中提取频率成分,并进行“某种比较”吗?是的,这是非常稀疏的,已经有一段时间了。这样做需要大量计算;-)您引用的代码基于直方图获取。如果查询图像不可能被裁剪,它就可以正常工作。裁剪后的子图像将产生与整个图像完全不同的直方图,因此在这种情况下不适用。我试图澄清,查询图像将是原始图像的变体,而不是精确的副本。我必须调查SVD。是的,我编辑了我的解决方案。我拿出了校验和信息,把更多的信息放在SVD上。你说你说的不是相似性算法,而是重复检测。然而,如果你也在谈论允许更改,特别是裁剪,你不可避免地要对“相似性”的程度做出判断。毫无疑问,在进行比较时会有可接受的阈值。问题是,即使是经过裁剪和调整大小的查询图像也仍然包含相同形状/感兴趣区域的子集,它们的位置相对相同,但用不同数量的像素表示。