使用Python OpenCV进行图像重复模式检测

时间:2017-10-13 03:10:32

标签: image opencv pattern-matching

我正在寻找一种很好的方法来检测图像是否具有相似形状的重复图案,或者只是没有可辨别图案的噪声。通过查看几张图片可以最好地显示出来:

  1. 此处的方法将返回True,理想情况下识别图像中有~35个重复形状(我不认为它必须识别右下角的裁剪形状。
  2. 返回TRUE

    1. 此处的方法将返回FALSE。虽然此图像中有许多不同的形状,但在视觉上很清楚,没有类似形状的重复图案。
    2. 返回FALSE

      一些注意事项:

      • 图像来自衬衫上的图案。重复的形状不是完全相同的大小,并且可能不是完全均匀的间隔。单个图像上可能有10个形状到数千个形状。
      • 我事先并不知道重复自己的形状的大小或特征。我从衬衫中取出这些图像,这样你就可以想象有许多不同类型的重复形状。
      • 我一直在使用scipy.ndimage.measurements.label来识别图像中的所有单个形状。我也使用扩张来组合附近的形状,并可以过滤掉非常小的形状。

      我一直在努力想出一种方法,该方法足够灵活,可以处理我正在处理的众多不同模式,但也足够严格以拒绝噪音。

      感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

不是一个完整的答案,但希望有一些帮助和其他人可以发表评论,现在光谱可用......

通常,FFT频谱应显示重复模式。我不是世界上最好的光谱解释,但这里它们适用于你的两种图像。

我在命令行中使用 ImageMagick 计算:

convert image.jpg -fft +delete -evaluate log 100000 spectrum.png

首先是图案衬衫:

enter image description here

然后是混乱的混乱:

enter image description here

是的,我知道你想要一个 OpenCV 解决方案,而且我使用了一个不同的工具,但我的想法是合作找到一个先工作的方法,然后再用它来重新制定强>的OpenCV

答案 1 :(得分:0)

如果重复模式排列在规则网格上,以便它们通过平移自相似,那么这就是自相关的工作:如果你尝试不同的平移向量,自相关映射将显示一个强匹配的匹配峰值

由于自相关是计算密集型的,您需要求助于DFT(及其快速版本)来计算它。