python - 图像中网格图案的鲁棒检测

标签 python image-processing

我用 Python 编写了一个程序,可以自动读取像这样的评分表 Sheet after deskewing

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

  • 使用 ImageMagick 对图像进行校正
  • 使用 PIL 读入 Python,将图像转换为黑白
  • 计算行和列中像素的总和
  • 在这些总和中找到峰值
  • 检查这些峰隐含的交叉点以进行填充。

运行程序的结果如下图所示: Image after processing

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

此方法的问题在于它需要仔细调整,并且对扫描设置的差异很敏感。是否有更强大的识别网格的方法,这将需要更少的先验信息(目前我正在使用关于有多少点的知识)并且对人们在纸上绘制其他形状更强大?我相信使用 2D 傅里叶变换可能是可行的,但我不确定如何实现。

我正在使用 EPD,所以我有很多库可供使用。

最佳答案

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

关于python - 图像中网格图案的鲁棒检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579942/

相关文章:

android - 在 Android 操作系统中将 JPEG/PNG 图像转换为 TIFF 图像格式

java - 给定开始和结束矩形时如何创建矩形路径

visual-c++ - 使用 matchTemplate 使用 opencv 查找两个图像之间的变换、旋转和缩放量

python - matplotlib.pyplot theta 网格厚度

python - 如何加速代码?

python - 如何在 Windows 上将 python 请求与 Putty SOCKS 代理一起使用?

java - 使用多个静止图像校正 GoPro 的桶形失真?

python - Tensorflow 中的 tf.expand_dims 和 tf.newaxis 有什么区别?

python - 如果可能,python 会重用列表吗?

C++ 将二进制(P5)图像转换为 ascii(P2)图像(.pgm)