具体实施方式
本发明实施例是对输入的手写符号进行采集,得到采样序列,然后获取所述采样序列的方向特征,再根据所述方向特征,识别所述手写符号。所述方向特征为表征所述采样序列的特征趋势的采样点信息,比如:采样序列的方向特征可以是采样序列中具有特殊方向特征的相邻采样点。
为了能更准确的识别,可以在获取输入的手写符号的采样序列中每相邻采样点的方向特征之前,对输入的手写符号的采样序列按照线性进行归一化处理,然后再对进行归一化处理后的采样点进行平滑处理。
在本发明实施例中,获取输入的手写符号的采样序列的方向特征,可以这样实现:
计算所述采样序列中每个采样点到该采样点的两个相邻点形成的两条线段的张角θk;选取初级特征点,得到初级特征点序列,所述初级特征点可以包括所述采样点序列的首尾两点和拐点,所述拐点为张角θk小于一定阈值的采样点;
针对初级特征点序列计算新张角θk′,将所述初级序列中首尾两点作为特征点,然后选取θk′小于预定阈值的初级特征点作为最终特征点,从而得到最终的特征点序列;
对最终的特征点序列进行过滤,所述过滤步骤可以按照如下方式进行处理:
计算相邻两特征点的距离为dj,当dj<DIS且j>1,则剔除特征点F’(xj”,yj”);当dj<DIS且j=1,则剔除特征点F’(xj+1”,yj+1”),其中,DIS为预先设定的阈值,xj”,yj”为最终特征点F’的坐标值,j为自然数。
然后,再根据过滤后的最终特征点的个数确定识别结果。
如果最终特征点的个数为2,则识别所述输入的手写符号为直线。如果最终的特征点的个数为3,且中间特征点的张角在预先设定的张角区间内,则识别所述输入的手写符号为折线。
当然,当确定为直线时,还可以根据过滤后的最终特征点的方向角确定直线的方向;当确定为折线时,还可以根据其中的中间特征点与另两个特征点之间的张角,确定折线的偏转方向。当最终的特征点的个数为3个以上时,则识别所述输入的手写符号为圆。进一步的,可以计算相邻特征点F’(xj”,yj”)到点F’(xj+1”,yj+1”),得方向角θj,当L>90时,则确定该基本手写符号为逆时针圆,当L<-90时,则确定该基本手写符号为顺时针圆,若-90≤L≤90时,则拒识,其中,L通过如下公式计算获得:
αj=θj+1-θj;
如果αj<-180,αj=αj+360;
如果αj>180,αj=αj-360;
从上述方案可知,在本发明实施例中,识别出手写符号为直线、折线或圆后,还可以进一步为手写符号的方向。比如:可以识别出:图1所示手写符号100为水平向右的直线,手写符号101为斜向上的直线,手写符号102为垂直向上的直线等;折线的方向可以参见108~116,具体角度并不限于水平或垂直的方向弯曲,可以是任意方向的弯曲,如116。当识别出手写符号为圆时,识别的方向可以为顺时针圆116和逆时针圆117。
下面结合附图详细描述本发明的具体实施例。
参见图2所示,本发明的具体实施例包括以下步骤:
步骤201:输入采样点序列:P(x1,y1),P(x2,y2),......,P(xi,yi),break,P(xi+1,yi+1),......,P(xn,yn)。其中break标记代表前后两个基本手写符号间的中断,即两个符号间抬笔和落笔的中断;所述采样点序列是手写一个符号时的移动轨迹进行采样得到的一系列从时间上依次排列的点坐标,所述点坐标共有N个;采样点坐标系如图3所示。
步骤202:归一化处理,对采样点序列按线性归一化到64*64的大小,计 算方法如下:
从采样点序列中分别选取x和y的最大最小值,
X=max(xi|i=1,2,......,n),Y=max(yi|i=1,2,......,n);
X’=min(xi|i=1,2,......,n),Y’=mix(yi|i=1,2,......,n);
xi’=(xi-X’)*64/(X-X’)
yi’=(yi-Y’)*64/(Y-Y’)
从而得到新的序列P(x1’,y1’),P(x2’,y2’),......,P(xi’,yi’),break,P(xi+1’,yi+1’),......,P(xn’,yn’)。
步骤203:平滑处理,即对上述采样点序列中每一个坐标点的相邻点的坐标值进行加权平均,以通过低通滤波来形成新的坐标点xi’,yi’:
xi”=(xi-1’+2×xi’+xi+1’)/4
yi”=(yi-1’+2×yi’+yi+1’)/4
步骤204:张角的计算,输入一个基本手写符号的采样点序列P(x1”,y1”),P(x2”,y2”),...P(xk”,yk”)...,P(xi”,yi”),计算相邻点P(xk-1”,yk-1”)到P(xk”,yk”)和P(xk”,yk”)到P(xk+1”,yk+1”)形成的两条线段的张角。张角值用θk表示,其值域范围为0≤θk<180,按图3坐标系,θk的计算方法为:
其中,
步骤205:特征点初次提取,取基本手写符号序列的首尾两点P(x1”,y1”)、P(xi”,yi”)和拐点作为初级特征点F。拐点的选取方法为,当张角θk<135°时,这里,张角也可以小于其它设定阈值,则取P(xk”,yk”)点为拐点F。从而 得到特征点序列F(x1”,y1”),...F(xj”,yj”)...,F(xm”,ym”)。
步骤206:特征点再次提取,将初级特征点序列F(x1”,y1”),...F(xj”,yj”)...,F(xm”,ym”)按步骤204中计算张角的方法计算新张角θk′:
其中, 仍将序列中首尾两点作为特征点,然后选取θk′<135°的初级特征点F(xk”,yk”)作为特征点F’,从而得到最终的特征点序列F’(x1”,y1”),...F’(xj”,yj”)...,F’(xm”,ym”)。
步骤207:特征点过滤,计算相邻两特征点F’(xj”,yj”)和F’(xj+1”,yj+1”)的距离为dj,
当dj<DIS且j>1,则剔除特征点F’(xj”,yj”),
而当dj<DIS且j=1,则剔除特征点F’(xj+1”,yj+1”);
其中DIS可设定为6,dj的计算方法如下:
步骤208:确定最终特征点的个数。
步骤209:根据最终特征点的个数,确定识别结果。
如果最终特征点的个数为2,则识别为直线;如果最终特征点的个数为3,则识别为折线;如果最终特征点的个数为3个以上,则识别为圆。
直线的识别过程如下:
特征点只有两个F’(x1”,y1”)和F’(x2”,y2”)时,即确定该基本手写符号为直线,直线方向θ的计算如下,然后可进入下一个基本手写符号的识别:
计算点F’(x1”,y1”)到点F’(x2”,y2”)有向线段的方向
其中, Δy=y2"-y1",Δx=x2"-x1"。
折线的识别过程如下:
当特征点有3个时,即F’(x1”,y1”)、F’(x2”,y2”)、F’(x3”,y3”),按步骤204中计算张角的方法计算点F’(x2”,y2”)的张角得θ,若30°<θ<135°时,这里,张角也可以在其它阈值区间内,则确定该基本手写符号为折线,然后可进入下一个基本手写符号的识别,若θ不满足,则拒识。
折线偏转方向的计算如下:
计算点F’(x1”,y1”)到点F’(x2”,y2”)和点F’(x2”,y2”)到点F’(x3”,y3”)有向线段的方向,即可得到折线的偏转方向。
圆的识别过程如下:当特征点有3个以上时,即F’(x1”,y1”),...F’(xj”,yj”)...,F’(xm”,ym”),计算相邻特征点F’(xj”,yj”)到点F’(xj+1”,yj+1”),得方向角θj,当L>90时,则确定该基本手写符号为逆时针圆,当L<-90时,则确定该基本手写符号为顺时针圆,然后可进入下一个基本手写符号的识别,若-90≤L≤90时,则拒识。L的计算如下:
αj=θj+1-θj;
如果αj<-180,αj=αj+360;
如果αj>180,αj=αj-360;
如果连续输入多个手写符号,可以按照上面的步骤逐一识别,按顺序排列前面各个基本手写符号的识别结果,得到最终的识别结果输出。
在本发明实施例中,可以识别出直线,折线或圆等手写符号。直线、折线和圆还包括为不同方向,比如:直线可以为向上、向下、向右上,向右下等,如图1中100~107的直接方向;折线可以分为图1所示108~115图示的折线方向;圆可以可分为逆时针圆和顺时针圆,如图1所示116~117图示的方向。
参见图4所示,本发明实施例的手写符号的识别装置包括:方向特征获取单元41和识别单元42。其中,方向特征获取单元41,用于获取输入的手写符号的采样序列的方向特征,所述方向特征为表征所述采样序列的特征趋势的采样点信息;识别单元42,用于根据所述采样序列的方向特征,识别所述手写符号。
该装置包括:归一化处理单元43和平滑处理单元44。
归一化处理单元43,用于对输入的手写符号的采样序列按照线性进行归一化处理;
平滑处理单元44,用于对进行归一化处理后的采样点进行平滑处理后提供给所述方向特征获取单元。
所述方向特征获取单元41包括:
初级特征点序列获取单元411,用于计算所述采样序列中每个采样点到该采样点的两个相邻点形成的两条线段的张角θk;选取初级特征点,所述初级特征包括所述采样点序列的首尾两点和拐点,得到初级特征点序列,所述拐点为张角θk小于一定阈值的采样点;
最终特征点序列获取单元412,用于针对初级特征点序列计算新张角θk′,将所述初级序列中首尾两点作为特征点,然后选取θk′小于预定阈值的初级特征点作为最终特征点,从而得到最终的特征点序列;
过滤单元413,用于对最终的特征点序列进行过滤,所述过滤步骤包括:
计算相邻两特征点的距离为dj,当dj<DIS且j>1,则剔除特征点F’(xj”,yj”);当dj<DIS且j=1,则剔除特征点F’(xj+1”,yj+1”);其中,DIS预先设 定的阈值,xj”,yj”为最终特征点F’的坐标值,j为自然数。
所述识别单元42包括:
最终特征点个数判断单元421,用于确定过滤后的最终特征点的个数;
识别结果确定单元422,用于根据所述最终特征点的个数确定识别结果。
所述识别结果确定单元,用于在最终特征点的个数为2,识别所述输入的手写符号为直线。
所述识别结果确定单元,用于在确定最终的特征点的个数为3,且中间特征点的张角在预先设定的张角区间内时,识别所述输入的手写符号为折线。
所述识别结果确定单元,用于当最终的特征点的个数为大于3时,识别所述输入的手写符号为圆。
该装置还包括:直线方向识别单元45,用于识别直线的方向,具体如下:
计算点F’(x1”,y1”)到点F’(x2”,y2”)有向线段的直线方向θ,
其中, Δy=y2"-y1",Δx=x2"-x1"。
该装置还进一步包括:折线方向识别单元46,用于计算点F’(x1”,y1”)到点F’(x2”,y2”)和点F’(x2”,y2”)到点F’(x3”,y3”)有向线段的方向,得到该折线的偏转方向。
该装置还进一步包括:圆方向识别单元47,用于计算相邻特征点F’(xj”,yj”)到点F’(xj+1”,yj+1”),得方向角θj,当L>90时,则确定该基本手写符号为逆时针圆,当L<-90时,则确定该基本手写符号为顺时针圆,其中,L通过如下公式计算获得:
αj=θj+1-θj;
如果αj<-180,αj=αj+360;
如果αj>180,αj=αj-360;
下面再结合图6所示,举另一实施例详细描述本发明方法的具体过程,步骤如下:
步骤601:输入采样点序列:P(x1,y1),P(x2,y2),......,P(xi,yi),break,P(xi+1,yi+1),......,P(xn,yn)。
其中,break标记代表前后两个基本手写符号间的中断,即两个符号间抬笔和落笔的中断;所述采样点序列是手写一个符号时的移动轨迹进行采样得到的一系列从时间上依次排列的点坐标,所述点坐标共有N个;采样点坐标系如图3所示。
步骤602:对所述采样点序列作平滑处理,即对上述采样点序列中每一个坐标点的相邻点的坐标值进行加权平均,以通过低通滤波来形成新的坐标点xi’,yi’:
xi’=(xi-1+2×xi+xi+1)/4
yi’=(yi-1+2×yi+yi+1)/4
步骤603:对一个待识别的基本手写符号的采样点序列中的所有相邻点,计算相邻点方向值。具体如下:
在采样点序列中,任意取一点Pi,除最后一点外,点Pi均有一个后续点Pi+1,将点Pi到点Pi+1的有向线段的方向设定为Pi点的方向值,用Ti表示,其值域范围为0到7。
设(xi,yi)为Pi点坐标,(xi+1,yi+1)为Pi+1点坐标,可以利用如下公式计算Ti的值:
步骤604:对采样序列中的任一点Pi,除最后一点,统计其方向值Ti的和,作为方向特征Fj,j=0、1、2、3、4、5、6、7。具体可以利用如下公式统计方向特征Fj:
步骤605:判断是否是直接,即找出Fj中值最大的,设为Fj_max,并计算 定义Th_line为直线判断门限,当(Fj_max/Fsum)>Th_line时,则确定该基本手写符号为直线,并利用j_max确定直线的方向,执行步骤609;当(Fj_max/Fsum)<=Th_line时,则执行步骤606。
这里,当(Fj_max/Fsum)>Th_line时,利用j_max确定直线的方向,具体如下:
如果j_max=0,则为向右的直线,如图1中100;
如果j_max=1,则为向右上的直线,如图1中101;
如果j_max=2,则为向上的直线,如图1中102;
如果j_max=3,则为向左上的直线,如图1中103;
如果j_max=4,则为向左的直线,如图1中104;
如果j_max=5,则为向左下的直线,如图1中105;
如果j_max=6,则为向下的直线,如图1中106;
如果j_max=7,则为向右下的直线,如图1中107;
步骤606:针对每个Ti,统计偏差方向特征。
由于上述每个Ti,除最后一个,均有Ti+1,DTi=Ti-Ti+1;则方向偏 差特征Dp和Dn为:
步骤607:判断是否是折线,即找出上述Fj中值第二最大的,为Fj_smax,定义Th_sline为折线判断门限,判断下述三个折线判别条件同时满足时,即确定该基本手写符号为折线,然后执行步骤609;当未满足折线判别条件时,则执行步骤608。
折线判别条件如下:
(Fj_smax+Fj_max)/Fsum>Th_sline,
且|j_max-j_smax|=2或6,
且j_max为偶数。
具体属于哪一种折线,判断如下:
根据上述方向偏差有:clock=Dp-Dn
如果|j_max-j_smax|=6且clock>0,则折线如图1中111;
如果|j_max-j_smax|=6且clock<0,则折线如图1中115;
如果|j_max-j_smax|=2且min(j_max,j_smax)=4且clock>0,则折线如图1中110;
如果|j_max-j_smax|=2且min(j_max,j_smax)=4且clock<0,则折线如图1中114;
如果|j_max-j_smax|=2且min(j_max,j_smax)=2且clock>0,则折线如图1中109;
如果|j_max-j_smax|=2且min(j_max,j_smax)=2且clock<0,则折线如图1中113;
如果|j_max-j_smax|=2且min(j_max,j_smax)=0且clock>0,则折线如图1中108;
如果|max-j_smax|=2且min(j_max,j_smax)=0且clock<0,则折线如图1中112;
步骤608:对于上述Fj,i=0,1,...,7中存在超过Dn个为空,则拒绝识别,结束;否则,比较Dp-Dn与Th_circle,如果(Dp-Dn)>Th_circle,则确定为顺时针圆如图1中116,进入下一个基本手写符号的识别;如果(Dn-Dp)>Th_circle,则确定为逆时针圆如图1中117,进入下一个基本手写符号的识别;若|Dn-Dp|<=Th_circle,则拒绝识别,结束。其中,Th_circle为圆的判断门限,Dn为方向量参数。
步骤609:判断是否手写符号识别是否结束,如果结束,则执行步骤610,否则,输入下一个基本手写符号,返回步骤602。
步骤610:按顺序排列前面各个基本手写符号的识别结果,得到最终的识别结果输出。
为验证本发明的有效性,发明人进行了如下实验:
测试样本集使用了600套基本手写符号样本。以上样本均为自由手写符号,具体参数值见上文具体实施方式中的设置。
参见表1所示,实验结果如下:
|
正确识别率 |
错误识别率 |
基本手写符号样本 600套共10800个样本 |
99.3% |
0% |
表1
从表1中数据可看出,应用本发明实施例可以达到很高的识别性能,即使不能正确判断也能拒识,避免错误结果输出。在ATJ2135(炬力公司主控芯片) 主频为48MHz时,平均识别一个基本符号为1.2ms,完全能满足实用需求。
因此,本发明实施例的技术方案,通过获取所述采样序列中每相邻采样点的方向特征,再根据所述每相邻采样点的方向特征,识别所述手写符号。由于不需要通过预先设定的模板匹配,因此,提高的识别速度和效率。并且,由于根据方向特征、方向特征差值以及预先设定的门限值,可识别出直线、折线以及圆的方向,因此,可识别符号多且简单实用,识别率高,抗干扰能力强,资源占用很少,能达到很好的实时性。而且,应用本发明的实施例,可以识别由多种基本手写符号(见图1)排列组合成的任意手写符号(见图5)。
同时,本发明除了应用在触摸屏输入的手写符号识别上外,也可以应用到其他需要符号识别的人工智能领域,如电路图、地图、手写汉字等各个领域的符号识别。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。