【发布时间】:2013-05-16 05:56:13
【问题描述】:
我用 Python 编写了一个程序,它可以自动读取像这样的成绩单
目前我正在使用以下基本策略:
- 使用 ImageMagick 校正图像
- 使用 PIL 读入 Python,将图像转换为黑白
- Calculate 计算行和列中像素的总和
- 在这些总和中找到峰值
- 检查这些峰所暗示的交叉点是否填充。
运行程序的结果如下图所示:
您可以在左上角的图像下方和右侧看到峰值图。左上图中的线条是列的位置,红点表示已识别的分数。右下角的直方图显示了每个圆圈的填充水平,以及分类线。
这种方法的问题在于它需要仔细调整,并且对扫描设置的差异很敏感。是否有一种更稳健的方式来识别网格,这将需要更少的先验信息(目前我正在使用关于有多少点的知识)并且对于人们在图纸上绘制其他形状更稳健?我相信使用 2D 傅里叶变换可能是可能的,但我不确定如何。
我正在使用 EPD,所以我有很多图书馆可供我使用。
【问题讨论】:
-
您可以尝试使用霍夫变换进行圆圈搜索。或者甚至只是将扫描图像与单个圆圈图像进行互相关。峰值会显示所有圆的坐标,微调(中值甚至最小二乘法)会给你精细的网格。