DIP课程设计报告文档格式.doc
《DIP课程设计报告文档格式.doc》由会员分享,可在线阅读,更多相关《DIP课程设计报告文档格式.doc(9页珍藏版)》请在冰点文库上搜索。
具体的生理学上的定义本文不再展开赘述。
2.3BP神经网络
神经网络的应用已经渗透到各个领域中,包括金融、股票预测,自动控制,
机器人,模式识别,计算机视觉和图像处理,信号处理等等,T,J,Sejnowiski,C,R,Rosenberg”ParalleNetwoeksthatLearntoPronounceEnglishTest”,ComplexSystems,1987:
1145-168
陈明,赵瑞清.BP神经网络的比例训练.计算机学报,1993(8)
靳蕃,范俊波,谭永东。
神经网络与神经计算机.西南交大,1991
庄镇泉,王煦法,王东生.神经网络与神经计算机.北京:
科学出版社,1992
6:
毛群.王少飞.基于matlab的神经网络数字识别系统实现.中国西部科技.2010(09).
7:
施少敏.马彦恒.陈建泗.基于BP网络的数字识别方法.兵工自动化.2006.25.10
8:
朱曼丽.孙志锋.孙志林.一种基于神经网络的数字识别方法.计算机工程与应用.2002.12
9:
乔宝明张晓莉高志才基于matlab识别0-9数字图像的新方法.技术与创新管理.2009.3
10:
许捍卫.王成.一种简单的数字识别方法研究.河海大学测量工程系
其中软件模拟的BP网络是应用最多、最成功的网络。
本次课程设计是基于BP神经网络对手写阿拉伯数字进行识别,故下文介绍关于BP神经网络的概念。
2.3.1BP神经网络的概念
BP(BackPropagation)网络又叫误差反向传播网络,是由美国加利福尼亚大学的PDP小组提出的一种神经网络算法,实现了Minsky和Papert认为不能实现的多层网络的设想。
BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。
正向传播时,输入样本从输入层传入,经各隐藏层逐层处理后,传向输出层。
若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。
误差反传是将输出误差以某种形式通过隐藏层向输入层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。
这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。
权值不断调整的过程,也就是网络的学习训练过程。
此过程一直进行到网络输出的误差减少到可接受到的程度,或进行到预先设定的学习次数为此。
BP网络的基本结构如图1所示,网络由不同层次的节点集合组成,每一层节点的输出送到下一层节点。
这些输出值由于连接权不同而被放大、衰减或抑制。
除了输入层外,每一节点的输入为前一节点输出值的加权和。
每一节点的激励输出值由节点输入、激励函数及闭值决定。
图1:
BP网络模型
BP网络的学习算法使用梯度搜索技术,以期望网络的实际输出与期望输出的均方差最小。
网络的学习是一种在误差反向转播的同时修正的过程。
学习过程应包括两个阶段:
前向计算阶段和反向调整阶段
2.4图像分割:
对二值化后的图像进行分割处理,本课程设计采用基于字符连通域的分割。
由于对数字的书写有一定要求,两个字符之间不能出现连笔的情况,因此可以对二值图像各个分离部分进行标注来分割字符,用函数bwlabel来实现。
用函数regionprops来度量图像区域属性,包括属性BoundingBox(表示各标注区域的最小矩形)和Centroid(表示各区域的质心)。
通过对各个区域标注及各个区域起点坐标和区域范围(包括宽度和高度)的确定来截取字符,所用函数为imcrop,最后调用函数imresize对图像进行归一化处理。
2.5特征提取
通过粗网格方法来提取特征。
首先对分割后的字符归一化为70×
50的点阵,然后将此矩阵等分为7×
5的网格,接着依次统计每一个网格内黑像素点(即“1”)的个数,得到一个以数字表示的7×
5维的网格特征,将7×
5维特征矩阵转变为一维特征,最后对其进行归一化操作。
3、实验结果与分析
3.1课程设计的结构及流程
基于BP神经网络的手写体数字识别系统大致可以分为输入、预处理、特征提取、BP神经网络识别4个部分。
输入包括数字样本集扫描输入和待识别数字输入,先用数字样本集扫描输入图像经预处理后特征提取的特征向量来训练神经网络,再用训练好的神经网络来识别待识别数字。
预处理部分包括二值化、平滑、去噪、细化,再对预处理后二值点阵图像进行特征提取。
最后将所提取的特征量输入训练好的神经网络进行识别,输出识别结果。
基于BP神经网络的手写体数字识别系统的结构及流程如图2所示。
开始读入需要识别数字的图像
将图像转化为灰度图像
将灰度图像转化为二值图像
图像分割
预处理模块
特征提取
进行数字的识别和比对
图2:
手写阿拉伯数字识别系统的流程图
3.2预处理模块
由于扫描输入的图像一般为RGB格式,预处理首先需要将其转化为二值化的图像,即只包含“0”、“1”的矩阵形式。
先将原始图像转化为灰度图像,通过函数rgb2gray来实现,再通过函数im2bw转化为二值图像,然后对二值化后的图像进行分割处理,
3.3数字的识别和比对
采用三层BP神经网络来实现。
通过实验测试设定隐含层神经元数目为10,所以只需分类10个数字,设定输出层神经元数目为10。
隐含层神经元的传递函数采用S型对数函数logsig,输出层神经元传递函数也采用S型对数函数logsig,此神经网络的训练函数采用trainlm,性能函数采用sse,训练步数最长设为5000,性能目标设为0.01。
3.4实验结果
图3:
GUI界面及实验结果
图4:
导入具体需要进行识别的图像
图5:
对需要识别的数字进行选择和裁剪图6:
对需要识别的手写阿拉伯数字进行预处理
3.4.1预处理模块的部分源代码:
functionimg=edu_imgpreprocess(I)
Igray=rgb2gray(I);
Ibw=im2bw(Igray,graythresh(Igray));
%将图像转化为二值图像
Iedge=edge(uint8(Ibw));
se=strel('
square'
3);
Iedge2=imdilate(Iedge,se);
Ifill=imfill(Iedge2,'
holes'
);
[Ilabelnum]=bwlabel(Ifill);
Iprops=regionprops(Ilabel);
Ibox=[Iprops.BoundingBox];
Ibox=reshape(Ibox,[450]);
Ic=[Iprops.Centroid];
Ic=reshape(Ic,[250]);
Ic=Ic'
;
Ic(:
3)=(mean(Ic.^2,2)).^(1/2);
4)=1:
50;
Ic2=sortrows(Ic,2);
forcnt=1:
5
Ic2((cnt-1)*10+1:
cnt*10,:
)=sortrows(Ic2((cnt-1)*10+1:
),4);
end
Ic3=Ic2(:
1:
2);
ind=Ic2(:
4);
50
img{cnt}=imcrop(Ibw,Ibox(:
ind(cnt)));
end
functionbw2=edu_imgcrop(bw)
%找到图像的边界
[y2tempx2temp]=size(bw);
x1=1;
y1=1;
x2=x2temp;
y2=y2temp;
%找出最左边的空格(Findingleftsideblankspaces)
cntB=1;
while(sum(bw(:
cntB))==y2temp)
x1=x1+1;
cntB=cntB+1;
%找出最右边的空格(Findingrightsideblankspaces)
while(sum(bw(cntB,:
))==x2temp)
y1=y1+1;
%找出最上边的空格(Findinguppersideblankspaces)
cntB=x2temp;
x2=x2-1;
cntB=cntB-1;
%找出最下边的空格(Findinglowersideblankspaces)
cntB=y2temp;
y2=y2-1;
%对图像进行裁剪(Croptheimagetotheedge)
bw2=imcrop(bw,[x1,y1,(x2-x1),(y2-y1)]);
图7:
对需要识别的手写阿拉伯数字进行特征提取
3.4.2特征提取的源代码
functionlett=edu_imgresize(bw2)
%Thisfunctionwilltakethecroppedbinaryimageandchangeitto5x7
%characterrepresentationinsinglevector.
bw_7050=imresize(bw2,[70,50]);
%重新定义尺寸
%粗网格的特征提取方法
forcnt=1:
7
forcnt2=1:
Atemp=sum(bw_7050((cnt*10-9:
cnt*10),(cnt2*10-9:
cnt2*10)));
lett((cnt-1)*5+cnt2)=sum(Atemp);
end
lett=((100-lett)/100);
%特征向量的归一化
lett=lett'
3.4.3:
识别模块的源代码
functionnet=edu_createnn(P,T)%创建神经网络
alphabet=P;
targets=T;
[R,Q]=size(alphabet);
[S2,Q]=size(targets);
S1=10;
S2=10;
net=newff(minmax(alphabet),[S1S2],{'
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.01;
net.trainParam.show=20;
net.trainParam.epochs=5000;
net.trainParam.mc=0.95;
P=alphabet;
T=targets;
[net,tr]=train(net,P,T);
3.5实验结果的分析
在本次课程实验中我对0到9这10个手写的数字进行识别,在实验过程中,发现该系统没办法达到百分之百的准确率,进行多次程序的调试这个问题仍然没办法得到改进。
例如该系统有时会将8识别为1,将7识别为3,或者将7识别为2,但是对于4,5这两个数,识别的准确率能达到百分之百。
5、课程设计总结与体会
通过本次的课程设计使得我对手写阿拉伯数字识别系统的设计和运行有了深入的了解,也使得我对数字图像处理这个课程有了深入的探索。
在整个设计过程中,我认为最重要的是要有整体规划的思想,先对课题进行需求的分析,分成几个模块进行设计和编程,最后设计一个GUI界面将各个模块整合到一个系统中,完成课程设计题目的要求。
在这个过程中我深化了课本所学习到的理论知识,也通过在网上查询资料和文献学习到了课本以外的知识,这开拓了我的见识。
在老师的指导下我通过对代码进行分析提高了编程能力,但是涉及一些比较细致的参数设置还没有深入地研究过,有待提高。
6、参考文献