图像识别与处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

研究生课程论文(作业)封面(2015至2016学年度第1学期)课程名称:图像识别与处理技术课程编号:211320学生姓名:潘琪学号:140710611年级:2014级任课教师:吴秋峰提交日期:2016年1月20日成绩:__________________教师签字:__________________开课---结课:第周---第周评阅日期:年月日东北农业大学研究生院制利用神经网络进行数字识别的方法探索摘要:本文介绍了一种利用BP神经网络进行印刷体数字像识别的方法。利用MATLAB软件提取图像里的数字信息,进行灰度处理和二值化处理,作为输入建立一个BP神经网络,并对其进行测试。最终可对特定大小的数字图像进行识别。关键词:BP神经网络,灰度,特征值Abstract:ThispaperintroducesamethodofusingBPneuralnetworktocarryoutthedigitalimagerecognitionoftheprintedbody.UsingMATLABsoftwaretoextractdigitalinformationfromtheimage,thegrayprocessingandbinarizationprocessing,asaninputtobuildaBPneuralnetwork,andtotestits.Finally,thespecificsizeofthedigitalimagecanbedistinguished.Keywords:BPneuralnetwork,graylevel,characteristicvalue1BP神经网络的基本原理和学习算法1.1BP神经网络处理信息的基本原理自然神经系统是由结构上相对独立的神经细胞构成的,这些细胞被称为神经元。单个神经元完成相对比较简单的功能,然而神经元之间的广泛连接、复杂结构使得神经系统具有高级智能活动的能力。基于这种认识,人们提出了多种人工神经网络的模型从不同角度来模拟自然神经。一个神经网络的模型主要由神经元的计算特性、网络的结构、连接权值的学习规则三方面要素来决定。BP神经网络采用并行网络结构,包括输入层、隐层和输出层,经过作用函数后,把隐含层节点的输出信号传递到输出节点,最后给出输出结果。输入信号iX通过隐层点作用于输出节点,经过非线性变换,产生输出信号kY,网络训练的每个样本包括输入向量X和期望输出量t,网络输出值Y与期望输出值t之间的偏差,通过调整输入节点与隐层节点的联接强度取值ijW和隐层节点与输出节点之间的联接强度jkT以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的权值和阈值后停止训练。经过训练后的网络能对类似样本的输入信息自行处理,输出经过非线性转换的误差最小的信息。1.2BP神经网络的学习算法基本BP学习算法包括信号的前向传播和误差的反向传播两个方面,根据从出入到输出方向得到的输出值,从输出到输入方向进行权值和阈值的调整。BP神经网络结构如图所示。其中:jx表示输入层第j个输入节点,Mj,,2,1;ijw表示第j个输入节点到第i个隐层节点之间的权值,qi,,2,1;i表示第i个隐层节点的阈值;)(x表示隐层的激励函数;kiw表示第i个隐层节点到第k个输出节点之间的权值,Lk,,2,1;ka表示第k个输出节点的阈值;)(x表示输出层的激励函数;ko表示第k个输出节点的输出。信号的前向传播:第i个隐层节点的输入inet:Mjijijixwnet1第i个隐层节点的输出iy:)()(1Mjijijiixwnety第k个输出层节点的输入knet:qikMjijijkiqikikikaxwwaywnet111)(第k个输出层节点的输出ko:qikMjijijkiqikikikkaxwwaywneto111)()()(误差的反向传播:首先由输出层开始逐层计算各层神经元的输出误差,然后根据误差梯度下降法来调节各层的权值和阈值,使修改后的网络的最终输出接近期望值。每一个样本p的二次型误差准则函数为pE:LkkkpoTE12)(21kT为第k个输出层的期望输出。系统对P个训练样本的总误差准则函数为:PpLkpkpkoTE112)(21根据误差梯度下降法依次求出输出层权值的修正量kiw,输出层阈值的修正量ka,隐含层权值的修正量ijw,隐含层阈值的修正量i:输出层权值修正量:kikkkkkikkkikiwnetnetooEwnetnetEwEw输出层阈值修正量:kkkkkkkkkkanetnetooEanetnetEaEa隐层权值修正量:ijkkkkijkkijijwnetnetooEwnetnetEwEw隐层阈值修正量:ikkkkikkiinetnetooEnetnetEE其中为学习率。又因为:PpLkpkpkkoToE11)(ikikywnet,1kkanet,jijixwnet,1iinetkikpkpkiwnetoTyE)()()(iiinetnety)(kkknetneto整理后可以得到:PpLkikpkpkkiynetoTw11)()(PpLkkpkpkknetoTa11)()(PpLkikikpkpkinetwnetoT11)()()(jikikPpLkpkpkijxnetwnetoTw)()()(11假设第n次学习时网络的权值和阈值分别为)(nwki,)(nak,)(nwij,)(ni,则经过调整后第1n次学习时网络的权值和阈值应为:kikikiwnwnw)()1(;kkkanana)()1(ijijijwnwnw)()1(;iiinn)()1(2数字识别用神经网络进行数字识别首先利用MATLAB软件对数字图像进行处理,将数字图像转化为可以进行处理的矩阵,构建一个BP神经网络,将这些矩阵作为神经网络的输入,其所对应的数作为网络的输出,即可实现数字识别的功能。数字识别首先要对图片进行预处理,对较大的图片还要进行特征值提取,较小的图片也可将处理后的数据直接作为网络的输入,最后利用BP神经网络对输入进行分类得到不同的输出。2.1图像的预处理由于我们得到的图片一般为RGB格式,MATLAB读取后为3nm的矩阵,其中nm为图片的像素值,是3层取值范围为0~255的nm矩阵的叠加。我们可以利用“rgb2gray”函数将其转化为灰度矩阵作为输入,灰度矩阵是取值范围为0~255的nm矩阵。为了更容易处理,我们可以进一步利用“im2bw”函数将灰度图像转化为只包含“0”和“1”的二值图像,以二值矩阵作为输入,利用神经网络进行学习训练后输出。本文采用3组图像作为训练样本,每组图像是包含0~9的10个图片,每个图片像素大小都为3232,如果采集的数字图像大小不是3232,可以利用“imresize”函数对其进行处理。三组图像分别用新罗马字体、仿宋体、华文新魂输入,采用png格式保存,如图所示。将原始图像转化为灰度图像和二值图像,主程序如下:I=imread('xxx.png');%读取文件名为xxx的png图片gray=rgb2gray(I);%将rgb图像转化为灰度图像gray=imresize(gray,[32,32]);%将图像大小标准化为32*32bw=im2bw(gray,0.5);%将灰度图像转化为二值图像对每个图片执行上述命令即可得到每个图像的灰度矩阵和二值矩阵,我们以第二组图像中的4为例,执行命令后的结果如下图所示:其中第一个为原图像,第二个为灰度图像,第三个为二值图像。我们可以看出,原图像和灰度值图像的边缘部分分界不明显,而二值图像有明显的边界。这是因为原图像和灰度图像是用0~255这256个数来表示亮度,数值越大亮度越高,因此边界存在过渡色。而二值图像是用“0”和“1”来表示亮度,空白处为1,黑处为0,并且在程序中设定的是以灰度值的中点为分界点,当灰度值小于最大值的一半时取0,大于最大值的一半时取1。经过处理后我们可以得到两个3232的灰度矩阵和二值矩阵。2.2特征值提取图像经二值化处理后大小并没有改变,当图像像素太大时输入量就太多,本例中每个图片就需要10243232个输入。我们可以对每个图片提特征值,这样就可以减少神经网络的输入,提高学习效率。我们可以将原矩阵横向分为8份,纵向分为8份,构成一个88矩阵,输入就减少为64个。这样矩阵的每个位置相当于原矩阵的44小块,可以将每个小块中0的个数作为新矩阵的值,即表示每个位置黑色块的多少。提取特征值的算法如下(已经得到二值矩阵bw):fori=1:1:8a=(i-1)*4+1;c=a;d=a+4;forj=1:1:8b=(j-1)*4+1;e=b;f=b+4;g=0;forh=c:1:d-1fork=e:1:f-1ifbw(h,k)==0g=g+1;endendendx(i,j)=g;endend任然接上例,我们对4的二值矩阵进行特征值提取,运行结果如下图:可以得到其特征值矩阵x:0000000000187000000440000017745000044400000462000004700000010000x以此作为BP神经网络的输入,输出为4。以此类推,对每个图片执行上述命令后就可以得到30个用特征值矩阵表示的训练样本。3数字识别对图像进行预处理和特征值提取后,我们就得到了所需的训练样本,可以构建神经网络进行训练仿真。这里采用“newff”函数构建两层BP神经网络,隐含层包含16个神经元,采用双曲正切函数“tansig”;输出层有1个神经元,采用线性函数“purelin”;训练函数采用“trainrp”。如果将二值函数直接作为输入,则网络有1024个输入,1个输出;若以特征值矩阵作为输入,则网络有64个输入,一个输出。在进行训练前,最好利用“reshape”函数将输入矩阵构造成1n的列矩阵以便于网络输入,调用格式为:“xx=reshape(x,n,1)”,其中xx为新矩阵,x为原矩阵,n为输入神经元的个数。在这里我们直接采用二值矩阵作为输入,建立网络的主程序如下:P=[p11,p21,p31,p41,p51,p61,p71,p81,p91,p101,p12,p22,p32,p42,p52,p62,p72,p82,p92,p102,p13,p23,p33,p43,p53,p63,p73,p83,p93,p103];t=[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0];net=newff(P,t,16,{'tansig','purelin'},'trainrp');net=initnw(net,2);其中p11到p103分别为各个图片转化为列矩阵后的二值矩阵,t为每个图片对应的输出值。因为使用“newff”函数建立函数网络时,权值和阈值的初始化是随机的,所以要根据经验调整输出层权值和阈值。应用“train”函数对网络进行训练之前,需要预先设置网络训练参数。将训练步数设置为200,训练精度设置为0.001,两次显示之间的训练步数为15,动量项因子为0.9,性能函数为均方误差性能函数,程序如下:net.trainParam.epochs=200;net.performFcn='sse';net.trainParam.goal

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功