【问题标题】:Segmentation of lines, words and characters from a document's image从文档图像中分割线条、单词和字符
【发布时间】:2017-01-16 06:30:38
【问题描述】:

我正在从事一个项目,我必须从图像中读取文档。在最初阶段,我会阅读机器打印的文件,然后最终转向手写文件的图像。但是我这样做是为了学习目的,所以我不打算使用像 Tesseract 等这样的 api。 我打算分步做:

  1. 预处理(模糊、阈值化、侵蚀和膨胀)

  2. 字符分割

  3. OCR(或后期的 ICR)

所以我现在正在做字符分割,我最近通过水平和垂直直方图做了。对于某些字体,我无法获得非常好的结果,例如所示的图像,我无法获得良好的结果。

还有其他方法或算法可以做到这一点吗? 任何帮助将不胜感激!

编辑 1:

使用 cv2.SimpleBlobDetector 检测 blob 后得到的结果。

使用 cv2.findContours 后得到的结果。

【问题讨论】:

  • 查看THISTHIS 进行字符分割。

标签: python opencv image-processing ocr


【解决方案1】:

第一个选项是通过纠偏,即测量偏斜角度。例如,您可以通过水平方向的高斯滤波或腐蚀来实现这一点,从而使字符变宽并相互接触。然后二值化和细化或找到斑点的下边缘(或直接找到斑点的方向)。您将获得稍微倾斜的线段,从而为您提供倾斜方向。

当您知道偏斜方向后,您可以反向旋转以执行去偏斜。然后垂直直方图将可靠地分隔线,您可以在每条线中使用水平直方图。

第二个选项,IMO 更好,是对字符进行二值化并执行 blob 检测。然后边界框的邻近分析将允许您确定字符链。他们会告诉你线条,以及间距较大的地方,分隔单词。

【讨论】:

  • 非常感谢您的回答。甚至我认为第二种方式更好。但如果我打算过渡到手写识别。第一种方式似乎更好,对吧?
  • @nishant.neo:不一定。手写识别要困难得多。如果线条靠得很近,那将变成一场噩梦。
  • 我使用了 SimpleBlobDetector,但没有得到与您相同的结果,我对图像进行了二值化。当我使用 findContours 时获得了更好的结果。但即使它们也没有你的那么好。
  • @YvesDaoust 嗨,你能发布(第二个)你的例子的代码吗?谢谢
  • @BlueTrack:这是使用专有软件制作的。
猜你喜欢
  • 2011-08-29
  • 2014-12-03
  • 2019-11-04
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多