数字图像处理作业之字符识别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BP 神经网络在字符识别中的应用
一、BP 神经网络概述
BP (Back Propagation )神经网络是一种典型的多层神经网络,其网络的基本结构如图 所示,它包含输入层、隐藏层及输出层,隐层可以为一层或多层,每层上的神经元称为节点或单元,它们由可修正的权值互连。除了连接输入单元,每个单元还连接着一个偏置。
如图所示:
图1 BP 网络结构
BP 算法由两部分组成:信息的正向传递与误差的反向传播。在正向传播过程中,输入信息从输入层经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层没有得到期望的输出,则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至达到期望目标[9]。
BP 算法属于有监督式的学习算法,其基本思想是:根据训练样本和期望输出来设置合适的权值,不断的调整网络连接的权值,使误差达到实际的要求。 每一个隐含层单元和输出单元都会产生一个输出分量。网络的学习是从一个未训练的网络开始,向输入层提供一个训练模式,计算输出层的输出值。将输出值与目标值进行比较,任一个差值对应一个误差。该误差或准则函数是权值的某种标量函数,调整权值,使其向着减小误差值的方向变化,最终,当网络的误差或准则函数达到要求时,停止训练,固定权值。
输
入 输
出
输入层 输出层
隐层
BP 网络应用的第一步就是要用已知训练样本来训练BP 网络。BP 网络的输入层的结点个数,为图像预处理后所输出的特征的维数。对于隐含层的节点数,没有什么硬性规定,一般来说,隐含层神经元不宜选取太多,否则会造成识别率的急剧下降,也会降低网络的抗噪声能力。在本程序中,推荐使用10个隐含层神经元。首先,利用大量的训练样本来训练网络,以得到文件形式保存的权值。训练样本为精心选择的可以很好的反应样本可分性的已知数据。在程序中采用训练样本图片的形式。将训练样本图片进行特征提取后,就可以送入BP 网络进行训练。其次,训练完BP 网络后,就可以用它对数据进行识别了[11]。
如下图所示:
训练
识别
识别结果:0 1 2……
图2 识别流程图
二、系统流程
系统在实现的过程当中,分解成三大模块,图像预处理模块、网络训练和神经网络识别模块。其中,图像预处理模块在对图像进行了一系列变换后把最后提取到的数字字符提交给网络训练模块,然后在神经网络字符识别模块中识别并给出处理结果。
本系统总的流程为:
图 1 系统流程
图像预处理
待识别数据
特征提取 BP 网络 训练样本图片
图像预处理 网络训练
神经网络字符识别
2.1 图像预处理
用BP 神经网络对阿拉伯数字进行识别前, 应先对阿拉伯数字位图样本进行预处理, 图像预处理是图像间的变换处理,是图像分析的前期准备,目的是使图像中描述客体特征的图像更加简练、独特性更强、信息少而唯一。即先将位图转为灰度图, 然后二值化, 最后进行归一化处理, 以消除各数字在位置和大小上的差异, 从而提高识别的准确率。归一化处理后的字符便可进行特征向量提取。将所提取的特征输入到神经网络进行识别, 最后输出并显示识别结果[2], 过程如图所示。
图2 数字识别的基本流程
2.2 特征提取
将经过预处理后的数字图像中提取最能体现这个字符特点的特征向量,然后提取出训练样本中的特征向量代入BP 网络之中就可以对网络进行训练,提取出待识别的样本中的特征向量代入训练好的BP 网络中,就可以对字符进行识别。
特征提取的关键是如何有效选择提取的信息类型使得其能够将待识别目标明确地与其它类别进行区分。用于模式识别的特征信息必须能够稳定、可靠地将目标准确进行区分,使得同类之间差别最小化,异类之间差别最大化。其次为了能够适应快速的实时应用环境,特征维数应尽可能地少,但是同时包含最丰富的信息。
字符特征主要有基于结构及统计两种类型特征 。结构特征主要提取字符的笔划,笔划密度、骨架及外形轮廓等结构特征信息。基于结构特征的字符识别法区分相似字符能力较强。由于在实际应用环境中,字符往往存在扭曲变形、断裂缺损,污染等的恶劣情形,直接破坏明显的细节特征信息,给结构特征提取工作带来巨大的困难。因此,用基于结构信息的模式识别方法存在较差的抗干扰能力,因此在实际当中极少单纯应用。在实际应用往往采用多种特征提取方法结合使用来实现特征的提取。
三、神经网络识别
本文是基于MATLAB 的神经网络字符识别,分为三部分,即读取样本、样本训预处理 特征提取 数字图像 神经网络识别 识别结果
练、字符识别。样本是阿拉伯数字0-9各10张手写的BMP格式的图片,用于训练,来提取字符的特征。
3.1读取样本的MATLAB程序如下:
%形成输入矢量P和目标矢量t的matlab程序
clear all;
filename = dir('*.bmp'); %图像文件格式
for k=1:100
p1=ones(32,32); %缩放后用于存储的像素空间
x=imread(filename(k).name); %读取图像文件
bw=im2bw(x,0.5); %二值化
[i,j]= find(bw==0); %寻找数字所在的像素索引
imin=min(i); %求取数字像素占据空间的最小行索引
imax=max(i); %求取数字像素占据空间的最大行的索引 jmin=min(j); %求取数字像素占据空间的最小列的索引 jmax=max(j); %求取数字像素占据空间的最大列的索引 bwl=bw(imin:imax,jmin:jmax); %把图像由39×39缩放为实际数字像素所需的空间
rate=32/max(size(bwl)); %求取放大比率
bwl=imresize(bwl,rate); %按比率放大图像
[i,j]=size(bwl); %求取行列数
i1=round((32-i)/2); %取整
j1=round((32-j)/2);
p1(i1+1:i1+i,j1+1:j1+j)=bwl; %图像从右向暂存
p1=-1.*p1+ones(32,32); %将图像反色
for m=0:31 %样本特征存于输入矢量
p(m*32+1:(m+1)*32,k+1)=p1(1:32,m+1);
end
switch k %对应各个输入样本求取对应的目标矢量 case{ 1,2,3,4,5,6,7,8,9,10}
t(k+1)=0;
case{ 11,12,13,14,15,16,17,18,19,20}
t(k+1)=1;
case{ 21,22,23,24,25,26,27,28,29,30}
t(k+1)=2;
case{ 31,32,33,34,35,36,37,38,39,40}
t(k+1)=3;
case{ 41,42,43,44,45,46,47,48,49,50}
t(k+1)=4;
case{ 51,52,53,54,55,56,57,58,59,60}
t(k+1)=5;
case{ 61,62,63,64,65,66,67,68,69,70}
t(k+1)=6;
case{ 71,72,73,74,75,76,77,78,79,80}