基于BP神经网络的多样本手写体字符识别

时间:2022-07-03 05:28:24

基于BP神经网络的多样本手写体字符识别

摘要:手写体字符识别是人机交互领域的一个重要内容,本文基于BP神经网络实现了任意数量字符模版的多字符手写体字符识别。分为以下几步,第一,首先对目标图像进行识别前预处理。包括灰度图像二值化、图像孤立像素滤波、图像膨胀、腐蚀、按字母最小行分割、按字母最小列分割、图像紧缩、归一化等;第二,用处理好的多个样本进行BP神经网络训练。包括BP网络参数的选择、目标结果构建、输入到结果的映射即用样本库进行神经网络学习机的训练;第三,待测字母的识别。包括对图像预处理、字符提取、归一化和送入已训练好的BP网络进行识别。该系统最终实现了95%以上的手写字符识别正确率,有一定的借鉴意义。

关键词:模式识别;BP神经网络;手写体字符识别;图像分析

引言

在当前MATLAB神经网络字符识别研究中,一般都是基于单个字符库样本进行学习机训练而且很少进行手写字符的识别,例如应用最多的车牌字符识别,其送人的训练样本一般很有限,因此学习样本有限,很难适用于具有广泛特性的手写字符识别,因此,对于多种不同手写样本的训练和识别有一定的研究意义。具体实现功能描述如下,首先利用不同笔迹书写的字母训练BP神经网络学习机,然后用手写的样本测试BP学习机的识别正确率,要求输入各个字母的训练样本库和测试用的手写字母库,程序给出最终的识别结果和识别正确率。

1基于Matlab的手写字符识别系统

基于Matlab的手写字符识别系统由以下模块构成,包括图像预处理、字符有效区域检测、图像分割、样本库训练和测试字符识别,如图1。

其中,原始图像:由数码相机或其它扫描装置拍摄到的图像;

图像预处理:对动态采集到的图像进行滤波、边界增强等处理以克服图像干扰;

字符分割、归一化:利用梯度检测的字符定位、分割方法得到单个的字符,并将所有字符归一化为固定大小;

样本数据库:利用前期采集的每个字母80个的手写字符为第5步的字符识别建立字符模板数据库;

BP学习机:根据样本数量和训练分类结果构建BP学习机:

字符识别:基于人工神经网络的OCR算法,通过特征对比或训练识别出相关的字符,得到最后的英文字符识别结果。

2BP神经网络的字母识别

2.1图像预处理

图像在形成、传输或变换过程中,受多种因素的影响,如:光学系统失真、系统噪声、曝光不足或过量、相对运动等,往往会与原始景物之间或图像与原始图像之间产生了某种差异,这种差异称为降质或退化。因此在图像处理之前必须进行预处理,包括去除噪音、边界增强、增加亮度等等。

以字母q的样本库图2为例,实验素材是数码相机拍摄的手写字母q的各种不同形式,但由于手写体比较自由的特点,因此有了许多形态不尽相同的字母q的类,通过观察发现,不同类型字母q由于手写速度不同造成部分字母出现部分线条断裂,另外由于字母灰度图存在部分干扰,为了消除以上缺陷,先将图像进行灰度二值化并滤除一些孤立背景噪声,其次再对图像做膨胀和腐蚀运算使得图像中断裂的线条重连使用的样本库均类似图3。

经过预处理的图像含有很少的噪声,并且图像特征得到增强,后面将会对预处理过的图像进行分割操作。

2.2字母定位

经过预处理,可以更加清晰的发现字母图像基本是按照水平和垂直的行和列分布,因此先将图像分隔成包含每8个字母的分行图像。按照以下方法来进行行分割。通过和列像素点统计相类似的办法可以得到行的像素点统计分布。统计完成绘制的像素点统计分布图如图4其中图像横坐标是图像的行列的绝对像素位置。

根据所得的结果很容易确定每行字母的其实行(列)和终止行(列),通过检测梯度刚开始上升的位置则为行开始位置,梯度下降末的位置则为图像的行(列)终止的位置。通过该算法进行行(列)位置的确定。

2.3字母分割

根据上面提供的算法已分别将上升沿、下降沿位置信息存储到了hang up和hang down数组中,下面将整个图像分隔成单行,算法思想是新建图像空间,分别搜素图像自像素行hang up(1)到hang-down(1)位置的所有行,将其复制到新的图像空间。这样便完成了图像的行分割,如图5。同理我们可采取同样的思想将分割后的行图像进行统计,然后记录上升沿和下降沿的位置信息,再扫描上升沿到下降沿的所有列并存储到新的图像空间,这样就完成了图像的列分割,从而完成字母单独分割。同样原理实现列分割的效果如图6。

2.4字母图像归一化

考虑到为避免后期进行目标识别时由于大小而引起的误差,因此应将单个字符图像进行归一化,此外为方便起见,前期分配临时存储空间时,采用了固定的图像空间大小,因此由于分配的图像的存储空间一般大于字母,所以会造成空间的浪费,所以我们还要对图像进行去空白区域操作,思想是由顶行逐行向底行搜索,统计当前行的黑色像素点,将少于一定数量黑丝点的像素所在的行删除。同样,列也逐列搜索,去掉小于一定列数的图像列。归一化图像见图7。

Y方向的紧缩策略和x方向相同,前面做膨胀和腐蚀的原因是进一步连接字母图像中断裂的像素点。

2.5建立字符模版图像数据库

根据我们获得的图像建立了9个字母的图像数据库空间,每个字母的模版空间有80个,分别是a,d,m,n,p,q,r,u,w,统一将所有的图像进行归一化整理,共得到720个库模版,分为9个类。如图7为其中的一组库,这样的库总共有80个。操作过程中不一定需要存储所得的模版库,我存储的目的是使文档更加全面,事实上也可只用一组模板库进行手写字母识别,但正确率较低,约为60%。

得到模版库后由于在前面处理中已进行归一化,且因为之后的字符识别使用神经网络算法进行字符识别,所以再将上面归一化后的模板图像的样本转化为一个模版对应一个列向量。

其次为了使主程序Recognize中程序简洁明了,设计了某个字母图像对应的80个独立的样本的产生函数,给出的结果是产生行为2500,列为80的向量P。

2.6字符识别

字符识别目前较常用的方法是基于模版匹配的OCR算法以及基于人工神经网络的OCR算法。基于模板匹配的OCR的基本过程是:首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。用人工神经网络进行字符识别主要有两种方法:一种方法是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器。识别效果与字符特征的提取有关,而字符特征提取往往比较耗时。因此,字符特征的提取就成为研究的关键。另一种方法则充分利用神经网络的特点,直接把待处理图像输入网络,由网络自动实现特征提取直至识别。本设计则是基于BP人工神经网络的字符识别,不提取特征直接送入BP神经网络学习机进行分类训练。

BP网络是前向网络的核心部分,它是一种单向传播的具有三层或三层以上的前向神经网络,包括输入层、隐层和输出层,上下层之间实现全连接,而每层神经元之间无连接。一个三层的BP网络理论上可逼近任意的非线性映射,因此在实际应用中,一般采用三层的BP网络就可以满足需要。如图8所示的就是一个三层的BP网络结构图。

BP网络由正向传播和反向传播组成,在正向传播阶段,每一层神经元的状态只影响下一层神经元的状态,若在输出层得不到期望的输出值,则进行误差的反向传播阶段,BP网络学习规则又称8学习规则。

BP网络主要的训练函数包括BFGS准牛顿BP算法函数trainbfg、梯度下降BP算法函数traingd、梯度下降动量BP算法函数traingdm、成比例的变梯度算法SCG trainscg等等。一般的对于上百个权值的函数逼近,LM算法收敛速度最快,并且在许多情况下LM算法可以获得比其他任何一种算法更小的均方误差,但当网络的权值数量增加时trainlm优点将不再明显,其次trainlm算法对于模式识别问题处理功能较弱,而RPROPA的训练函数trainrp应用于模式识别,其速度最快。但对于函数逼近问题却不是最好。而SCG算法在网络规模较大的场合其性能都很好,该算法基本原理利用LM算法和变梯度算法相结合,SCG算法应用于函数逼近问题时几乎和LM算法一样快,而在应用于模式识别几乎和RPROPA一样快,而且其性能不会随目标误差减小而下降那么快。

程序流程图如图9。

3手写字母识别结果

测试图像如图10,最终得到结果如图11,可以发现神经网络在经过训练后识别结果已经达到了92.06%,可以说实验到此已经有比较完美的结果了,毕竟实验测试项目有限,但为了测试不同函数对于神经网络识别的正确率的影响,故有进行了不同训练函数的测试。

在训练参数里net-newff(minmax(P),{'logsig','logsig','logsig'},'trainrp')将训练函数trainrp替换为SCG算法的训练函数trainscg,效果有一定提升,识别表现出了极好的识别性,总体识别正确率达到95%以上,63个测试字母仅未识别3个,三个分别是第3行第6列,第8行第1列,第8行第2列,至于未识别的原因,目前仍不清楚。SCG算法的识别结果如图12。

观察发现,SCG训练函数识别正确率对于原识别正确率有3%左右的提升,可以说实验已经取得了较大的成功。这表面SCG算法在网络规模较大的场合性能较好,该算法基本原理是将LM算法和变梯度算法相结合,SCG算法应用于函数逼近问题时几乎和LM算法一样快,而在应用于模式识别几乎和RPROPA一样快,而且其性能不会随目标误差减小而下降那么快。

4总结

在手写体字符识别的整个过程中,查找了很多资料,综合了各方面的信息。字符识别实现的每一步都有许多的方法,各种方法都有其优劣,但是对于具体的图像处理,并不是每一种理论在实践中都可以实现,即使实现了也很难说哪一种方法最合适,还得在具体的实验中比较选择。测试结果表明,本设计有以下优点:

(1)实现了单类多个样本的整体训练,有一定实用价值。

(2)对比了在输入一定规模下,trainrp训练函数和trainscg函数对于识别结果的影响,提升了对于识别结果的3%的正确率。

同时,实验中发现隐层神经元选取对于结果影响很大,如果选取不合适会影响到识别结果,最明显的影响是使得训练过早结束,常得到识别正确率为0的结果。

上一篇:中兴汽车能否中兴? 下一篇:基于RFID和LabVIEW的实验室管理系统设计与应用