实验七基于神经网络的模式识别实验Word下载.docx
《实验七基于神经网络的模式识别实验Word下载.docx》由会员分享,可在线阅读,更多相关《实验七基于神经网络的模式识别实验Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
,[0.850.850.85],...
'
position'
[400300500400],...
Name'
'
基于BP神经网络的英文字母识别'
...
NumberTitle'
off'
MenuBar'
none'
);
%画坐标轴对象,显示原始图像
h0=axes('
[0.10.60.30.3]);
%添加图像打开按钮
h1=uicontrol(H,'
Style'
push'
Position'
[401008060],...
String'
选择图片'
FontSize'
10,...
Call'
op'
%画坐标轴对象,显示经过预处理之后的图像
h2=axes('
[0.50.60.30.3]);
%添加预处理按钮
h3=uicontrol(H,'
[1401008060],...
二值化'
preprocess'
%添加识别按钮
h4=uicontrol(H,'
[2401008060],...
字母识别'
recognize'
%添加显示识别结果的文本框
%添加训练神经网络按钮
h6=uicontrol(H,'
[3401008060],...
网络训练'
'
Example1Tr'
%预处理
%preprocess
p1=ones(16,16);
bw=im2bw(X,0.5);
%转换成二值图像
%用矩形框截取图像
[i,j]=find(bw==0);
imin=min(i);
imax=max(i);
jmin=min(j);
jmax=max(j);
bw1=bw(imin:
imax,jmin:
jmax);
%调整比例,变换成16*16图像
rate=16/max(size(bw1));
bw1=imresize(bw1,rate);
[i,j]=size(bw1);
i1=round((16-i)/2);
j1=round((16-j)/2);
p1(i1+1:
i1+i,j1+1:
j1+j)=bw1;
p1=-1.*p1+ones(16,16);
%显示预处理的结果
axes(h2);
imshow(p1);
%Example1Tr,训练网络
M=1;
%人数
N=26*M;
%样本数
%获取26个大写字母图像的数据
forkk=0:
N-1
p1=ones(16,16);
%初始化16*16的二值图像(全白)
m=strcat(int2str(kk),'
.bmp'
%形成文件名
x=imread(m,'
bmp'
%读取图像
bw=im2bw(x,0.5);
%转换成二值图像数据
%用矩形框截取
[i,j]=find(bw==0);
%查找像素为黑的坐标
%取边界坐标
imin=min(i);
imax=max(i);
jmin=min(j);
jmax=max(j);
bw1=bw(imin:
%截取
%调整比例,缩放成16*16的图像
rate=16/max(size(bw1));
bw1=imresize(bw1,rate);
%会存在转换误差
%将bw1转换成标准的16*16图像p1
[i,j]=size(bw1);
i1=round((16-i)/2);
j1=round((16-j)/2);
p1(i1+1:
p1=-1.*p1+ones(16,16);
%将p1转换成输入向量
form=0:
15
p(m*16+1:
(m+1)*16,kk+1)=p1(1:
16,m+1);
end
end
%形成目标向量
M-1
forii=0:
25
t(kk+ii+1)=ii;
%设置输入向量范围
pr(1:
256,1)=0;
256,2)=1;
%创建两层BP神经网络,隐层有25个节点
net=newff(pr,[251],{'
logsig'
purelin'
},'
traingdx'
learngdm'
net.trainParam.epochs=2500;
net.trainParam.goal=0.001;
net.trainParam.show=10;
net.trainParam.lr=0.05;
%训练神经网络
net=train(net,p,t);
%存储训练好的神经网络
%recognize,字符识别
%生成向量形式
M=figure('
[0.750.750.75],...
[200200400200],...
基于BP神经网络的英文字母识别结果'
M0=uicontrol(M,'
[1508013040],...
请先训练网络'
12,...
call'
delete(M
(1))'
);
form=0:
q(m*16+1:
(m+1)*16,1)=p1(1:
%识别
[a,Pf,Af]=sim(net,q);
a=round(a);
switcha
case0,M0=uicontrol(M,'
这个字母是A'
delete(M
(1))'
case1,M0=uicontrol(M,'
这个字母是B'
case2,M0=uicontrol(M,'
这个字母是C'
case3,M0=uicontrol(M,'
这个字母是D'
case4,M0=uicontrol(M,'
这个字母是E'
case5,M0=uicontrol(M,'
这个字母是F'
case6,M0=uicontrol(M,'
这个字母是G'
case7,M0=uicontrol(M,'
这个字母是H'
case8,M0=uicontrol(M,'
这个字母是I'
case9,M0=uicontrol(M,'
这个字母是J'
case10,M0=uicontrol(M,'
这个字母是K'
case11,M0=uicontrol(M,'
这个字母是L'
case12,M0=uicontrol(M,'
这个字母是M'
case13,M0=uicontrol(M,'
这个字母是N'
case14,M0=uicontrol(M,'
这个字母是O'
case15,M0=uicontrol(M,'
这个字母是P'
case16,M0=uicontrol(M,'
这个字母是Q'
case17,M0=uicontrol(M,'
这个字母是R'
case18,M0=uicontrol(M,'
这个字母是S'
case19,M0=uicontrol(M,'
这个字母是T'
case20,M0=uicontrol(M,'
这个字母是U'
case21,M0=uicontrol(M,'
这个字母是V'
case22,M0=uicontrol(M,'
这个字母是W'
case23,M0=uicontrol(M,'
这个字母是X'
case24,M0=uicontrol(M,'
这个字母是Y'
case25,M0=uicontrol(M,'
这个字母是Z'
End
%op
%读取图像文件
[filename,pathname]=uigetfile({'
*.bmp'
;
*.jpg'
...
*.gif'
*.*'
},...
PickanImageFile'
X=imread([pathname,filename]);
%显示图像
axes(h0);
%将h0设置为当前坐标轴句柄
imshow(X);
%在h0上显示原始图像
2.实验结果
图5-1为实验的主窗口,用于选择图片,进行二值化,网络训练和字符识别。
运行程序后,将弹出次窗口,选择图片后,先进行二值化处理,然后在进行网络训练,最后字符识别。
图5-1主窗口
图5-2网络训练
图5-3字符识别结果
三、实验体会
理解了BP神经网络和离散Hopfield神经网络的结构和原理,掌握了反向传播学习算法对神经元的训练过程,了解了反向传播公式。
通过构建了BP网络和离散Hopfield网络模式识别的实例,熟悉了前馈网络和反馈网络的原理及结构。
掌握了模式识别的原理,了解了识别过程的程序设计方法。