首页> 中国专利> 印刷体阿拉伯字符集文本切分方法

印刷体阿拉伯字符集文本切分方法

摘要

印刷体阿拉伯字符集文本切分方法属于光学字符识别中的字符切分领域。本发明特征在于:在字符块分类的基础上,选择部分字符块水平投影分割文本图像成子区域,然后检测多行子区域归并字符块实现多行子区域的文字行切分;随后估计文字行的基线和顶线位置,并把文字行切分成联体字符段;最后根据字符切点的特点寻找在基线上、基线上方及基线下方的切点,并且利用结构规则删除过切分点。本发明在多字体多字号印刷体阿拉伯文本测试集上的字符切分正确率达到99%以上。

著录项

  • 公开/公告号CN1741035A

    专利类型发明专利

  • 公开/公告日2006-03-01

    原文格式PDF

  • 申请/专利权人 清华大学;

    申请/专利号CN200510086478.1

  • 申请日2005-09-23

  • 分类号G06K9/00(20060101);

  • 代理机构

  • 代理人

  • 地址 100084 北京市100084-82信箱

  • 入库时间 2023-12-17 17:03:48

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-09-10

    未缴年费专利权终止 IPC(主分类):G06K9/00 授权公告日:20070815 终止日期:20180923 申请日:20050923

    专利权的终止

  • 2007-08-15

    授权

    授权

  • 2006-04-26

    实质审查的生效

    实质审查的生效

  • 2006-03-01

    公开

    公开

说明书

技术领域

印刷体阿拉伯字符集文本切分方法属于光学字符识别(OCR)中的字符切分领域。

背景技术

阿拉伯语是联合国工作语言之一,在埃及、阿尔及利亚、摩洛哥、沙特阿拉伯等国家广泛使用。维吾尔、哈萨克、柯尔克孜语是我国重要的少数民族语言,虽然和阿拉伯语不属于同一语系,但是都借用阿拉伯字符书写,只是字符集稍有不同。在本发明中,阿拉伯、维吾尔、哈萨克等使用阿拉伯字符集书写的文本统称为阿拉伯字符集文本,并简记为阿文文本。无论是国内还是国际,识别阿文文本都有迫切的现实需求和广泛的应用前景。

阿文文本中,阿文字符从右向左书写,其他语言的文字(例如汉字、英文、数字)从左向右书写。标准阿拉伯文有28个基本字符,维吾尔文有32个基本字符。每个阿文字符有1-4种书写形式:尾部与下一字符连接的首写形式;首尾与相邻字符连接的中间形式;首部与上一字符连接的尾写形式;首尾与相邻字符都不相连的独立形式。每个阿文字符由一个主体部分和若干个与主体部分不连接的附加部分组成,附加部分的位置可以在主体部分的上方、下方或者中间,标准阿拉伯文字符的附加部分是1-3个点以及维吾尔文的附加部分还包括等。许多字符的主体部分相同,仅是与主体部分不连通的附加部分的数目或形状不同。无论是手写还是印刷体阿文文本,能够连接的字符总是连接书写或者印刷,字符连接的部分叫做基线。一个单词由一个或多个不相连的联体字符段组成。图1是标准阿拉伯文的基本字符表,图2反映了阿文文本的部分特征。

一般的印刷体阿文文本识别系统如图3所示:预处理部分增强输入的文本图像;文字行切分部分把多行文本区域切分成文字行;联体字符段切分部分把文字行分割成互不相连的联体字符段;切割部分把联体字符段分解成字符或笔画等基本部件;识别部分提取有效特征,利用分类器识别切割出来的部件;后处理部分利用词典、语言模型等手段,修正识别错误,提高文本识别率。

根据切割和识别之间的关系,系统可分为先切割后识别,边切割边识别和不切割整体识别三类:

第一,先切割后识别(图3中路径(1)和路径(2)无效)。该类系统首先把联体字符段切割成字符或者笔画,然后识别切割得到的部件,并组合这些部件为字符识别结果。该类方法不受词典大小的限制,可以识别任意字符串的组合,能够处理大(无限)词汇情况。

第二,边切割边识别(图3中路径(1)有效无效均可,路径(2)有效)。该类系统在识别之前不必须进行字符切割(路径1无效时,则预先进行切割),而是借助识别结果获得字符切分结果。字符边界是识别结果的伴随产物。该类方法依赖于字体,计算量大,对形变敏感。如果中间某个字符识别错误,或者一个字符是另外字符的一部分,其后的字符识别结果都会受到影响。

第三,不切割整体识别(图3中路径(1)有效,路径(2)无效)。该类系统不需要识别出每个字符,而是直接识别整个联体字符段,从而避免了切割。该类方法从语音识别发展过来,只能处理小(有限)词汇情况。

因为一般的印刷体阿文文本,具有词汇量大,使用字体多,但是排版比较规范的特点,所以先切割后识别的方法是最合适的。因此,设计印刷体阿文文本切分算法是实现印刷体阿文文本识别系统的关键。目前,印刷体阿文文本识别的研究远远落后于其它广泛使用的文字(如拉丁字母、汉字、日文等)的原因,主要就在于没能很好解决印刷体阿文文本切分的问题。例如:水平投影切分文字行的方法不能处理倾斜文本或者文字行之间存在粘连字符的情况;大量的字符附加部分会模糊文字行之间的界限,或者产生伪文字行;竖直投影切分联体字符段的方法不能处理相邻联体字符段水平重叠的情况;一般的字符切分方法只是在基线上寻找字符切点,但是实际上部分字符可能在基线上方或者下方粘连。

发明目的

本发明的目的就是要提供一种可靠的多字体多字号印刷体阿文文本切分的方法。如图4所示:本发明在字符块分类的基础上,切分文本图像为文字行,然后估计文字行的基线和头线位置,切分文字行成联体字符段,最后根据字符切点位置的特点寻找所有的候选切点。根据本发明实现的印刷体阿文文本切分方法,已经应用于一个印刷体阿文文本识别系统。

技术方案

本发明的特征在于通过如下措施把输入的印刷体阿文文本图像正确切分成单个的字符图像。

1文字行切分

文字行切分的目的是把文本区域切分成连续的文字行。水平投影是最直接的行切分方法,但是不能处理倾斜文本。此外,由于阿文文本中存在大量与字符主体部分不相连的字符附加部分,所以水平投影得到的空白间隙既可能是文字行间的空白,也可能是文字行内字符附加部分和主体部分之间的空白。部分投影和部分轮廓跟踪相结合的方法能够处理倾斜方向不变的文本,但是不能处理行间字符粘连的情况。

为了解决上述问题,本发明提出了如下文字行切分方法(图5):在字符块分类的基础上,选择部分字符块水平投影,把输入文本图像分割成子区域;然后检测多行子区域,归并字符块实现多行子区域的文字行切分;最后切割行间粘连的字符块,并根据距离信息把小字符块归入所属文字行。该文字行切分方法不仅能够处理无倾斜的文本,还能够处理倾斜、行间字符存在粘连的文本。

1.1字符块分类

令I表示输入的文本图像,H是I的高度,W是I的宽度。I上的字符块C表示为

>>C>=> >>>C>>(>0,0>)>>>>C>>(>0,1>)>>>>L>>>C>>(>0>,>w>->1>)>>>>>>C>>(>1,0>)>>>>C>>(>1,1>)>>>>L>>>>(>1>,>w>->1>)>>>>>>M>>>M>>>L>>>M>>>>>C>>(>h>->1,0>)>>>>C>>(>h>->1,1>)>>>>L>>>C>>(>h>->1>,>w>->1>)>>>>>>>[>l>,>t>,>r>,>b>]>>>.>>

其中C(y,x)=1表示黑像素,C(y,x)=0表示白像素,l、t、r、b、w和h分别表示C的左边界、上边界、右边界、下边界、宽度和高度(图6)。I上所有的字符块BLOCK={CnB|nB=1,2,...,nBlock}。在本发明中,使用附加了各种上下标的C表示特定的字符块(例如CnB,C(line)等),附加了同样上下标的l、t、r、b、w和h分别表示该字符块的左边界、上边界、右边界、下边界、宽度和高度(例如hnB,r(line)等)。

根据高度和宽度信息,可以把所有的字符块分成三类:MIDDLE类是一般的阿文联体字符段,高度比较固定;BIG类包括行间粘连的字符,高度最高;SMALL类包括较小的孤立字符、字符附加部分以及标点等,高度矮,宽度也短。

本发明由下式确定CnB的类别,

其中

>ver>>h>‾>>=>>1>nBlock>over>>Σ>>nB>=>1>>nBlock>>>h>nB>>,>>

是所有字符块的平均高度。

1.2子区域切分

为了去除字符附加部分以及行间粘连字符的影响,只保留MIDDLE类字符块进行水平投影。则水平投影值为0的位置把文本区域分割成多个子区域。每个子区域包含一条或多条文字行。

1.3多行子区域检测

如图7所示,多行子区域一定存在多组水平重叠、竖直不重叠的联体字符段,而单行子区域不存在满足条件的联体字符段组。

因此,在每个子区域内找到所有水平重叠、竖直不重叠的MIDDLE类字符块组

CC={(CI,DJ)|XOL(CI,CJ)>0,YOL(CI,CJ)=0,CI∈MIDDLE,CJ∈MIDDLE}。

其中,

           XOL(CI,CJ)=max(min(rI,rJ)-max(lI,lJ),0),

表示CI和CJ在水平方向上的重叠长度,

           YOL(CI,CJ)=max(min(bI,bJ)-max(tI,tJ),0),

表示CI和CJ在竖直方向上的重叠长度。如果‖CC‖>10,就可以判定该子区域是多行子区域。

1.4多行子区域切分

因为阿文文本从右向左书写,所以按照右边界降序排列多行子区域内部所有的MIDDLE类字符块。按顺序每次取出一个字符块,第n次取出的字符块表示为Cn。Cn和已经取出的所有字符块C1,C2,...,Cn-1比较,找到竖直方向上重叠最多的字符块CY,即

>>>C>Y>>=>>>arg>max>>>C>i>>>>(>YOL>>(>>C>n>>>>,>C>>i>>)>>)>>,>i>=>1,2>,>.>.>.>,>n>->1>.>>

若Cn和CY竖直重叠部分足够大,即

                   YOL(Cn,CY)>h/2,

Cn和CY就属于同一文字行,否则Cn属于新文字行。取出所有字符块后,就得到了多行子区域的文字行切分结果。

1.5切分BIG类字符块

因为BIG类字符块是行间粘连的字符块,所以需要在跨越文字行处进行切分。如果字符块CB∈BIG跨越了多条文字行,那么在跨越的每条文字行内,在CB附近一定都存在字符块和CB竖直重叠。

因此,本发明采用下面的办法切分BIG类字符块:

对于每个字符块CB∈BIG,在文字行L(nL)内寻找字符块C(nL)(nL=1,2,..,nLine),即

>>>C>>(>nL>)>>>=>>>arg>min>sup>>C>NB>>(>nL>)>sup>>>>(>|>>>>l>B>>+>>r>B>>>2>>->>sup>>l>NB>>(>nL>)>sup>sup>>>+>r>>NB>>(>nL>)>sup>>>2>>|>)>>,sup>>C>NB>>(>nL>)>sup>>∈>N>>B>>(>nL>)>>>.>>

其中

>>N>>B>>(>nL>)>>>=>{sup>>C>NB>>(>nL>)>sup>>|sup>>C>NB>>(>nL>)>sup>>∈>>L>>(>nL>)>>>,sup>>C>NB>>(>nL>)>sup>>∈>MIDDLE>,>>

>>HDIS>>(sup>>C>NB>>(>nL>)>sup>>,>>C>B>>)>><ver>>h>‾>>×>5>,>YOL>>(sup>>C>NB>>(>nL>)>sup>>,>>C>B>>)>>>ver>>h>‾>>/>3>}>,>>

表示第nL条文字行内,在CB附近和CB竖直重叠的所有MIDDLE类字符块,

>>HDIS>>(sup>>C>NB>>(>nL>)>sup>>,>>C>B>>)>>=>max>>(>max>>(sup>>l>NB>>(>nL>)>sup>>,>>l>B>>)>>->min>>(sup>>r>NB>>(>nL>)>sup>>,>>r>B>>)>>,>0>)>>,>>

表示CNB(nL)和CB之间的水平距离。这样C(nL)就是在NB(nL)中和CB水平距离最近的字符块。

若C(m)和C(m+1)存在,就说明CB跨越了第m条和m+1条文字行,需要在

>>y>=>>>>b>>(>m>)>>>>>+>t>>>(>m>+>1>)>>>>2>>>

也就是跨越文字行的地方切分CB

在所有跨越文字行处切分CB,标记每个部分为MIDDLE类,然后分配到相应的文字行。

1.6插入SMALL类字符块

对于每个字符块CS∈SMALL,计算CS和每条文字行的距离,并把其分配到距离最近的文字行。计算CS和文字行L(nL)的距离的方法如下:

首先,在L(nL)内CS的左侧寻找水平距离CS最近的MIDDLE类字符块Cl,即

>>>C>l>>=>>>arg>min>sup>>C>LB>>(>nL>)>sup>>>>(>>l>S>>-sup>>l>LB>>(>nL>)>sup>>)>>,sup>>C>LB>>(>nL>)>sup>>∈>L>>B>>(>nL>)>>>,>>

其中

>>L>>B>>(>nL>)>>>=>{sup>>C>LB>>(>nL>)>sup>>|sup>>C>LB>>(>nL>)>sup>>∈>>L>>(>nL>)>>>,sup>>C>LB>>(>nL>)>sup>>∈>MIDDLE>,>>l>S>>>sup>>l>LB>>(>nL>)>sup>>}>.>>

然后,在L(nL)内CS的右侧寻找水平距离CS最近的MIDDLE类字符块Cr,即

>>>C>r>>=>>>arg>min>sup>>C>RB>>(>nL>)>sup>>>>(sup>>r>RB>>(>nL>)>sup>>->>r>S>>)>>,sup>>C>RB>>(>nL>)>sup>>∈>R>>B>>(>nL>)>>>,>>

其中

>>R>>B>>(>nL>)>>>=>{sup>>C>RB>>(>nL>)>sup>>|sup>>C>RB>>(>nL>)>sup>>∈>>L>>(>nL>)>>>,sup>>C>RB>>(>nL>)>sup>>∈>MIDDLE>,>>r>S>>>sup>>r>RB>>(>nL>)>sup>>}>.>>

那么,CS和文字行L(nL)的距离为

2基线和头线估计

因为阿文字符在基线上连接,所以文字行基线定位对于字符切分非常关键。当前处理的文字行图像用L表示,HL是L的高度,WL是L的宽度。

2.1基线高度估计

从图2可以看出,文字行L中连接字符的基线的高度是相同的。因此,L中出现频率最高的竖直黑像素游程的长度就是基线的高度。

本发明用三元组(y(s),y(e),x(se))表示竖直黑像素游程,其中y(s)是游程的竖直起始位置,y(e)是游程的竖直终止位置,x(se)是游程的水平位置。>>VRUN>=>{>>(sup>>y>nR>>(>s>)>sup>>,sup>>y>nR>>(>e>)>sup>>,sup>>x>nR>>(>se>)>sup>>)>>|>nR>=>1,2>,>.>.>.>,>nRun>}>>是L中的所有竖直黑像素游程。

则L中高度为runH的竖直黑像素游程的数目为

>>VH>>(>runH>)>>=>|>|>{sup>>y>nR>>(>s>)>sup>>,sup>>y>nR>>(>e>)>sup>>,sup>>x>nR>>(>se>)>sup>>|>>(sup>>y>nR>>(>s>)>sup>>,sup>>y>nR>>(>e>)>sup>>,sup>>x>nR>>(>se>)>sup>>)>>∈>VRUN>,sup>>y>nR>>(>e>)>sup>>-sup>>y>nR>>(>s>)>sup>>=>runH>}>|>|>,>>

                    runH=1,2,...,HL

由此可得基线的高度为

>>>H>0>>=>>>arg>max>>runH>>>(>VH>>(>runH>)>>)>>,>runH>=>1,2>,>.>.>.>,>>H>L>>.>>

2.2基线位置估计

理想情况下,文字行内所有联体字符段的基线都在同一水平直线上。但是实际的扫描文本图像中,文字行通常存在小角度的倾斜或者弯曲形变,导致不同联体字符段的基线位置不一定相同。为了解决上述问题,本发明把较长的文字行分成多个较短部分分别估计基线位置,这样就可以认为每个部分内的基线位置是相同的。

把文字行L分成

个部分,每个部分的长度为α×H0。令HP(nP)(y)(y=0,1,...,HL-1)是L只保留第nP部分图像的水平投影结果,那么第nP部分的基线位置为,

>sup>>B>Top>>(>nP>)>sup>>=>>>arg>max>>y>>>(over>>Σ>>k>=>0>>>>H>0>>->1>>>>HP>>(>nP>)>>>>(>y>+>k>)>>)>>,>y>=>0,1>,>.>.>.>,>>H>L>>->>H>0>>,>>

>sup>>B>Btm>>(>nP>)>sup>>=sup>>B>Top>>(>nP>)>sup>>+>>H>0>>->1>,>>

其中BTop(nP)和BBtm(nP)分别表示基线的上边界和下边界。在实际系统中,α可以在10~15之间取值。这样就可以得到L任意处的基线位置,

> >>>>B>Top>>>(>x>)>>=sup>>B>Top>>(>nP>)>sup>>>>>l>>(>nP>)>>>x>>r>>(>nP>)>>>>>>>>B>Btm>>>(>x>)>>=sup>>B>Btm>>(>nP>)>sup>>>>>l>>(>nP>)>>>x>>r>>(>nP>)>>>>>>,>>

其中l(nP)和r(nP)分别是第nP部分的左、右边界。

2.3头线位置估计

如图2所示,去除附加部分后,阿文字符的顶端和基线上边界的距离可以明显分成两类:一类为高字符顶端和基线上边界的距离;一类为低字符顶端和基线上边界的距离。头线位置指的是低字符顶端的位置。

令UL(x)(x=0,1,...,WL-1)是文字行L去除附加部分后的上轮廓,则

        EL={x|UL(x)<UL(x-1),UL(x)<UL(x+1),1≤x<WL-1},

是UL(x)极小点的集合。

本发明利用两次求距离均值的方法,区分高字符顶端和低字符顶端到基线上边界的距离。

定义

>>BU>>(>x>)>>=> >>>>B>Top>>>(>x>)>>->>U>L>>>(>x>)>>>>x>>>∈>E>>L>>>>>>0>>>x>∉>>E>L>>>>>>,>>

则可得>>>h>′>>=>>1>>|>|>>E>L>>|>|>>>>Σ>>{>x>|>x>∈>>E>L>>}>>>BU>>(>x>)>>.>>再令E′={x|BU(x)<h′,x∈EL},可得>>>H>1>>=>>1>>|>|>>E>′>>|>|>>>>Σ>>{>x>|>x>∈>>E>′>>}>>>BU>>(>x>)>>.>>

H1就是头线和基线上边界之间的距离。

3联体字符段切分

得到文字行后,需要把文字行切分成联体字符段。每个联体字符段由一个主体部分和若干附加部分组成。竖直投影的方法不能处理相邻联体字符段在水平方向重叠的情况,因此本发明根据基线位置和字符块类别标记联体字符段的主体部分,然后根据距离信息归并联体字符段的主体部分和附加部分。

本发明面认定下面两种类型的字符块是联体字符段的主体部分:被基线穿过的MIDDLE类字符块;被基线穿过并且在水平方向上不和其他字符块重叠的SMALL类字符块。部分SMALL类字符块之所以被认为是联体字符段主体部分,是因为这些字符块可能是标点或者孤立字符。剩余的SMALL类字符块则属于联体字符段的附加部分。

对每个属于联体字符段附加部分的SMALL类字符块CS搜索最近的属于联体字符段主体部分的字符块CM,则CS和CM是同一个联体字符段的附加部分和主体部分。CS和CM的距离定义为

            DIS(CS,CM)=|lS+rS-lM-rM|。

4字符切分

字符切割是把联体字符段切分成单个字符的过程。当前处理的联体字符段图像用P表示,HP是P的高度,WP是P的宽度。本发明把字符切点分成在基线上的切点,在基线上方的切点及在基线下方的切点三类。依图8所示,本发明依次搜索每类所有可能的切点位置,然后检查切点的合法性,最后把附加部分分配给相应的字符主体部分。

4.1在基线上的候选切点

如图9所示,在基线上的切点处满足如下情形之一:

(A)游程数目改变。字符左边界,竖直游程数目从1增加到2以上;字符右边界,竖直游程数目从2以上减少为1。

(B)游程数目不变,但长度发生较大变化。字符左边界,上轮廓和/或下轮廓的位置远离基线区域;字符右边界,上轮廓和/或下轮廓的位置回归基线区域。

(C)游程数目不变,上轮廓位置逐渐变化,导致上轮廓位置累积发生较大变化。字符左边界,上轮廓位置逐渐远离基线区域;字符右边界,上轮廓位置逐渐回归基线区域。

定义函数D(x)描述P的上、下轮廓和基线之间的距离,

D(x)=max(BTop(x)-UP(x),0)+max(VP(x)-BBtm(x),0),x=0,1,...,WP-1,

其中UP(x)和VP(x)分别是P去除附加部分后的上轮廓和下轮廓。

这样,在基线上的候选切点xO满足下述条件(1)和(2)或者条件(1)和(3),条件(1)(2)(3)各式中的“+”运算和“-”运算分别对应字符的左侧切点和右侧切点:

(1)切点xO在基线上:

                          D(xO)≤2;

(2)切点情形(A)或(B):

                          D(xO±1)-D(xO)>1.5×H0

(3)切点情形(C):

>> >>>D>>(>>x>O>>±>i>)>>->D>>(>>x>O>>)>>>>0.75>×>>H>0>>>>i>=>e>>>>>D>>(>>x>O>>±>i>)>>≥>D>>(>>x>O>>±>iml>)>>>>i>=>1,2>,>K>,>e>>>>>,>>

其中e满足xO±e∈EP,EP是RP(x)极小点的集合;

4.2基线上方的候选切点

如图10所示,如果位置xT是基线上方的候选切点,那么xT必须满足如下条件:

(1)切点本身是上轮廓的极低点:

            UP(xT)>UP(xT-1),UP(xT)>UP(xT+1);

(2)上轮廓在切点位置处于头线上方:

            UP(xT)<BTop(xT)-H1

(3)切点左侧下轮廓的最低点在基线的下方:

>>>max>>x>>><>x>>T>>>>>(>>V>P>>>(>x>)>>)>>>>>B>Btm>>>(>>x>T>>)>>;>>

(4)切点右侧下轮廓的最低点在基线的下方:

>>>max>>>x>T>><>x><>>w>P>>->1>>>>(>>V>P>>>(>x>)>>)>>>>>B>Btm>>>(>>x>T>>)>>.>>

4.3基线下方的候选切点

如图11所示,如果位置xB是基线下方的候选切点,那么xB必须满足如下条件:

(1)切点左侧3列上轮廓的最高点TL在基线的上方:

>>>(>TL>=>>min>>>x>B>>->3><>x>>><>x>>B>>>>>(>>V>P>>>(>x>)>>)>>)>><>>B>Top>>>(>>x>B>>)>>;>>

(2)切点本身及右侧3列上轮廓的最高点TR在基线的下方:

>>>(>TR>=>>min>>>x>B>>≤>k>>><>x>>B>>+>3>>>>(>>V>P>>>(>x>)>>)>>)>><>>B>Btm>>>(>>x>B>>)>>;>>

(3)TL和TR高度差大于两倍基线高度:

                          TR-TL>2×H0

4.4检查切点的合法性

从右到左依次检查每个切点的合法性,并删除不合法切点。如果相邻两个切点之间的距离小于基线的高度而且两个切点之间的字符高度小于2倍基线高度,那么左侧的切点就是一个不合法的切点。具体方法如下:设xr和xl是两个相邻的切点,其中xr>xl,若

>> >>>>x>r>>->>x>l>>≤>>>H>0>>2>>>>>>>max>>>x>l>><>x><>>x>r>>>>>(>>V>P>>>(>x>)>>)>>->>min>>>x>l>><>x><>>x>r>>>>>(>>U>P>>>(>x>)>>)>>≤>>H>0>>×>2>>>>>,>>

则删除切点xl

4.5附加部分分配

当连续两个字符都拥有附加部分时,附加部分(图12)也有可能粘连。如果一个附加部分和多个字符的主体部分在水平方向上重叠,则该附加部分是粘连的。若该附加部分跨越xR和xL两个相邻切点,则在xB和xL之间附加部分竖直投影值最小处切分附加部分。

粘连的附加部分切分完毕后,就要把每一个附加部分分配给最近的字符主体部分。附加部分CA和字符主体部分CM的距离为

                  DIS(CA,CM)=|lA+rA-lM-rM|。

根据本发明实现的阿文文本切分算法,已经应用于一个印刷体阿文文本识别系统。300DPI分辨率扫描的黑白二值阿拉伯文及维吾尔文的报纸和期刊用来测试该系统,识别结果如表1。其中只有30%左右的错误是因为切分错误引起的,也就是说字符切分的准确率在99%以上。试验结果能够说明本发明提出的印刷体阿文文本切分方法的有效性。

  字符数目  识别率 测试集1  11966  95.38% 测试集2  11790  97.79% 测试集3  9912  96.75% 测试集4  10788  95.80% 总计  44456  96.43%

             表1试验结果

本发明提出的多字体多字号印刷体阿文文本切分方法在实验中获得了优异的文本切分性能,具有广泛的应用前景。综上所述,本发明具有以下优点:

第一,本发明提出的在字符块分类的基础上,先水平投影把文本区域分割成子区域,然后在多行子区域内部归并字符块实现文字行切分的方法不仅能够处理水平无倾斜的文本,还能处理倾斜角度大,存在行间字符粘连的文本。

第二,本发明提出的基线、头线位置估计方法准确率高。

第三,本发明提出的联体字符段切分方法,能够处理相邻联体字符段在水平方向重叠的情况。

第四,本发明能够寻找在基线上的切点,在基线上方的切点及在基线下方的切点,能够切割粘连附加部分,并且利用结构规则删除经常出现的过切分点。字符切点查全率高,伪切点数目少。

附图说明

图1标准阿拉伯文基本字符集

图2阿文文本特点

图3印刷体阿文文本识别系统结构图

图4发明主要内容的流程

图5文字行切分流程

图6坐标系及变量说明

图7多行子区域检测

图8字符切分流程

图9在基线上的切点特点

图10基线上方切点特点

图11基线下方切点特点

图12附加部分切分

具体实施方式

一个印刷体阿文文本识别系统在硬件上由图像采集设备和计算机两部分构成。图像采集设备一般是扫描仪,用来获取待识别文本的数字图像。计算机用于对数字图像进行处理,完成文本的最终识别。

对于一篇阿文文本样张,首先通过扫描仪将其扫入计算机,使之变为数字图像。对数字图像采取二值化、去除噪声等预处理措施,得到二值图像。再对输入图像进行行切分得到文本行,估计文本行的基线、头线位置,把文本行切分成联体字符段。在此基础上对每一个连体字符段进行单字切分,得到单个字符,然后识别单个字符。每个阶段的错误可以用手工方式改正。

因此,实现实用的印刷体阿文文本识别系统,在文本切分方面需要考虑如下几个方面:文字行切分;基线和头线位置估计;联体字符段切分;字符切分。下面分别对这四个方面进行详细介绍:

第一,文字行切分

1.1字符块分类

根据高度和宽度信息,把文本图像I上的所有字符块{CnB|nB=1,2,...,nBlock}分成三类:

其中

>ver>>h>‾>>=>>1>nBlock>over>>Σ>>nB>=>1>>nBlock>>>h>nB>>.>>

1.2子区域切分

只保留MIDDLE类字符块水平投影,水平投影值为0的位置把文本区域分割成多个子区域。每个子区域包含一条或多条文字行。

1.3多行子区域检测

对每个子区域求出

CC={(CI,CJ)|XOL(CI,CJ)>0,YOL(CI,CJ)=0,CI∈MIDDLE,CJ∈MIDDLE}。

其中,

          XOL(CI,CJ)=max(min(rI,rJ)-max(lI,lJ),0),

          YOL(CI,CJ)=max(min(bI,bJ)-max(tI,tJ),0)。

如果‖CC‖>10,就判定该子区域是多行子区域。

1.4多行子区域切分

按照右边界降序排列多行子区域内部所有的MIDDLE类字符块。按顺序每次取出一个字符块Cn和已经取出的所有字符块C1,C2,...,Cn-1比较,找到竖直方向上重叠最多的字符块CY,即

>>>C>Y>>=>>>arg>max>>>C>i>>>>(>YOL>>(>>C>n>>,>>C>i>>)>>)>>,>i>=>1,2>,>.>.>.>,>n>->1>.>>

若Cn和CY竖直重叠部分足够大,即

              YOL(Cn,CY)>h/2,

Cn和CY就属于同一文字行,否则Cn属于新文字行。取出所有字符块后,就得到了多行子区域的文字行切分结果。最后把所有子区域的所有文字行按照从上到下的顺序排列。

1.5切分BIG类字符块

对于每个字符块CB∈BIG,在文字行L(nL)内寻找字符块C(nL)(nL=1,2,..,nLine),即

>>>C>>(>nL>)>>>=>>>arg>min>>sup>>C>NB>>(>nL>)>sup>>>>>(>|>>>>l>B>>+>>r>B>>>2>>->>sup>>l>NB>>(>nL>)>sup>>+sup>>r>NB>>(>nL>)>sup>>>2>>|>)>>,sup>>C>NB>>(>nL>)>sup>>∈>>NB>>(>nL>)>>>.>>

其中

>>>NB>>(>nL>)>>>=>{sup>>C>NB>>(>nL>)>sup>>|sup>>C>NB>>(>nL>)>sup>>∈>>L>>(>nL>)>>>,sup>>C>NB>>(>nL>)>sup>>∈>MIDDLE>,>>

>>HDIS>>(sup>>C>NB>>(>nL>)>sup>>,>>C>B>>)>><ver>>h>‾>>×>5>,>YOL>>(sup>>C>NB>>(>nL>)>sup>>,>>C>B>>)>>>ver>>h>‾>>/>3>}>,>>

>>HDIS>>(sup>>C>NB>>(>nL>)>sup>>,>>C>B>>)>>=>max>>(>max>>(sup>>l>NB>>(>nL>)>sup>>,>>l>B>>)>>->min>>(sup>>r>NB>>(>nL>)>sup>>,>>r>B>>)>>,>0>)>>.>>

若C(m)和C(m+1)存在,就说明CB跨越了第m条和m+1条文字行,需要在

>>y>=>>>>b>>(>m>)>>>+>>t>>(>m>+>1>)>>>>2>>,>>

处切分CB。在所有跨越文字行的位置把CB切分成多个部分,标记每个部分为MIDDLE类,然后分配到相应的文字行。

1.6插入SMALL类字符块

对于每个字符块CS∈SMALL,计算CS和每条文字行的距离,并把其分配到距离最近的文字行。

计算CS和文字行L(nL)的距离的方法如下:寻找满足条件的字符块Cl和Cr,即

>>>C>l>>=>>>arg>min>sup>>C>LB>>(>nL>)>sup>>>>(>>l>S>>-sup>>l>LB>>(>nL>)>sup>>)>>,sup>>C>LB>>(>nL>)>sup>>∈>>LB>>(>nL>)>>>,>>

>>>C>r>>=>>>arg>min>sup>>C>RB>>(>nL>)>sup>>>>(sup>>r>RB>>(>nL>)>sup>>->>r>S>>)>>,sup>>C>RB>>(>nL>)>sup>>∈>>RB>>(>nL>)>>>,>>

其中

>>>LB>>(>nL>)>>>=>{sup>>C>LB>>(>nL>)>sup>>|sup>>C>LB>>(>nL>)>sup>>∈>>L>>(>nL>)>>>,sup>>C>LB>>(>nL>)>sup>>∈>MIDDLE>,>>l>S>>>sup>>l>LB>>(>nL>)>sup>>}>,>>

>>>RB>>(>nL>)>>>=>{sup>>C>RB>>(>nL>)>sup>>|sup>>C>RB>>(>nL>)>sup>>∈>>L>>(>nL>)>>>,sup>>C>RB>>(>nL>)>sup>>∈>MIDDLE>,>>r>S>><sup>>r>RB>>(>nL>)>sup>>}>.>>

则CS和文字行L(nL)的距离为

第二,基线和头线估计

当前处理的文字行图像用L表示,HL是L的高度,WL是L的宽度。

2.1基线高度估计

>>VRUN>=>{>>(sup>>y>nR>>(>s>)>sup>>,sup>>y>nR>>(>e>)>sup>>,sup>>x>nR>>(>se>)>sup>>)>>|>nR>=>1,2>,>.>.>.>,>nRun>}>>是L中的所有竖直黑像素游程,

>>VH>>(>runH>)>>=>|>|>{>>(sup>>y>nR>>(>s>)>sup>>,sup>>y>nR>>(>e>)>sup>>,sup>>x>nR>>(>se>)>sup>>)>|>>(sup>>y>nR>>(>s>)>sup>>,sup>>y>nR>>(>e>)>sup>>,sup>>x>nR>>(>se>)>sup>>)>>>∈>VRUN>,sup>>y>nR>>(>e>)>sup>>-sup>>y>nR>>(>s>)>sup>>=>runH>}>|>|>,>>

                 runH=1,2,...,HL

则可得基线的高度为

>>>H>0>>=>>>arg>max>>runH>>>(>VH>>(>runH>)>>)>>,>runH>=>1,2>,>.>.>.>,>>H>L>>.>>

2.2基线位置估计

把文字行L分成

个部分,每个部分的长度为15×H0。令HP(nP)(y)(y=0,1,...,HL-1)是L只保留第nP部分图像的水平投影结果,那么第nP部分的基线位置为,

>sup>>B>Top>>(>nP>)>sup>>=>>>arg>max>>y>>>(over>>Σ>>k>=>0>>>>H>0>>->1>>>>HP>>(>nP>)>>>>(>y>+>k>)>>)>>,>y>=>0,1>,>.>.>.>,>>H>L>>->>H>0>>,>>

>sup>>B>Btm>>(>nP>)>sup>>=sup>>B>Top>>(>nP>)>sup>>+>>H>0>>->1>,>>

其中BTop(nP)和BBtm(nP)分别表示基线的上边界和下边界。这样就可以得到L任意处的基线位置,

>> >>>>B>Top>>>(>x>)>>=sup>>B>Top>>(>nP>)>sup>>>>>l>>(>nP>)>>>≤>x><>>r>>(>nP>)>>>>>>>>B>Btm>>>(>x>)>>=sup>>B>Btm>>(>nP>)>sup>>>>>l>>(>nP>)>>>≤>x><>>r>>(>nP>)>>>>>>>,>>

其中l(nP)和r(nP)分别是第nP部分的左、右边界。

2.3头线位置估计

令UL(x)(x=0,1,...,WL-1)是文字行L去除附加部分后的上轮廓,则

       EL={x|UL(x)<UL(x-1),UL(x)<UL(x+1),1≤x<WL-1},

是UL(x)极小点的集合。

定义

>>BU>>(>x>)>>=> >>>>B>Top>>>(>x>)>>->>U>L>>>(>x>)>>>>x>∈>>E>L>>>>>>0>>>x>∉>>E>L>>>>>>,>>

则可得>>>h>′>>=>>1>>|>|>>E>L>>|>|>>>>Σ>>{>x>|>x>∈>>E>L>>}>>>BU>>(>x>)>>.>>再令E′={x|BU(x)<h′,x∈EL},可得>>>H>1>>=>>1>>|>|>>E>′>>|>|>>>>Σ>>{>x>|>x>>>∈>E>>′>>}>>>BU>>(>x>)>>.>>

H1就是头线和基线上边界之间的距离。

第三,联体字符段切分

每个联体字符段由一个主体部分和若干附加部分组成。被基线穿过的MIDDLE类字符块以及被基线穿过并且在水平方向上不和其他字符块重叠的SMALL类是联体字符段的主体部分。剩余的SMALL类字符块则属于联体字符段的附加部分。

对每个属于联体字符段附加部分的SMALL类字符块CS搜索最近的属于联体字符段主体部分的字符块CM,则CS和CM是同一个联体字符段的附加部分和主体部分。CS和CM的距离定义为

            DIS(CS,CM)=|lS+rS-lM-rM|。

第四,字符切分

当前处理的联体字符段图像用P表示,HP是P的高度,WP是P的宽度。

4.1在基线上的候选切点

定义

D(x)=max(BTop(x)-UP(x),0)+max(VP(x)-BBtm(x),0),x=0,1,...,WP-1,

其中UP(x)和VP(x))分别是P去除附加部分后的上轮廓和下轮廓。

在基线上的候选切点xO满足(1)和(2)或者(1)和(3),下面各式中的“+”运算和“-”运算分别对应字符的左侧切点和右侧切点:

(1)切点xO在基线上:

               D(xO)≤2;

(2)切点情形(A)或(B):

               D(xO±1)-D(xO)>1.5×H0

(3)切点情形(C):

>> >>>D>>(>>x>O>>±>i>)>>->D>>(>>x>O>>)>>>>0.75>×>>H>0>>>>i>=>e>>>>>D>>(>>x>O>>±>i>)>>≥>D>>(>>x>O>>±>im>1>)>>>>i>=>1,2>,>K>,>e>>>>>,>>

其中e满足xO±e∈EP,EP是UP(x)极小点的集合。

4.2基线上方的候选切点

基线上方的切点xT必须满足如下条件:

(1)切点本身是上轮廓的极低点:

               UP(xT)>UP(xT-1),UP(xT)>UP(xT+1);

(2)上轮廓在切点位置处于头线上方:

               UP(xT)<BTop(xT)-H1

(3)切点左侧下轮廓的最低点在基线的下方:

>>>max>>x>>><>x>>T>>>>>(>>V>P>>>(>x>)>>)>>>>>B>Btm>>>(>>x>T>>)>>;>>

(4)切点右侧下轮廓的最低点在基线的下方:

>>>max>>>x>T>><>x>>><>w>>P>>->1>>>>(>>V>P>>>(>x>)>>)>>>>>B>Btm>>>(>>x>T>>)>>.>>

4.3基线下方的候选切点

基线下方的切点xB必须满足如下条件:

(1)切点左侧3列上轮廓的最高点TL在基线的上方:

>>>(>TL>=>>min>>>x>B>>->3><>x><>>x>B>>>>>(>>V>P>>>(>x>)>>)>>)>><>>B>Top>>>(>>x>B>>)>>;>>

(2)切点本身及右侧3列上轮廓的最高点TR在基线的下方:

>>>(>TR>=>>min>>>x>B>>≤>k>>><>x>>B>>+>3>>>>(>>V>P>>>(>x>)>>)>>)>>>>>>B>>Btm>>>(>>x>B>>)>>;>>

(3)TL和TR高度差大于两倍基线高度:

                TR-TL>2×H0

4.4检查切点的合法性

从右到左依次检查每个切点的合法性,并删除不合法切点。具体方法如下:设xr和xl是两个相邻的切点,其中xr>xl,若

> >>>>x>r>>->>x>l>>≤>>>H>0>>2>>>>>>>max>>>x>l>><>x>>><>x>>r>>>>>(>>V>P>>>(>x>)>>)>>->>min>>>x>l>><>x>>><>x>>r>>>>>(>>U>P>>>(>x>)>>)>>≤>>H>0>>×>2>'>>>>>

则删除切点xl

4.5附加部分分配

如果附加部分和多个字符的主体部分在水平方向上重叠,则附加部分是粘连的。若该附加部分跨越xR和xL两个相邻切点,则在xR和xL之间附加部分竖直投影值最小处切分附加部分。

最后把每个附加部分分配给最近的字符主体部分。附加部分CA和字符主体部分CM的距离计算公式为

                  DIS(CA,CM)=|lA+rA-lM-rM|。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号