数字图像处理作业之字符识别
- 格式:wps
- 大小:94.26 KB
- 文档页数:6
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:100p1=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);endswitch 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}t(k+1)=7;case{ 81,82,83,84,85,86,87,88,89,90}t(k+1)=8;case{ 91,92,93,94,95,96,97,98,99,100}t(k+1)=9;endendsave swjPT p t; %保存输入矢量和目标矢量3.2样本训练程序如下:%样本训练clear all;load swjPT p t; %加载输入矢量和目标矢量pr(1:1024,1)=0; %初始权值设计pr(1:1024,2)=1;net=newff(pr,[25 1],{'logsig','purelin'},'traingdx','learngdm'); %神经网络初始化net.trainParam.epocha=4500; %训练次数net.trainParam.goal=0.001; %训练误差net.trainParam.show=10; %显示间隔net.trainParam.lr=0.09; %学习率net=train(net,p,t); %样本训练save swjnet net; %保存训练好的网络样本训练结果如下图示:3.3将测试用的BMP格式的位图输入程序进行测试,来检验BP神经网络在字符识别中识别率。
字符识别测试程序如下:%测试clear all;p(1:1024,1)=1; %初始图像二值化像素p1=ones(32,32);load swjnet net; %加载训练好的网络test=input('Please input a test image:','s');x=imread(test,'bmp'); %特征提取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,1)=p1(1:32,m+1);end[a,Pf,Af]=sim(net,p); %测试imshow(x); %显示原始图像a=round(a); %显示识别结果disp(a);四、心得体会通过本次利用BP神经网络进行字符识别的作业,我对神经网络有了更深的认识,并对数字图像处理的过程有了更进一层的掌握。
BP神经网络用于字符识别所发挥的可行性和有效性值得我们做深层次的研究。