Python:检测和参数化图像矩阵中的简单矩形/高斯条纹图案

Python: Detecting and parametrizing simple rectangular / Gaussian stripe patterns in image matrices

我正在寻找一个很好的解决方案来检测和描述(嘈杂的)矩阵图像中的矩形图案。 举例如下:

图像是单色的,颜色只是表示一个像素的值。

如何检测这些矩形形状并以参数化方式保存它们? 到目前为止,我还没有尝试过任何东西,但我的前进方向是通过检测某些区域内超过阈值的值差异来检测边缘。

我在命令行中使用 ImageMagick 执行此操作,但您可以在 Python 中使用基于 wandwand 执行相同的操作=45=]ImageMagick 或使用 OpenCV 使用模板匹配。

基本上,您要查找的形状是 7x106 像素。所以,我制作了一个完全相同形状的黑条,并要求 ImageMagick 查看图像的灰度副本,以寻找最接近这种实心黑条的最佳位置:

制作黑条:

magick -size 7x106 xc:black png8:bar.png

将图像设为灰度:

magick stripes.png -colorspace gray gstripe.png

在图像中搜索最佳黑条:

magick compare -dissimilarity-threshold 1 -metric RMSE -subimage-search gstripe.png bar.png r.png
24655.4 (0.376218) @ 33,29

这给出了这个输出:

33,29 告诉我栏的左上角。所以,我现在在那里画一个白色矩形来隐藏第一个栏并寻找第二个:

magick gstripe.png -fill white -draw "rectangle 33,29 40,135" gstripe2.png

magick compare -dissimilarity-threshold 1 -metric RMSE -subimage-search gstripe2.png bar.png r.png
30287.3 (0.462155) @ 162,32

这告诉我第二个柱子位于坐标 162,32:


另一种方法是使用 Numpy 计算图像中所有列的平均值,然后寻找暗区:

columnMeans = np.mean(im, axis=0)