实验七基于神经网络的模式识别实验推荐文档.docx

上传人:b****3 文档编号:4940167 上传时间:2022-12-11 格式:DOCX 页数:13 大小:59.28KB
下载 相关 举报
实验七基于神经网络的模式识别实验推荐文档.docx_第1页
第1页 / 共13页
实验七基于神经网络的模式识别实验推荐文档.docx_第2页
第2页 / 共13页
实验七基于神经网络的模式识别实验推荐文档.docx_第3页
第3页 / 共13页
实验七基于神经网络的模式识别实验推荐文档.docx_第4页
第4页 / 共13页
实验七基于神经网络的模式识别实验推荐文档.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验七基于神经网络的模式识别实验推荐文档.docx

《实验七基于神经网络的模式识别实验推荐文档.docx》由会员分享,可在线阅读,更多相关《实验七基于神经网络的模式识别实验推荐文档.docx(13页珍藏版)》请在冰豆网上搜索。

实验七基于神经网络的模式识别实验推荐文档.docx

实验七基于神经网络的模式识别实验推荐文档

实验七:

基于神经网络的模式识别实验

一、实验目的

理解BP神经网络和离散Hopfield神经网络的结构和原理,掌握反向传播学习算法对神经元的训练过程,了解反向传播公式。

通过构建BP网络和离散Hopfield网络模式识别实例,熟悉前馈网络和反馈网络的原理及结构。

综合掌握模式识别的原理,了解识别过程的程序设计方法。

二、实验内容

熟悉模式识别的理论方法,用选择一种合适的识别方法,对图像中的字符(英文字母)进行识别,能够区分出不同的形态的26个字母。

在Matlab中,采用BP神经网络,对读取的数据进行训练,进而识别。

1.程序设计

(1)程序各流程图

实验中主程序流程图如图4-1所示:

 

图4-1主程序流程图

其中图像预处理的流程如图4-2所示:

 

图4-2图像预处理的流程

神经网络训练的具体流程如图4-3所示:

 

图4-3神经网络训练流程

(2)程序清单

%形成用户界面

clearall;

%添加图形窗口

H=figure('Color',[0.850.850.85],...

'position',[400300500400],...

'Name','基于BP神经网络的英文字母识别',...

'NumberTitle','off',...

'MenuBar','none');

%画坐标轴对象,显示原始图像

h0=axes('position',[0.10.60.30.3]);

%添加图像打开按钮

h1=uicontrol(H,'Style','push',...

'Position',[401008060],...

'String','选择图片',...

'FontSize',10,...

'Call','op');

%画坐标轴对象,显示经过预处理之后的图像

h2=axes('position',[0.50.60.30.3]);

%添加预处理按钮

h3=uicontrol(H,'Style','push',...

'Position',[1401008060],...

'String','二值化',...

'FontSize',10,...

'Call','preprocess');

%添加识别按钮

h4=uicontrol(H,'Style','push',...

'Position',[2401008060],...

'String','字母识别',...

'FontSize',10,...

'Call','recognize');

%添加显示识别结果的文本框

%添加训练神经网络按钮

h6=uicontrol(H,'Style','push',...

'Position',[3401008060],...

'String','网络训练',...

'FontSize',10,...

'Call','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:

imax,jmin:

jmax);%截取

%调整比例,缩放成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:

i1+i,j1+1:

j1+j)=bw1;

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

%形成目标向量

forkk=0:

M-1

forii=0:

25

t(kk+ii+1)=ii;

end

end

%设置输入向量范围

pr(1:

256,1)=0;

pr(1:

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('Color',[0.750.750.75],...

'position',[200200400200],...

'Name','基于BP神经网络的英文字母识别结果',...

'NumberTitle','off',...

'MenuBar','none');

M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','请先训练网络',...

'FontSize',12,...

'call','delete(M

(1))');

form=0:

15

q(m*16+1:

(m+1)*16,1)=p1(1:

16,m+1);

end

%识别

[a,Pf,Af]=sim(net,q);

a=round(a);

switcha

case0,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是A',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case1,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是B',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case2,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是C',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case3,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是D',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case4,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是E',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case5,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是F',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case6,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是G',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case7,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是H',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case8,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是I',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case9,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是J',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case10,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是K',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case11,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是L',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case12,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是M',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case13,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是N',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case14,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是O',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case15,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是P',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case16,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是Q',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case17,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是R',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case18,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是S',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case19,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是T',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case20,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是U',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case21,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是V',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case22,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是W',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case23,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是X',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case24,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是Y',...

'FontSize',12,...

'call',...

'delete(M

(1))');

case25,M0=uicontrol(M,'Style','push',...

'Position',[1508013040],...

'String','这个字母是Z',...

'FontSize',12,...

'call',...

'delete(M

(1))');

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网络模式识别的实例,熟悉了前馈网络和反馈网络的原理及结构。

掌握了模式识别的原理,了解了识别过程的程序设计方法。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1