我正在进行一个涉及光学字符识别(OCR)的项目。在检测到每个字符后,我需要将相邻的字符组合起来形成单词。为此,我尝试创建了一个优先级队列,队列中包含检测到的字符信息(形成字符的像素集合以及字符在文档图像上的位置),并优先处理文档顶部的字符,如果两个字符在同一行,则优先处理最左边的字符。然后,我从优先级队列中依次取出字符,希望能从左到右、从上到下获取所有字符,并根据相邻字符之间的空格构建单词。然而,当文档稍微倾斜时,这种方法就失效了,因为有些字符在人眼看来显然在同一行,但实际上它们的像素高度可能相差5到10像素。
有没有自动校正文档的算法?或者检测倾斜角度的算法?或者有相关的库吗?如果没有,有没有解决这个问题的其他方法?这是我的毕业设计项目,我的时间非常有限,请帮帮我。谢谢。
回答:
如果文本行的倾斜度和行间距使得文本行总是可以用水平线分隔开来,那么使用特殊的比较规则进行排序就足够了:
-
如果A的底部高于B的顶部,则A在B之前,反之亦然;
-
否则,如果A中的某个点位于B中的某个点的左侧,则A在B之前,反之亦然。
如果倾斜度过大,你需要隔离出各个文本行。一种方法是找到每个字符的左右邻居,并形成链。链中的字符按横坐标排序。
当倾斜度非常大且行间距非常小时,我不知道有什么简单且万无一失的解决方案。