相关疑难解决方法(0)

了解OCR的Freeman链码

请注意,我真的在寻找我的问题的答案.我不是在寻找一些源代码或一些学术论文的链接:我已经使用了源代码,我已经阅读了论文,但仍然没有弄清楚这个问题的最后部分......

我正在研究一些快速屏幕字体OCRing,我正在取得很好的进展.

我已经找到了基线,将角色分开,将每个角色转换为黑白,然后对每个角色进行轮廓处理,以便将Freeman链码应用于它.

基本上它是一个8连接的链码,看起来像这样:

  3  2  1
   \ | /
  4-- --0
   / | \
  5  6  7
Run Code Online (Sandbox Code Playgroud)

所以,如果我有一个'a',经过我所有的转换(包括转换为黑白),我最终会得到这样的结果:

11110
00001
01111
10001
10001
01110
Run Code Online (Sandbox Code Playgroud)

然后它的外部计数可能看起来像这样(我可能在这里犯了一个错误,这是ASCII艺术轮廓,我的'算法'可能会使轮廓错误,但这不是我的问题点):

 XXXX
X1111X
 XXXX1X
X01111X
X10001X
X10001X
 X111X
  XXX
Run Code Online (Sandbox Code Playgroud)

在Xs之后,我得到了链码,它将是:

0011222334445656677

请注意,这是规范化的链代码,但您始终可以将链式代码规范化,如下所示:您只需保留最小的整数.

(顺便说一句,有一个超级高效的实现来找到链代码,你只需要取一个'X'的8个相邻像素,然后查看256查找表,如果你有0,1,2,3,4, 5,6或7)

不过,我现在的问题是:从那个0011222334445656677链码开始,我怎么发现我有'a'?

因为,例如,如果我的'a'看起来像这样:

11110
00001
01111
10001
10001
01111  <-- This pixel is now full
Run Code Online (Sandbox Code Playgroud)

然后我的链码现在是:0002222334445656677

然而,这也是一个'a'.

我知道这些链代码的重点是能够适应这些微小的变化,但我无法弄清楚我应该如何找到哪个字符对应于一个链代码.

我已经走得那么远了,现在我被卡住了......

(顺便说一下,我不需要100%的效率,将"0"与"O"或"o"区分开来的事情并不是真正的问题)

algorithm ocr

28
推荐指数
1
解决办法
1万
查看次数

标签 统计

algorithm ×1

ocr ×1