从文档图像中分割行、单词和字符
Segmentation of lines, words and characters from a document's image
我正在做一个项目,我必须从图像中读取文档。在初始阶段,我会阅读机器打印的文档,然后最终转向手写文档的图像。但是我这样做是为了学习目的,所以我不打算使用 Tesseract 等 api。
我打算按步骤进行:
预处理(模糊、阈值、腐蚀和膨胀)
字符分割
OCR(或后期ICR)
所以我现在正在做字符分割,我最近通过水平和垂直直方图做了。对于某些字体,我无法获得很好的结果,例如显示的图像,我无法获得很好的结果。
有没有其他方法或算法可以做到这一点?
任何帮助将不胜感激!
编辑 1:
我使用 cv2.SimpleBlobDetector 检测斑点后得到的结果。
我使用cv2.findContours后得到的结果。
第一个选项是通过偏移校正,即测量倾斜角度。例如,您可以通过高斯滤波或水平方向的侵蚀来实现这一点,从而使字符变宽并相互接触。然后二值化和细化或找到斑点的下边缘(或直接找到斑点的方向)。你会得到稍微倾斜的线段,它给你倾斜方向。
知道倾斜方向后,可以counter-rotate执行de-sekwing。然后垂直直方图将可靠地分隔线,您可以在每条线中使用水平直方图。
第二种选择,IMO 更好,是将字符二值化并执行斑点检测。然后边界框的邻近分析将允许您确定字符链。他们会告诉你线条,间距大的地方,把字划开。
我正在做一个项目,我必须从图像中读取文档。在初始阶段,我会阅读机器打印的文档,然后最终转向手写文档的图像。但是我这样做是为了学习目的,所以我不打算使用 Tesseract 等 api。 我打算按步骤进行:
预处理(模糊、阈值、腐蚀和膨胀)
字符分割
OCR(或后期ICR)
所以我现在正在做字符分割,我最近通过水平和垂直直方图做了。对于某些字体,我无法获得很好的结果,例如显示的图像,我无法获得很好的结果。
有没有其他方法或算法可以做到这一点? 任何帮助将不胜感激!
编辑 1:
我使用 cv2.SimpleBlobDetector 检测斑点后得到的结果。
我使用cv2.findContours后得到的结果。
第一个选项是通过偏移校正,即测量倾斜角度。例如,您可以通过高斯滤波或水平方向的侵蚀来实现这一点,从而使字符变宽并相互接触。然后二值化和细化或找到斑点的下边缘(或直接找到斑点的方向)。你会得到稍微倾斜的线段,它给你倾斜方向。
知道倾斜方向后,可以counter-rotate执行de-sekwing。然后垂直直方图将可靠地分隔线,您可以在每条线中使用水平直方图。
第二种选择,IMO 更好,是将字符二值化并执行斑点检测。然后边界框的邻近分析将允许您确定字符链。他们会告诉你线条,间距大的地方,把字划开。