稳健检测图像中的网格图案

cht*_*mon 9 python image-processing

我用Python编写了一个程序,它自动读取这样的评分表 偏斜后的薄片

目前我正在使用以下基本策略:

  • 使用ImageMagick校正图像
  • 使用PIL读入Python,将图像转换为B&W
  • 计算计算行和列中像素的总和
  • 找到这些总和中的峰值
  • 检查这些峰所暗示的交叉点是否有填充.

运行程序的结果如下图所示: 处理后的图像

您可以在左上方显示的图像下方和右侧看到峰值图.左上图中的线是列的位置,红点表示识别的分数.直方图右下方显示每个圆的填充水平和分类线.

此方法的问题在于需要仔细调整,并且对扫描设置的差异很敏感.是否有一种更健壮的方式来识别网格,这将需要较少的先验信息(目前我正在使用有关多少点的知识),并且对于在纸张上绘制其他形状的人更加健壮?我相信可能有可能使用2D傅立叶变换,但我不确定如何.

我正在使用EPD,因此我可以使用相当多的库.

Pho*_*ton 2

正确的方法是对图像使用连通分量分析,将其分割成“对象”。然后,您可以使用更高级别的算法(例如,组件质心上的霍夫变换)来检测网格,并通过查看其包含的活动像素数量来确定每个单元格是否打开/关闭。