我用Python编写了一个程序,它自动读取像这样的评分表
目前我正在使用以下基本策略:
运行程序的结果如下图所示:
您可以在左上方显示的图像下方和右侧看到峰值图。左上图中的线是列的位置,红点表示识别的分数。直方图右下方显示每个圆的填充水平和分类线。
此方法的问题在于需要仔细调整,并且对扫描设置的差异很敏感。是否有一种更健壮的识别网格的方法,这将需要较少的先验信息(目前我正在使用有关多少点的知识),并且对于在纸张上绘制其他形状的人更加健壮?我相信可能有可能使用2D傅里叶变换,但我不确定如何。
我正在使用EPD,因此我可以使用相当多的库。
答案 0 :(得分:2)
执行此操作的正确方法是在图像上使用连接组件分析,将其分割为“对象”。然后,您可以使用更高级别的算法(例如,对组件质心进行霍夫变换)来检测网格,并通过查看其包含的活动像素数量来确定每个单元格是否打开/关闭。
答案 1 :(得分:2)
首先,我发现你的初始方法非常合理,我可能会尝试相同的方式(我特别欣赏行/列投影,然后是直方图,这是一种在实际应用中通常非常有效的低估方法)
但是,由于您希望获得更强大的处理管道,这里的提案可能完全自动化(同时通过ImageMagick删除纠偏):
这个管道可能有点CPU密集型(特别是第2步将进行某种贪婪的搜索),但它应该非常强大且自动化。