矫正倾斜文件的算法

Algorithm for straightening tilted document

我正在进行一个涉及 OCR 的项目。检测到每个字符后,我需要组合相近的字符来创建单词。为此,我尝试创建一个优先级队列,其中包含有关检测到的字符的信息(构成字符的像素集和字符在文档图像上的位置),并为文档顶部的字符提供更高的优先级,并为文档顶部的字符提供更高的优先级如果两个字符在同一行,则到最左边的字符。然后一个接一个轮询优先级队列中的字符,希望它能给我从左到右从上到下的所有字符,并根据每两个后续字符之间的 space 构建单词。当文档稍微倾斜时实际上失败了,因为一些对于人眼来说明显在同一条线上的字符不一定在相同的像素高度(5~10px 阈值)。

有自动拉直文档的算法吗?或检测倾斜角度?或者任何图书馆?或者,如果没有,是否有办法解决此问题?这是我最后一年的项目,我没有多少时间来解决这个问题。请帮忙。谢谢。

我相信 2D 傅里叶变换在这方面可以提供帮助:

  1. 平滑文档,半径与字符大小相当
  2. 执行傅立叶变换
  3. 分析光谱

我希望强分量对应垂直方向,弱分量对应水平方向。还知道线距离可以限制分析区域并提高准确性。

如果倾斜和行间距使得文本行始终可以被水平线分隔,则使用特殊比较规则进行排序就足够了:

  • 如果A底在B顶之上,则A先于B,反之;

  • 否则如果A中的某个点在B中的某个点的左侧,则A在B之前,反之亦然。

如果偏差太大,您将需要隔离各个线。一种方法是找到每个字符的近 left/right 邻居,并形成链。链中的字符按横坐标排序。

当偏斜非常大且行间很小时,我知道没有简单和可靠的解决方案。