




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于BP神经网络的印刷体字母识别1背景随着社会的开展,英语作为国际通用语言得到了日益广泛的应用,因此有大量的英文文档整理、查询、统计的工作需要完成,而英文字母识别系统可以轻而易举地完成很多以前难以想象的工作。智能控制作为一门新兴的交叉学科,在许多方面都优于传统控制,而智能控制中的人工神经网络由于模仿人类的神经网络,具有感知识别、学习、联想、记忆、推理等智能,更是有着广阔的开展前景。人工神经网络理论的应用主要在人工智能,自动控制,模式识别,机器人,信息处理,CAD/CAM等方面。如:(1)空间科学。航空飞行器及汽车的自动驾驶导航系统,飞行路径模拟,飞行器制导和飞行程序优化管理等。(2)控制和优化。机器人运动控制,各种工业过程控制和制造过程控制,如集成电路布线设计,生产流程控制等等。(3)模式识别和图像处理。如人脸识别,语言识别,指纹识别,签名识别,手写体和印刷体字符识别,目标检测与识别,图像复原,图像压缩等等。(4)智能信息管理系统。如股价预测,不动产价格预测,外汇,黄金等大宗产品价格预测,公司财务分析,地震及各种自然灾害预报等等。其中最核心的是反向传播网络(BackPropagationNetwork),简称BP网络。本文介绍了运用matlab工具箱确定隐层神经元的个数和构造BP神经网络,并用两组样本对该神经网络进行训练,然后运用训练后的网络对字母进行识别。2BP网络介绍BP神经网络又称误差反向传递神经网络。它是一种依靠反应值来不断调整节点之间的连接权值而构建的一种网络模型。它的整个体系结构分为输入层、隐藏层和输出层,其中隐藏层根据具体情况的需要,可以是一层结构也可为多层结构。BP算法的根本思想是:学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐藏层逐层处理后,传向输出层。假设输出层的实际输出与期望的输出(教师信号)不符,那么转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐藏层向输入层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受到的程度,或进行到预先设定的学习次数为此。3系统实现思想字母识别系统一般分为预处理、特征提取和分类器三局部。其中,预处理包括将图片从模拟图像到进行二值化、归一化等过程;特征提取和分类器的设计是整个系统的核心局部。通过对各个局部分别进行编程处理来实现,将每局部编为可调用的函数,最后统一对函数进行调用,清晰方便。3.1字母识别整体框图aBP神经网络训练过程bBP神经网络识别过程图2.1BP神经网络识别系统3.2预处理及其特征提取方法本文使用傅里叶描述符及其反变换进行图片的二值化、字母轮廓提取,之后进行归一化,将其特征变成1*120的矩阵,之后选取里面的六十个点变为1*60的矩阵。特征提取程序:functionFD=Feature_Building(RGB)%RGB=imread('d:A.bmp');%figure(1),inshow(RGB)[B]=outline(RGB);%figure(2)%subplot(221),draw_outline(B);%title('outlineofobject');[m,n]=size(B);FD=fsd(B,30,m,4);其中outline、fsd为傅里叶描述及其反变换程序。outline程序:%%DeaprtmentofAutomation,TsinghuaUniv.Beijing100084,China.function[outline]=outline(RGB)I=rgb2gray(RGB);[junkthreshold]=edge(I,'sobel');fudgeFactor=.5;BWs=edge(I,'sobel',threshold*fudgeFactor);%Step3:Dilatetheimagese90=strel('line',3,90);se0=strel('line',3,0);BWsdil=imdilate(BWs,[se90se0]);%Step4:FillinteriorgapsBWdfill=imfill(BWsdil,'holes');%Step5:RemoveconnectedobjectsonborderBWnobord=imclearborder(BWdfill,4);%Step6:SmoothentheobjectseD=strel('diamond',1);BWfinal=imerode(BWnobord,seD);BWfinal=imerode(BWfinal,seD);bw=bwareaopen(BWfinal,30);%%fillagapinthepen'scap[B,L]=bwboundaries(bw,'noholes');outline=B{1};fsd程序见程序清单。3.3BP神经网络结构3.3.1输入层神经元个数确实定将图像的特征向量作为神经网络的输入,所以神经网络的输入层神经元个数等于特征向量的维数,即1×60=60个输入神经元。3.3.2隐含层神经元个数确实定隐层节点数对网络的学习和计算特性具有非常重要的影响,是该网络结构成败的关键。假设隐层节点数过少,那么网络难以处理复杂的问题;但假设隐层节点数过多,那么将使网络学习时间急剧增加,而且还可能导致网络学习过度,抗干扰能力下降。本文根据实际的实验,确定隐含层神经元的个数为15个。3.3.3输出层神经元个数确实定因为要识别26个英文大写字母,因此输出选择26×1的矩阵,即输出层神经元的个数为26个。当26个字母输入神经网络后,在对应的位置上输出1,其他位置上输出零。当网络进入识别过程时,哪个位置上输出的期望值最大,认为识别出的是这个位置上的字母。3.3.4BP神经网络的构造建立一个前向BP神经网络函数newff:net=newff(minmax(P),[S1,S2],{‘logsig’,‘logsig’},‘trainlm’);net.LW{2,1}=net.LW{2,1}*0.01;net.b{2}=net.b{2}*0.01;其中minma(P)为神经网络的对它的60个输入元素的最大值和最小值的限制。P为训练样本集合。S1、S2分别为该神经网络的隐含层和输出层的神经元个数。{‘logsig’,‘logsig’}为神经网络的各层的转移函数,均设置为对数S型激活函数。训练函数采用‘trainlm’。3.4BP神经网络的训练3.4.1训练样本集合和目标值集合字母图片归一化后的图像为60×1的矩阵,用60×26的矩阵形成一个训练样本;目标矢量是希望每一个数字输入神经网络后在输出神经元对应的位置上为1,其他的位置为0。为此取目标矢量为对角线上为1的26×26的单位阵,用matlab命令实现为:T=eye(26);3.4.2网络训练隐含层神经元的传递函数采用s型对数函数logsig,输出层神经元传递函数也采用s型对数函数,训练函数采用trainlm,性能函数采用sse,训练步数设置为最大5000,性能目标值为0.05,。BP训练程序:net.performFcn='sse';%设置目标性能函数net.trainParam.goal=0.05;%性能目标值net.trainParam.show=20;%显示间隔次数net.trainParam.epochs=5000;%最大训练次数net.trainParam.mc=0.95;[net,tr]=train(net,P,T);BP网络训练流程图:使用第一组样本进行训练的结果:TRAINLM,Epoch0/5000,SSE169.303/0.05,Gradient39.0748/1e-010TRAINLM,Epoch20/5000,SSE9.07917/0.05,Gradient0.647529/1e-010TRAINLM,Epoch40/5000,SSE5.45171/0.05,Gradient0.465044/1e-010TRAINLM,Epoch60/5000,SSE3.85999/0.05,Gradient1.13736/1e-010TRAINLM,Epoch80/5000,SSE3.37108/0.05,Gradient0.970379/1e-010TRAINLM,Epoch100/5000,SSE1.43394/0.05,Gradient0.27961/1e-010TRAINLM,Epoch120/5000,SSE1.13878/0.05,Gradient0.661835/1e-010TRAINLM,Epoch140/5000,SSE0.561939/0.05,Gradient0.497918/1e-010TRAINLM,Epoch160/5000,SSE0.537153/0.05,Gradient0.0963243/1e-010TRAINLM,Epoch180/5000,SSE0.518194/0.05,Gradient0.00990168/1e-010TRAINLM,Epoch200/5000,SSE0.461637/0.05,Gradient11.4576/1e-010TRAINLM,Epoch206/5000,SSE0.0350697/0.05,Gradient0.265104/1e-010TRAINLM,Performancegoalmet.可见经过206次训练后,网络误差到达要求,误差曲线如下列图:使用第二组样本进行训练的结果:TRAINLM,Epoch0/5000,SSE168.635/0.05,Gradient33.7987/1e-010TRAINLM,Epoch20/5000,SSE3.28669/0.05,Gradient40.5407/1e-010TRAINLM,Epoch32/5000,SSE0.0441687/0.05,Gradient0.0844925/1e-010TRAINLM,Performancegoalmet.可见经过26次训练之后,网络误差到达要求。误差曲线如下列图所示:3.5字母的识别以上所介绍为网络的学习期,学习过程结束后,网络进入工作期,即可以进行字母的识别。单一字母识别程序如下:RGB=imread('D:\ProgramFiles\MATLAB71\work\新建文件夹1\A11.bmp');%工作期A11为大写字母A略带噪声的图片FDB=Feature_Building(RGB);%提取字母轮廓特征FDB=reshape(FDB,1,120);FDB=FDB(1:2:120);%归一化处理[a,b]=max(sim(net,(FDB)'))%字母识别a为网络工作后输出层输出的最大值,b为所识别字母的行数即如果识别为A,那么b为1;识别为B,那么b为2,以此类推。识别结果如下:a=0.8316b=1可见能够正确识别字母A。RGB=imread('D:\ProgramFiles\MATLAB71\work\新建文件夹1\B11.bmp');%工作期B11为大写字母B略带噪声的图片FDB=Feature_Building(RGB);%提取字母轮廓特征FDB=reshape(FDB,1,120);FDB=FDB(1:2:120);%归一化处理[a,b]=max(sim(net,(FDB)'))%字母识别a为网络工作后输出层输出的最大值,b为所识别字母的行数即如果识别为A,那么b为1;识别为B,那么b为2,以此类推。识别结果如下:a=0.9741b=2可见也能够正确的识别字母B。本文使用两组样本进行BP神经网络的训练,一组样本进行字母的识别。识别程序及其结果如下:load('D:\ProgramFiles\MATLAB71\work\新建文件夹1\index1.mat')fori=1:26RGB{i}=imread(['D:\ProgramFiles\MATLAB71\work\新建文件夹1\',index1{i}]);FD{i}=Feature_Building(RGB{i});FD{i}=reshape(FD{i},1,120);FD{i}=FD{i}(1:2:120);[a,b]=max(sim(net,(FD{i})'))end结果:a=0.8316b=1a=0.9741b=2a=0.8805b=3a=0.9315b=4a=0.6114b=5a=0.9755b=6a=0.9715b=7a=0.9780b=8a=0.9770b=9a=0.9958b=10a=0.8759b=11a=0.9610b=12a=0.9695b=13a=0.8119b=8a=0.9718b=15a=0.9752b=5a=0.9039b=17a=0.5457b=18a=0.8177b=6a=0.9728b=20a=0.2953b=18a=0.8482b=22a=0.9092b=23a=0.9743b=24a=0.9534b=25a=0.9764b=26由以上结果可知:识别了22个字母,有四个字母未被正确识别〔NPSU〕。为了使识别准确率更高,训练更多的样本,尽量选择一些略带有噪声的图片,识别时准确率更高。程序清单BP网络训练程序:clcclearload('D:\ProgramFiles\MATLAB71\work\新建文件夹1\index.mat')fori=1:52RGB{i}=imread(['D:\ProgramFiles\MATLAB71\work\新建文件夹1\',index{i}]);FD{i}=Feature_Building(RGB{i});FD{i}=reshape(FD{i},1,120);FD{i}=FD{i}(1:2:120);endP{1}=[(FD{1})'(FD{2})'(FD{3})'(FD{4})'(FD{5})'(FD{6})'(FD{7})'(FD{8})'(FD{9})'(FD{10})'(FD{11})'(FD{12})'(FD{13})'(FD{14})'(FD{15})'(FD{16})'(FD{17})'(FD{18})'(FD{19})'(FD{20})'(FD{21})'(FD{22})'(FD{23})'(FD{24})'(FD{25})'(FD{26})'];P{2}=[(FD{27})'(FD{28})'(FD{29})'(FD{30})'(FD{31})'(FD{32})'(FD{33})'(FD{34})'(FD{35})'(FD{36})'(FD{37})'(FD{38})'(FD{39})'(FD{40})'(FD{41})'(FD{42})'(FD{43})'(FD{44})'(FD{45})'(FD{46})'(FD{47})'(FD{48})'(FD{49})'(FD{50})'(FD{51})'(FD{52})'];%P=[P1;P2];T=[eye(26)];S1=15;S2=26;forn=1:2%学习期net=newff(minmax(P{n}),[S1S2],{'logsig''logsig'},'trainlm');net.LW{2,1}=net.LW{2,1}*0.01;net.b{2}=net.b{2}*0.01;net.performFcn='sse';net.trainParam.goal=0.05;net.trainParam.show=20;net.trainParam.epochs=5000;net.trainParam.mc=0.95;[net,tr]=train(net,P{n},T);end识别程序:load('D:\ProgramFiles\MATLAB71\work\新建文件夹1\index1.mat')fori=1:26RGB{i}=imread(['D:\ProgramFiles\MATLAB71\work\新建文件夹1\',index1{i}]);FD{i}=Feature_Building(RGB{i});FD{i}=reshape(FD{i},1,120);FD{i}=FD{i}(1:2:120);[a,b]=max(sim(net,(FD{i})'))end傅里叶变换程序:functionFD=Feature_Building(RGB)%RGB=imread('d:A.bmp');%figure(1),inshow(RGB)[B]=outline(RGB);%figure(2)%subplot(221),draw_outline(B);%title('outlineofobject');[m,n]=size(B);FD=fsd(B,30,m,4);%%DeaprtmentofAutomation,TsinghuaUniv.Beijing100084,China.function[outline]=outline(RGB)I=rgb2gray(RGB);[junkthreshold]=edge(I,'sobel');fudgeFactor=.5;BWs=edge(I,'sobel',threshold*fudgeFactor);%Step3:Dilatetheimagese90=strel('line',3,90);se0=strel('line',3,0);BWsdil=imdilate(BWs,[se90se0]);%Step4:FillinteriorgapsBWdfill=imfill(BWsdil,'holes');%Step5:RemoveconnectedobjectsonborderBWnobord=imclearborder(BWdfill,4);%Step6:SmoothentheobjectseD=strel('diamond',1);BWfinal=imerode(BWnobord,seD);BWfinal=imerode(BWfinal,seD);bw=bwareaopen(BWfinal,30);%%fillagapinthepen'scap[B,L]=bwboundaries(bw,'noholes');outline=B{1};functionrFSDs=fsd(outline,H,b,bN)%ForwardellipticalFouriertransform-seeKuhlFPandGiardinaCR%"EllipticFourierfeaturesofaclosedcontour"ComputerGraphicsand%ImageProcessing18:236-2581982fortheory.%Returnsashapespectrumofinputx,ydata"outline"with%iNoOfHarmonicsAnalyseelements.%TheoutputFSDswillbenormalisedforlocation,sizeandorientation%ifbNormaliseSizeStateandbNormaliseOrientationStateareTRUE%Pre-calculatesomeconstantarrays%n*2*pi%n^2*2*pi^2%wherenisthenumberofharmonicstobeusedintheanalysis%H=iNoOfHarmonicsAnalyse%b=bNormaliseSizeState%[mn]=size(outline),b=m;%bN=bNormaliseOrientationStaterTwoNPi=(1:1:H)*2*pi;rTwoNSqPiSq=(1:1:H).*(1:1:H)*2*pi*pi;iNoOfPoints=size(outline,1)-1;%hencethereis1moredatapointinoutlinethaniNoOfPointsrDeltaX=zeros(iNoOfPoints+1,1);%pre-allocatesomearraysrDeltaY=zeros(iNoOfPoints+1,1);rDeltaT=zeros(iNoOfPoints+1,1);foriCount=2:iNoOfPoints+1rDeltaX(iCount-1)=outline(iCount,1)-outline(iCount-1,1);rDeltaY(iCount-1)=outline(iCount,2)-outline(iCount-1,2);end%Calculate'time'differencesfrompointtopoint-actuallydistances,butweare%carryingonthefictionofapointrunningaroundtheclosedfigureatconstantspeed.%Weareanalysingtheprojectionsontothexandyaxesofthispoint'spatharoundthefigureforiCount=1:iNoOfPointsrDeltaT(iCount)=sqrt((rDeltaX(iCount)^2)+(rDeltaY(iCount)^2));endcheck=(rDeltaT~=0);%removezerosfromrDeltaT,rDeltaX...rDeltaT=rDeltaT(check);rDeltaX=rDeltaX(check);rDeltaY=rDeltaY(check);iNoOfPoints=size(rDeltaT,1)-1;%wehaveremovedduplicatepoints%nowsumtheincrementaltimestogetthetimeatanypointrTime(1)=0;foriCount=2:iNoOfPoints+1rTime(iCount)=rTime(iCount-1)+rDeltaT(iCount-1);endrPeriod=rTime(iNoOfPoints+1);%rPerioddefinedforreadability%calculatetheA-sub-0coefficientrSum1=0;foriP=2:iNoOfPoints+1rSum2=0;rSum3=0;rInnerDiff=0;%calculatethepartialsums-theseare0foriCount=1ifiP>1foriJ=2:iP-1rSum2=rSum2+rDeltaX(iJ-1);rSum3=rSum3+rDeltaT(iJ-1);endrInnerDiff=rSum2-((rDeltaX(iP-1)/rDeltaT(iP-1))*rSum3);endrIncr1=((rDeltaX(iP-1)/(2*rDeltaT(iP-1)))*(rTime(iP)^2-rTime(iP-1)^2)+rInnerDiff*(rTime(iP)-rTime(iP-1)));rSum1=rSum1+rIncr1;endrFSDs(1,1)=((1/rPeriod)*rSum1)+outline(1,1);%storeA-sub-0inoutputFSDsarray-thisarraywillbe4xiNoOfHarmonicsAnalyse%calculatethea-sub-ncoefficientsforiHNo=2:HrSum1=0;foriP=1:iNoOfPointsrIncr1=(rDeltaX(iP)/rDeltaT(iP))*((cos(rTwoNPi(iHNo-1)*rTime(iP+1)/rPeriod)-cos(rTwoNPi(iHNo-1)*rTime(iP)/rPeriod)));rSum1=rSum1+rIncr1;endrFSDs(1,iHNo)=(rPeriod/rTwoNSqPiSq(iHNo-1))*rSum1;end%"foriHNo=1:..."rFSDs(2,1)=0;%thereisno0thordersinecoefficient%calculatetheb-sub-ncoefficientsforiHNo=2:HrSum1=0;foriP=1:iNoOfPointsrIncr1=(rDeltaX(iP)/rDeltaT(iP))*((sin(rTwoNPi(iHNo-1)*rTime(iP+1)/rPeriod)-sin(rTwoNPi(iHNo-1)*rTime(iP)/rPeriod)));rSum1=rSum1+rIncr1;endrFSDs(2,iHNo)=(rPeriod/rTwoNSqPiSq(iHNo-1))*rSum1;end%"foriHNo=1:..."%calculatetheC-sub-0coefficientrSum1=0;foriP=2:iNoOfPoints+1rSum2=0;rSum3=0;rInnerDiff=0;%calculatethepartialsums-theseare0foriCount=1ifiP>1foriJ=2:iP-1rSum2=rSum2+rDeltaY(iJ-1);rSum3=rSum3+rDeltaT(iJ-1);endrInnerDiff=rSum2-((rDeltaY(iP-1)/rDeltaT(iP-1))*rSum3);endrIncr1=((rDeltaY(iP-1)/(2*rDeltaT(iP-1)))*(rTime(iP)^2-rTime(iP-1)^2)+rInnerDiff*(rTime(iP)-rTime(iP-1)));rSum1=rSum1+rIncr1;endrFSDs(3,1)=((1/rPeriod)*rSum1)+outline(1,2);%storeC-sub-0inoutputFSDsarray-thisarraywillbe4xiNoOfHarmonicsAnalyse%calculatetheC-sub-ncoefficientsforiHNo=2:HrSum1=0;foriP=1:iNoOfPointsrIncr1=(rDeltaY(iP)/rDeltaT(iP))*((cos(rTwoNPi(iHNo-1)*rTime(iP+1)/rPeriod)-cos(rTwoNPi(iHNo-1)*rTime(iP)/rPeriod)));rSum1=rSum1+rIncr1;endrFSDs(3,iHNo)=(rPeriod/rTwoNSqPiSq(iHNo-1))*rSum1;end%"foriHNo=1:..."rFSDs(4,1)=0;%thereisno0thordersinecoefficient%calculatetheD-sub-ncoefficientsforiHNo=2:HrSum1=0;foriP=1:iNoOfPointsrIncr1=(rDeltaY(iP)/rDeltaT(iP))*((sin(rTwoNPi(iHNo-1)*rTime(iP+1)/rPeriod)-sin(rTwoNPi(iHNo-1)*rTime(iP)/rPeriod)));rSum1=rSum1+rIncr1;endrFSDs(4,iHNo)=(rPeriod/rTwoNSqPiSq(iHNo-1))*rSum1;end%"foriHNo=1:...%thenon-normalisedcoefficientsarenowinrFSDs%ifwewantthenormalisedones,thisiswhereithappensif(b==1)||(bN==1)%rTheta1istheanglethroughwhichthestartingpositionofthefirst%harmonicphasormustberotatedtobealignedwiththemajoraxisof%thefirstharmonicellipserFSDsTemp=rFSDs;rTheta1=0.5*atan(2*(rFSDsTemp(1,2)*rFSDsTemp(2,2)+rFSDsTemp(3,2)*rFSDsTemp(4,2))/...(rFSDsTemp(1,2)^2+rFSDsTemp(3,2)^2-rFSDsTemp(2,2)^2-rFSDsTemp(4,2)^2));%calculatethepartiallynormalisedcoefficients-normalisedfor%startingpointforiHNo=1:HrStarFSDs(1,iHNo)=cos((iHNo-1)*rTheta1)*rFSDsTemp(1,iHNo)+sin((iHNo-1)*rTheta1)*rFSDsTemp(2,iHNo);rStarFSDs(2,iHNo)=-sin((iHNo-1)*rTheta1)*rFSDsTemp(1,iHNo)+cos((iHNo-1)*rTheta1)*rFSDsTemp(2,iHNo);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家用电冰箱制造工保密意识水平考核试卷含答案
- 皮鞋制作工班组管理强化考核试卷含答案
- 皮肤管理师安全规程评优考核试卷含答案
- 普朗克《忧郁》的演奏技巧诠释
- 2025年光纤预制棒项目合作计划书
- 生殖健康咨询师诚信考核试卷含答案
- 2025年无机基础化学原料项目建议书
- 2025年氧系漂白助剂项目发展计划
- 2025年R1快开门式压力容器操作考试题库附答案
- 塔吊理论考试题及答案
- 半导体公司内部管理制度
- 护理事业十五五发展规划(2026-2030)
- 2025循环流化床锅炉水冷壁防磨格栅安装及检验规程
- 自来水安装施工合同4篇
- 输血常识试题及答案
- 省级职业技能大赛2024(高职组)口腔修复工艺赛项规程
- 《生态系统服务评估》课件
- 《系统性红斑狼疮肾炎》课件
- 白象食品测试题及答案
- 食堂满意度测评制度
- 公司管理制度上墙图
评论
0/150
提交评论