1 简介
手写体字符识别是人机交互领域的一个重要内容,本文基于 BP 神经网络实现了任意数量字符模版的多字符手写体字符识别.分为以下几步,第一,首先对目标图像进行识别前预处理.包括灰度图像二值化,图像孤立像素滤波,图像膨胀,腐蚀,按字母最小行分割,按字母最小列分割,图像紧缩,归一化等;第二,用处理好的多个样本进行BP神经网络训练.包括BP网络参数的选择,目标结果构建,输入到结果的映射即用样本库进行神经网络学习机的训练;第三,待测字母的识别.包括对图像预处理,字符提取,归一化和送入已训练好的BP网络进行识别.该系统最终实现了95%以上的手写字符识别正确率,有一定的借鉴意义.
基于 Matlab 的手写字符识别系统由以下模块构成,包括图像预处理、字符有效区域检测、图像分割、样本库训练和测试字符识别,如图 1。其中,原始图像:由数码相机或其它扫描装置拍摄到的图像;图像预处理:对动态采集到的图像进行滤波、边界增强等处理以克服图像干扰;字符分割、归一化:利用梯度检测的字符定位、分割方法得到单个的字符,并将所有字符归一化为固定大小;样本数据库:利用前期采集的每个字母 80 个的手写字符为第 5 步的字符识别建立字符模板数据库;BP 学习机:根据样本数量和训练分类结果构建BP 学习机;字符识别:基于人工神经网络的 OCR 算法,通过特征对比或训练识别出相关的字符,得到最后的英文字符识别结果。
2 部分代码
%recognize
%生成向量形式
for m=0:15
q(m*16+1:(m+1)*16,1)=p1(1:16,m+1);
end
%识别
[a,Pf,Af]=sim(net,q);
a=round(a);
switch a
case 0,ch='A';
case 1,ch='B';
case 2,ch='C';
case 3,ch='D';
case 4,ch='E';
case 5,ch='F';
case 6,ch='G';
case 7,ch='H';
case 8,ch='I';
case 9,ch='J';
case 10,ch='K';
case 11,ch='L';
case 12,ch='M';
case 13,ch='N';
case 14,ch='O';
case 15,ch='P';
case 16,ch='Q';
case 17,ch='R';
case 18,ch='S';
case 19,ch='T';
case 20,ch='U';
case 21,ch='V';
case 22,ch='W';
case 23,ch='X';
case 24,ch='Y';
case 25,ch='Z';
end
%显示识别结果
set(h5,'String',ch,...
'FontSize',30);
3 仿真结果
4 参考文献
[1]李丹. "基于BP神经网络的多样本手写体字符识别." 软件 (2016).
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页