algorithm - 将重复出现的图像识别为更大的图像

标签 algorithm matlab opencv image-processing computer-vision

编辑:这不是 Determine if an image exists within a larger image, and if so, find it, using Python 的副本因为我事先不知道模式

假设我有一个大图像(通常是用相机拍摄的照片,所以它可能有点嘈杂,但我们假设现在不是)由多个彼此相等的小图像组成,比如

enter image description here

我需要找到每一个的轮廓。第一步是识别二维图像中的重复图像(或未知模式)。我怎样才能迈出这第一步?

我确实读到过我可以使用原始图像的 FFT 并搜索重复频率,这是一种可行的方法吗?

在这个问题上做一点:我事先不知道图像,也不知道它的大小或大图像上会有多少。图像可以从相机拍摄,因此它们可能会有噪音。图片不会重叠。

最佳答案

您可以尝试使用描述的关键点(Sift/SURF/ORB/等)来查找图像中的特征,并尝试检测图像中的相同特征。 你可以在How to find euclidean distance between keypoints of a single image in opencv中看到这样的结果其中存在 3 倍相同的图像,并自动检测特征并在这些子图像之间链接。

在你的图像中,结果看起来像

enter image description here

因此您可以看到确实自动检测并链接了同一模式的不同出现。

接下来的步骤是将特征分组到对象,以便提取“整个”模式。一旦有了模式的候选者,就可以为模式的每次出现提取单应性(具有一个引用候选模式)以验证它是一个模式。一个悬而未决的问题是如何找到这样的候选人。也许值得尝试找到“平行特征”,因此具有平行线和/或相同长度线的关键点匹配(见图)。或者可能有一些图论方法。

总而言之,整个方法将有一些优点和缺点:

优点:

  • 现实世界的适用性 - 即使有噪音和一些透视效果,Sift 和其他关键点也能很好地工作,因此找到此类模式的机会增加了。

缺点

  • parametric(定义两个特征成功的含义 匹配)
  • 不适合所有类型的模式——你的模式必须有一些可提取的关键点

这些是一些想法,可能并不完整;)

很遗憾,您的具体任务还没有完整的代码,但我希望思路清晰。

关于algorithm - 将重复出现的图像识别为更大的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34310914/

相关文章:

ruby - Ruby 中用于 "String#include?"的算法

matlab - 我应该如何在 Matlab 中实现混淆矩阵?

Matlab恒等移位矩阵

c++ - 带有 Visual Studio 2015 Enterprise 的 OpenCV

c - 在 OpenCV 中显示来自网络摄像头的视频

java - Kruskal 算法 - 按升序对邻接矩阵进行排序

algorithm - 寻找多个平面的平均相交线

java - 在给定的 char 数组中具有所有可能组合/排列的暴力破解算法

matlab - 图像无法正确显示

android - 获取(行,列,双[])Opencv Android