【问题标题】:Algorithm for straightening tilted document矫正倾斜文档的算法
【发布时间】:2015-06-26 01:31:38
【问题描述】:

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

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

【问题讨论】:

  • 您使用哪种 OCR 引擎?
  • @ipoteka - 没有,我应该训练一个神经网络来识别字符,然后使用该网络来识别文档上的字符。我使用 Encog 来实现反向传播神经网络。

标签: algorithm computer-vision artificial-intelligence ocr document


【解决方案1】:

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

  • 如果 A 的底部高于 B 的顶部,则 A 在 B 之前,反之亦然;

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

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

当歪斜很大而中间行很小时,我不知道没有简单且防弹的解决方案。

【讨论】:

  • 太好了,我今晚也想过这个问题,但不确定这是否是我能做的最好的。好的,我这就去看看明天的结果。
  • 我最好的建议:不要使用傅立叶。
  • 别担心,您的解决方案奏效了。谢谢。倾斜并不那么剧烈。行另一端的字符顶部位于一端字符底部的上方。我所要做的就是更改优先级队列比较器中的 if 条件,现在一切正常:)
【解决方案2】:

我相信 2D Fourier Transform 可以在这里提供帮助:

  1. 以与字符大小相当的半径平滑文档
  2. 执行傅里叶变换
  3. 分析频谱

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

【讨论】:

  • 我希望我能做到,但是我对傅里叶变换的了解非常有限(我想在这个项目的早期使用它进行一些图像预处理并准备学习它,但是后来我找到了一种更简单的方法,所以我放弃了傅立叶变换)。如果 Yves 的解决方案不起作用,也许我会尝试再次快速找到傅立叶变换。谢谢指点。
  • 这是我使用的那个 - betterexplained.com/articles/…
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 2023-03-23
  • 2014-08-09
  • 2019-12-15
  • 1970-01-01
  • 2014-05-21
相关资源
最近更新 更多