基于BP神经网络识别字符的简单实验
汽车牌照定位与字符识别是目标自动识别的一个典型问题。车牌由有限的字母和数字组成,采用固定的印刷字体和排列顺序。在车牌自动识别系统中,因自然因素或采样因素使得原本规则的印刷体字符产生畸变,给字符识别来了很大困难。BP神经网络算法是把一组样本输入输出问题转化为一个非线性优化问题,并通过梯度算法利用迭代运算求解权值的一种学习方法。采用BP网络进行分类,并附加线性感知器来实现单字符的有效识别,算法简便,识别率高,可适用于多种高噪声环境中的印刷体字符识别。
下面的实验引自《神经网络模型及其MATLAB仿真程序设计》一书P94~98,简单起见,只对含有单独数字的图片样本进行识别,不涉及从照片中定位车牌,分割字符等前期处理。我在保持基本算法思想不变的前提下,对原书程序及其叙述做了一定的修改。Matlab源程序略。
一、BP神经网络结构分析:
按照BP神经网络设计方法选用两层BP网络。其输入节点数为16×16=256,隐层传输函数为Sigmoid函数。假设用一个输出节点表示10个数字,则输出层传输函数为pureline,隐层节点数为 ,取25。
二、神经网络仿真程序设计:
1、构造训练样本集,并构成训练所需的输入矢量和目标矢量:准备10组,每组10个(0~9)数字bmp图片作为训练样本。其中1组为清晰的,这里使用Microsoft Visual C#编程生成。另9组是在清晰样本的基础上,用Matlab添加'salt & pepper'、'gaussian'等噪音制作成的(下图示以“5”为例)。这些图片经过一定的预处理,取出其最大有效区域,归一为16×16的二值图像,作为输入矢量。
2、构造BP神经网络,并根据训练样本集形成的输入矢量和目标矢量,对BP网络进行训练。训练的误差性能曲线如图:
3、对BP神经网络进行仿真。用不同的方法生成测试样本图像,存于另外的bmp文件中,测试结果如下:
测试样本 识别情况
与训练样本完全相同 测试20个样本(2组0~9,皆是训练样本的复本),100%正确
与训练样本用相同的噪音算法生成 测试20个样本(2组0~9,分别加'salt & pepper'、'gaussian'噪音),60%正确
在清晰的训练样本基础上用Microsoft Windows 画图工具手工加入杂点 测试20个样本(2组0~9,分别用“喷枪”加黑色与白色随机杂点),35%正确
为提高识别率,可以增加训练样本,或通过增加字体的特征向量等途径来解决。由于涉及较多的理论,这里不再深入讨论。
* 参考文献:
1、周开利等, 《神经网络模型及其MATLAB仿真程序设计》, 清华大学出版社, 2005.
2、张兴会等, 基于神经网络的车牌照自动识别系统, 仪器仪表学报, 第22卷第3期增刊, 2001.1024