一种英文单词OCR的算法

来源:互联网 发布:淘宝客服工资待遇怎样 编辑:程序博客网 时间:2024/04/20 06:47

最近一段时间,本人写了一个关于英文单词的光学字符识别算法(只是针对印刷体的识别),因为这是我的第一次尝试,所以会有很多不足之处,因此小弟在此给出自己的实现方法,希望大家能够给我一些宝贵的建议。

       我的识别算法是在WM手机上实现的(呵呵,该系统已经落伍了,就是自己有个手机,试着玩一下)。我首先对拍摄的图像进行二值化处理,后来发现噪声点不是很多,就忽略了除噪步骤,然后我根据X轴的统计特征,对字符进行了垂直分割,然后又根据Y轴的统计特征进行了水平分割,在此过程中获取了字符的长度和高度信息,然后也没有做归一化处理(本人比较懒吧)。

       下一步就是对单个字符进行识别了,在识别的过程中,我采用了分类的思想,希望尽量少一些处理少一些匹配的次数。我首先根据基于X轴的统计特征首先对字符进行了分类。基于X轴的统计数据会出现三个峰,两个峰,一个峰,以及零个峰的特征,我便是利用这个特征首先对字母进行了粗略的分析。

       具有三个峰的字符只有m一个,所以这样就简单的识别出了m;两个峰中,我又进行了一次划分,分别为峰值等高:u,n,o,s,g;左高右低:h,b,p,c,e;左低右高:q,d,a

然后又从字符的中间进行了一次穿越,并记录了穿越中的最后一个交点的位置,这样又会获得1234个交点及最后一个交点的位置的特征,为此将峰值特征与中间穿越所获得的特征进行组合,便可以在等高峰值这一组中识别出o,s,g,然后再根据交点的位置进行区分un;余下两组的识别方式相同,在此我就不做过多说明了。

       识别的过程中,比较头痛的是只有一个峰值的这一组:i,j,k,l,r,t。在该组中,我又重新制定了识别策略,首先根据y轴的统计特征,可以将ij成功的分离出来,并进行左边缘的垂直穿越,然后根据j的那个小勾来识别ij。经过这些处理之后,还有k,l,r,t4个字母,于是我又进行了一次1/3高处的水平穿越,根据K2个交点,将k识别出来。余下的lrt我又在字符宽的2/3处进行了一次垂直穿越,为此又将l识别出来,余下了rt之后我对字母的右边缘进行了垂直穿越,这个时候根据交点的位置,将tr进行了区分。

       至此,还有5个没有峰值的字母等待识别了:x,y,z,v,w。这几个字母感觉还比较容易识别,我在1/3高处进行了一次水平穿越,根据421个交点的特征,识别出了w,并将xv划分为一组,zy划分为一组,在xv这一组中,在字符宽1/3处进行了垂直穿越,根据21的交点个数识别出了xv

然后在zy一组中,在2/3字高处进行了水平穿越,为此又根据21的特征识别出了yz,至此,小写的光学字符识别已经结束了。

       该算法是已经写好了,目前正在进行测试,发现对muncgho等字母的识别效果好,为此还需要进一步的改进,我将在后期进行进一步的完善,在此也希望广大的IT博友给我指点,祝我一臂之力来完成这个能够适合在嵌入式设备上运行的识别算法。

原创粉丝点击