【问题标题】:Image Repeating Pattern Detection With Python OpenCV使用 Python OpenCV 进行图像重复模式检测
【发布时间】:2023-03-31 09:52:01
【问题描述】:

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

  1. 这里的方法会返回 True,并且理想情况下会识别出图像中有大约 35 个重复的形状(我不希望它一定会识别出右下角的裁剪形状。

返回真

  1. 这里的方法将返回 FALSE。虽然这张图片中有很多不同的形状,但从视觉上可以清楚地看出,没有类似形状的重复图案。

返回 FALSE

几点说明:

  • 图片来自衬衫上的图案。重复的形状并不完全相同,并且可能不完全均匀分布。一张图片上可能有 10 到数千个形状。
  • 我事先不知道重复的形状的大小或特征。我从衬衫中获取这些图像,因此您可以想象有许多不同类型的重复形状。
  • 我一直在使用 scipy.ndimage.measurements.label 来识别图像中的所有单个形状。我还使用膨胀来组合附近的形状,并且可以过滤掉非常小的形状。

我一直在努力想出一种足够灵活的方法来处理我正在处理的大量不同模式,同时又足够严格以拒绝噪音。

感谢任何帮助!

【问题讨论】:

  • fft 可以很好地工作,但它无法识别有多少模式,这也取决于您打算使用它的其他类型的图像。我建议你先试一试。

标签: image opencv pattern-matching


【解决方案1】:

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

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

我用 ImageMagick 在命令行中这样计算:

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

首先是图案衬衫:

然后是一团糟:

是的,我知道你想要一个 OpenCV 解决方案,并且我使用了不同的工具,但想法是合作找到一个首先有效的方法,然后可以在 强>OpenCV

【讨论】:

  • 谢谢。这看起来我们可能会到达某个地方——然后有一种数学方法来区分这些图像吗? Python 中的 Numpy 有一个很好的包来执行 FFT,所以这不是问题。
  • 嗨,@DanKinn 你有没有找到一种方法在数学上区分这两个 FFT 图像?我有一个非常相似的用例,我必须检测模式然后提取它。
  • @SpandanThakur 不幸的是,我没有找到一种数学上合理的区分方法。我使用机器学习,使用图像的其他一些方面作为输入,并且能够很好地对图像进行分类,但并没有我想要的那么好。如果您找到解决方案,我很想知道您的方法。
【解决方案2】:

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

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

【讨论】:

  • 您好——感谢您的意见。我尝试过类似的方法,但由于图像来自衬衫,它们并不总是位于完美的网格中,因为衬衫的位置存在微小的涟漪。也许我的示例图像使图案上的间距看起来比通常更完美。我也可能误解了你的建议,所以如果你的方法解决了这个不完美的网格问题,请告诉我。
  • @DanKinn:你应该提前说明,这使它成为一个更难的问题,尤其是在大变形的情况下。无论如何,自相关方法仍会显示峰值,但会有所侵蚀。然后,您可以尝试计算大小等于假定图案大小的图像窗口与整个图像的相关性。尽管变形,您会在图案重复的地方获得显着的峰值。
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2021-12-25
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多