BP神经网络识别.docx
《BP神经网络识别.docx》由会员分享,可在线阅读,更多相关《BP神经网络识别.docx(38页珍藏版)》请在冰点文库上搜索。
BP神经网络识别
实用标准文案
2Abstract...3引言:
一...3字符图像获取:
二...4字符预处理三.43.2字符区域…………………………………………………………………………字符区域分割:
...43.2
单个字体分割:
...43.3
单个字体裁剪...53.4
模板字符识别...5四
字符模板归一化...54.2
神经网络字符识别...5五BP.65.1训练样本制作…………………………………………………………………………………6神经网络………………………………………………………………………………5.2设计BP...75.3BP训练...7六识别结果发送下位机...75.1MATLAB下的串口工具:
...75.2下位机处理...95.2.3串口通信图:
...9总结:
七摘要摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度环境下利用USB在MATLAB化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出单个字符,识别方法一是采用模板匹配的方法逐个对字符与预先制作好的字符模板比较,如果结果小于某一阈值则结果对待识别字符进行识别。
最然后将识别结果神经网络训练,通过训练好的net就是模板上的字符;二是采用BP单片机上用液晶显示出来。
MATLAB通过下的串口工具输出51
神经网络,液晶显示倾斜矫正,字符分割,模板匹配,BP关键字:
AbstractIntheMATLABenvironmentusingUSBcameracapturethecharacterimages,savedasanimage
reading,thenreadthesavedcharacterimages,grayscale,binary,onthisbasisdotilt
correction,thecorrectionimagesmoothingfilter,andthenextractthecharacter
regionsegmentationofasinglecharacter,andthenonebyoneusingatemplatematchingmethod
ofcharacterwithgoodcharactertemplateisapre-production,iftheresultislessthanacertain
threshold,theresultisatemplateofthecharacter.Second,theBPneuralnetworktrainedbythe
trainednettoidentifythecharactertowardsrecognitionTheresultswillidentifythemostand
thentheserialportthroughtheMATLABtooloutput51undermicrocontrollerwithLCDdisplay.
Tiltcorrection,charactersegmentation,templatematching,liquidcrystaldisplayKeyword:
引言:
一
然后对图像文件进行分析处理,(OCR,OpticalCharacterRecognition)是指对文本资料进行扫描,光学字符识别,imagecharacterrecognition近几年又出现了图像字符识别30获取文字及版面信息的过程。
已有多年历史,(精彩文档.
实用标准文案
),实际上这三种自动识别技术的基本原理大,)和智能字符识别(intelligentcharacterrecognitionICRICR致相同。
来训SVM关于字符识别的方法有很多种,最简单的就是模板匹配,还有根据采集到的字符用BP神经网络或者环境下编程实现。
练得到结果的方式。
本文主要针对模板匹配的方式,在MATLAB
字符图像获取:
二获取视频帧,并保存图像在工程文件夹内。
摄像头采用普通的下利用imageacquisitiontoolbox在MATLAB下的对视频进行预imageacquisitiontoolboxUSB摄像头,由于这种摄像头拍摄的照片延时比较大,所以先用的视频获取窗口,实验选择640*480采集的图像效果越好则识别率越高。
览,调整出最佳的效果来,根据测试,jpg的存储格式。
空间,获取一帧后保存为颜色空间选取为RGB
精彩文档.
实用标准文案
三字符预处理
3.1字符矫正
由于摄像头拍摄的图像存在一定存在的倾斜度,在分割字符区域时,应先对字符进行矫正。
过程如下:
将通过摄像头获取的保存帧图像灰度化,然后对其进行边缘提取,再在1到180度角内对图像进行旋转,记录下边缘提取后的图像在x轴方向上的投影,当x轴方向上的投影最小的时候即表示图像中字符平行于y轴,已经完成矫正,此时记录下旋转的倾斜角。
然后利用imrotate函数实现对字符图像的矫正。
3.2字符区域分割:
在第三步完成对字符图像的倾斜矫正后,将图像分别做x轴和y轴方向上的投影既可以知道字符区域在x轴上的像素分布范围和y轴上的像素分布范围,然后对根据这个范围对图像做分割,在MATLAB中表示为:
goal=I(ix1:
iy1,jx1:
jy1);
其中goal为分割后的图像,I为分割前的图像,ix1和ix2分别为x轴上投影的像素范围的起始坐标值和终止坐标值,iy1和iy2分别为y轴上投影的像素范围的起始坐标值和终止坐标值。
3.3单个字体分割:
精彩文档.
实用标准文案
轴上的分布区间,然后利用这个在分割得到的字符区域图像上,只需要做y轴上的投影就可以知道每个字符在y分布区间就可以分割出单个字符。
3.4单个字体裁剪轴方向上的投影,轴,y在第五步分割出来的字符基础上进一步对字符的像素区域进行裁剪,原理也是分别做x求的字符的区间再做剪裁。
模板字符识别四4.1字符模板制作:
3-6word上的标准字符,通过截图软件截图后按照模板的要求是与要识别的字符的字体格式一致,实验中采用个字母。
Z共269共10个数字,A到0步的处理过程制作出需要的字符模板,从到
字符模板归一化4.2
在满足识别率的条件下,尽量采用小模板识别可以提神运算速度,具体的模板大小,可以根据后面的与待识别字符的比较中调节。
识别过程:
4.3将待识别字符与字符模板做同样的归一化处理,然后遍历与字符模板比较,处理方法为先和字符模板做差,然后计算做差后的图像的总像素值,如果小于每一个阈值,则表示该待识别字符和该模板是同一个字符,这样就完成了一次识别。
循环对要识别的字符做同样的处理就可以识别出所有的字符,将结果保存在字符串中。
BP神经网络字符识别五为首的科学家小组提出,是一种按误差和McCelland)网络是1986年由RumelhartBP(BackPropagation输-网络能学习和存贮大量的输入逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
BP出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
它的学习规则是使用最速下降法,通过反向传)、input播来不断调整网络的权值和阈值,使网络的误差平方和最小。
BP神经网络模型拓扑结构包括输入层(。
和输出层(outputlayer)隐层(hidelayer)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向BP(BackPropagation)传播两个过程组成。
输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。
当实际输出与期望输出不符时,进入误差的反向传播阶段。
误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。
周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。
网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型。
BP神经网络模型BP
1)节点输出模型(Xi-qj)
(1)
×∑隐节点输出模型:
Oj=f(Wij精彩文档.
实用标准文案
Oj-qk)
(2)Tjk×输出节点输出模型:
Yk=f(∑
q-神经单元阈值。
f-非线形作用函数;
BP网络结构模型图1典型
)作用函数模型(2
Sigmoid内连续取值作用函数是反映下层输入对上层节点刺激脉冲强度的函数又称刺激函数,一般取为(0,1)
)f(x)=1/(1+e)(3函数:
)误差计算模型(3
误差计算模型是反映神经网络期望输出与计算输出之间误差大小的函数:
(tpi-Opi)(4)
×∑Ep=1/2节点计算输出值。
节点的期望输出值;Opi-itpi-i)自学习模型(4
网络有BPWij的设定和误差修正过程。
神经网络的学习过程,即连接下层节点和上层节点之间的权重拒阵只需输入模式之分。
自学习模型为需要设定期望值和无师学习方式-师学习方式-5)Oj+a×△Wij(n)(△Wij(n+1)=h×Фi×a-动量因子。
输出节点j的计算输出;ih-学习因子;Фi-输出节点的计算误差;Oj-
5.1训练样本制作:
在不同分辨率和不同倾斜角度下分别采集几组图片作为训练样本,本实验为了节省计算时间,根据需要只做组。
然5组数据。
不同分辨率下5组,不同倾斜角度下1012345ABCDE这个字符的识别,因此只各采集了10个。
32*32大小的训练样本共100后按照2-4上的操作过程的对字符进行处理,获得
神经网络设计BP5.2轴像素值为输入特征作为输入层的输入;以yx轴利用MATLAB下的神经网络工具设计一个,以字符图像的个,输出层就是预期的结果,共十种可能,所以有输出层有十种输25logsig函数作为隐含层,隐含层设计节点出。
net=newff(pr,[251],{'logsig''purelin'},'traingdx','learngdm');
net.trainParam.epochs=250;%训练步数net.trainParam.goal=0.001;%目标误差10步显示一次训练误差的变化曲线net.trainParam.show=10;%系统每net.trainParam.lr=0.05;%学习速度训练net=train(net,p,t)%savenamenet并保存训练结果
训练5.3BP结果输sim通过函数对字符进行识别,首先对待识别字符预处理,然后读取读取训练好的网络loadnamenet,出,保存在一个字符串内。
识别结果发送下位机六核的单片机,然后在单片机内经过程序处51利用MTLAB下的串口工具发送识别出的结果给下位机,下位机为LM1602理驱动液晶显示结果。
下的串口工具:
5.1MATLAB)具备支持计算机与其它具有串以上版本中新增的设备控制工具条(instrumentcontroltoolboxMatlab6.0在口的外部设备之间的通信的功能。
其特点如下:
精彩文档.
实用标准文案
RS-485)的通信;RS-232、RS-422、a、支持基于串行接口(ASCII)两种方式;b、通信数据支持二进制和文本(c、支持异步通信和同步通信;d、支持基于事件驱动的通信(亦称中断方式)。
5.2下位机处理5.2.1主控电路Intel8031指令系统的单片机的统称。
,51单片机是对目前所有兼容51主控芯片采用基于核的STC12A50S88K)
(ROM)(52为·4kbytes程序存储器·8位CPURAM)有384bytes的·256bytes的数据存储器(RAM)(52
条指令,大部分为单字节指令I/O口线·111·32条个专用寄存器·21
个)52有6计数器·5个中断源,2个优先级(·2个可编程定时/·一个全双工串行通信口
64kB·外部数据存储器寻址空间为
64kB
·外部程序存储器寻址空间为
封装·逻辑操作位寻址功能·双列直插40PinDIP
电源供电·单一+5V
:
由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;CPU
RAM:
用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:
用以存放程序、一些原始数据和表格;
I/O口,既可用作输入,也可用作输出;I/O口:
四个8位并行
/记数器,既可以工作在定时模式,也可以工作在记数模式;T/C:
两个定时
五个中断源的中断控制系统;
口,用于实现单片机之间或单片机与微机之间的串行I/O(通用异步接收发送器)的串行一个全双工UART
通信;。
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M
液晶显示电路5.2.2
液晶模60232个字符。
字符型液晶,它是工业字符型液晶,能够同时显示实验中显示模板采用160216x02即个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文160CGROM)已经存储了块内部的字符发生存储器(”的代A字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”。
41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“01000001B码是(在单片机编程中还可以用字符型常量或变量赋值,ASCII码直接赋值,ASCII码,试验可以用因为1602识别的是'。
如'A串口通信图:
5.2.3
电平,实验中使用美信公司的RS232PC机通信是需要采用转换为由于单片机的串口输出为TTL电平,与+5v单电源供电。
RS-232标准串口设计的单电源电平转换芯片,使用MAX232芯片。
它是美信公司专门为电脑的
总结:
七
神经网络摄像头的视频帧图像采集,并对采集图像进行了数字图像处理,采用模板匹配和BPusb本实验完成了下的串口工具和下位机单片机通信,发送识别结果显示在字符液MATLAB训练的方式对字符进行识别,并利用晶上。
如果图像采集的分辨率过低的话会出现字符断裂的情况,对图像字符进行分割的时候,一是,试验中存在的问题:
这时候要做的就是对字符进行连通域检测。
二是在做本实验的程序都是针对特定字符进行处理的,没有做自适应精彩文档.
实用标准文案
训练样本数太少,所以训练后的网络对字符的识别结果并不好。
这些都需要后续的改的字符个数检测。
三是BP进。
八参考文献:
2002
北京工业大学.基于神经网络的手写体字符识别[1]王鹏北京理工大学信息科学技术学院BP神经网络算法的车牌字符识别基于PCA和.[2]闫雪梅,王晓华,夏兴高2007
2006浙江大学博士论文[3]金城二维图像特征研究[4]MATLAB2010Rimageprocessingtools
附录:
MATLAB程序:
一、模板匹配:
模板字符识别%%%%%%%%%%%%%%%%%1.0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%朱本福imageacquisitiontoolboxMATLAB中通过利用usb摄像头在%在读取图片进行处理,采用模板匹配的%获取一帧图片并保存为ocr.jpg方式进行识别,模板为根据操作制作的,最后将结果通过串口发送出去显示在单片机上%下开发%MATLAB2010%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clearall;
closeall;
vid=videoinput('winvideo',1,'YUY2_640x480');%视频获取字符图像src=getselectedsource(vid);
vid.FramesPerTrigger=1;
preview(vid);%预览start(vid);
vid.ReturnedColorspace='rgb';
vid.FramesPerTrigger=1;
imaqmem(10000000);
获取一帧frame=getsnapshot(vid);%figure
(1);
imshow(frame)
imwrite(frame,'ocr.jpg','jpg');%保存该帧图片stop(vid);
delete(vid);
读取测试图片I=imread('ocr.jpg');%[m,n,z]=size(I)
精彩文档.
实用标准文案
figure
(1);
')测试图片imshow(I);title('I1=rgb2gray(I);
保存二值化图像imwrite(I1,'I1.jpg');%
figure
(2);
显示二值化图像imshow(I1);%%figure(3);
%imhist(I1);
Ic=imcomplement(I1);%取反imwrite(Ic,'Ic.jpg');
figure(33);imshow(Ic);
BW=im2bw(Ic,graythresh(Ic));%二值化imwrite(BW,'BW.jpg');
figure(5),imshow(BW);
边缘提取bw=edge(I1,'prewitt');%imwrite(bw,'bw.jpg');
figure(32);imshow(bw);
theta=1:
180;
[R,xp]=radon(bw,theta);
记录了倾斜角[I0,J]=find(R>=max(max(R)));%Jqingxiejiao=90-J
goal1=imrotate(BW,qingxiejiao,'bilinear','crop');
imwrite(goal1,'goal1.jpg');
figure,imshow(I1);title('correctimage');
中值滤波%goal3=medfilt2(goal1,[3,3]);
figure(19),imshow(goal3);
goal3=medfilt2(goal3,[3,3]);
imwrite(goal3,'goal3.jpg');
figure(19),imshow(goal3);
X求解方向的投影像素范围%[ix1,iy1]=xfenge(goal1)
精彩文档.
实用标准文案
y方向的投影像素范围%求解[jx1,jy1]=yfenge(goal1)
%字符区域分割:
goal4=goal3(ix1:
iy1,jx1:
jy1);
imwrite(goal4,'goal4.jpg');
figure(21);imshow(goal4);
[m,n]=size(goal4)
1,2,3,4区域标记,%[L,num]=bwlabel(goal4,8);%
ysum(n-1)=0;
fory=1:
n-1
ysum(y)=sum(goal4(:
y));
end
%y=1:
n-1;
%figure(12)
方向上的像素分布画出y%plot(y,ysum)%
y轴交点就是单个字符在轴上分布的区间找出ysum分布的几个与y%i=1;j=1;
fory=1:
n-2
if(ysum(y)==0)&(ysum(y+1)~=0)
yy(i)=y
i=i+1;
end
if(ysum(y)~=0)&(ysum(y+1)==0)
yx(j)=y
j=j+1;
end
end
求出字符的分布并分割[m_yy,n_yy]=size(yy);%的个数及分布区间,选择分割区间和n_yx根据ifn_yy==3%n_yy%segment
1num1=goal4(1:
m,1:
yx
(1));%分割出字符figure(23);imshow(num1);
2num2=goal4(1:
m,yy
(1):
yx
(2));%分割出字符figure(24);imshow(num2);
精彩文档.
实用标准文案
3分割出字符num3=goal4(1:
m,yy
(2):
yx(3));%figure(25);imshow(num3);
4yy(3):
n);%分割出字符num4=goal4(1:
m,
figure(26);imshow(num4);
%[m1,n1]=size(num1)%求出各个字符的大小%[m2,n2]=size(num2)
%[m3,n3]=size(num3)
%[m4,n4]=size(num4)
轴上进行分割%对单个字符细分,避免字体出现大小不一致的情况,也就是再在x[ix1,iy1]=xfenge(num1)
[ix2,iy2]=xfenge(num2)
[ix3,iy3]=xfenge(num3)
[ix4,iy4]=xfenge(num4)
num1=goal4(ix1:
iy1,1:
yx
(1));
figure(23);imshow(num1);
num2=goal4(ix2:
iy2,yy
(1):
yx
(2));
figure(24);imshow(num2);
yy
(2):
yx(3));num3=goal4(ix3:
iy3,
figure(25);imshow(num3);
yy(3):
n);num4=goal4(ix4:
iy4,
figure(26);imshow(num4);
imwrite(num1,'nnum1.bmp');
imwrite(num2,'nnum2.bmp');
imwrite(num3,'nnum3.bmp');
imwrite(num4,'nnum4.bmp');
end
的个数及分布区间,选择分割区间n_yy和n_yx根据ifn_yy==4%%segment
num1=goal4(1:
m,yy
(1):
yx
(1));
精彩文档.
实用标准文案
figure(23);imshow(num1);
num2=goal4(1:
m,yy(2