基于人工神经网络的MATLAB手写数字识别系统.doc

上传人:wj 文档编号:1220453 上传时间:2023-04-30 格式:DOC 页数:7 大小:65.50KB
下载 相关 举报
基于人工神经网络的MATLAB手写数字识别系统.doc_第1页
第1页 / 共7页
基于人工神经网络的MATLAB手写数字识别系统.doc_第2页
第2页 / 共7页
基于人工神经网络的MATLAB手写数字识别系统.doc_第3页
第3页 / 共7页
基于人工神经网络的MATLAB手写数字识别系统.doc_第4页
第4页 / 共7页
基于人工神经网络的MATLAB手写数字识别系统.doc_第5页
第5页 / 共7页
基于人工神经网络的MATLAB手写数字识别系统.doc_第6页
第6页 / 共7页
基于人工神经网络的MATLAB手写数字识别系统.doc_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于人工神经网络的MATLAB手写数字识别系统.doc

《基于人工神经网络的MATLAB手写数字识别系统.doc》由会员分享,可在线阅读,更多相关《基于人工神经网络的MATLAB手写数字识别系统.doc(7页珍藏版)》请在冰点文库上搜索。

基于人工神经网络的MATLAB手写数字识别系统.doc

基于人工神经网络的MATLAB手写数字识别系统

一、函数MouseDraw实现手写识别系统GUI界面的建立和鼠标手写的实现。

(使用时保存为MouseDraw.m)

functionMouseDraw(action)

%MouseDraw本例展示如何以HandleGraphics来设定滑鼠事件

%(MouseDrawEvents)的反应指令(Callbacks)

%本程序在鼠标移动非常快时,不会造成画“断线”

%global不能传矩阵

globalInitialXInitialYFigHandlehb2hb3hb4counthb5hb6hb7

count='E:

\im.jpg';

imSize=50;

ifnargin==0,action='start';

end

switch(action)

%%开启图形视窗

case'start',

FigHandle=figure('WindowButtonDownFcn','MouseDrawdown','DeleteFcn','savebpnet');

axis([1imSize1imSize]);%设定图轴范围%

set(gca,'Position',[.25.20.7.7]);

axisoff;

gridoff;

boxon;%将图轴加上图框

title('手写体输入窗');

tryevalin('base','loadbpnet')

catch

evalin('base','bpgdtrain');

end

%%fprintf('start');

%%设定滑鼠按钮被按下时的反应指令为「MouseDrawdown」

%set(gcf,'WindowButtonDownFcn','MouseDrawdown');

hb1=uicontrol('Parent',FigHandle,'Units','Normalized',...

'Position',[.3.01.13.07],'String','保存',...

'Callback',['exa=rgb2gray(frame2im(getframe(gca)));','imwrite(exa,''E:

\im.jpg'')']);

hb2=uicontrol('Parent',FigHandle,'Style','popupmenu','Position',[50505030],...

'String',{'26','24','22','20','18','16','14','12','10'});

hb3=uicontrol('Parent',FigHandle,'Style','text',...

'Position',[10909030],'String',['CurrentX()','CurrentY()']);

hb4=uicontrol('Parent',FigHandle,'Style','popupmenu','Position',[50205030],...

'String',{'Red','Blue','Black','Yellow','Green'});

uicontrol('Parent',FigHandle,'Position',[27067030],'String','训练','Callback',...

['exa=rgb2gray(frame2im(getframe(gca)));','sample=reshape(recgnition(exa),25,1);','clc;',...

't=inputdlg(''数字类别'',''样品训练'');','t=str2num(t{1,1})/10;',...

'bpnet.trainParam.lr=str2num(get(hb6,''String''));','bpnet.trainParam.goal=str2num(get(hb7,''String''));',...

'[bpnet]=train(bpnet,sample,t);','savebpnet']);

uicontrol('Parent',FigHandle,'Position',[36067030],'String','识别','Callback',...

['exa=rgb2gray(frame2im(getframe(gca)));','sample=reshape(recgnition(exa),25,1);',...

'record=round(sim(bpnet,sample)*10);','clc;','set(hb5,''String'',num2str(record),''fontSize'',48);']);

uicontrol('Parent',FigHandle,'Style','text','Position',[10603020],'String','字号');

uicontrol('Parent',FigHandle,'Style','text','Position',[10303020],'String','颜色');

hb5=uicontrol('Parent',FigHandle,'Style','text','Position',[101509090]);

uicontrol('Parent',FigHandle,'Style','text','Position',[52605020],'String','学习速率');

hb6=uicontrol('Parent',FigHandle,'Style','Edit','Position',[602603020],'String','0.01');

uicontrol('Parent',FigHandle,'Style','text','Position',[52905020],'String','训练精度');

hb7=uicontrol('Parent',FigHandle,'Style','Edit','Position',[602903020],'String','0.005');

uicontrol('Parent',FigHandle,'Style','pushbutton','Position',[45067030],'String','清除','Callback','cla');

%将函数变量导入到工作空间;

assignin('base','hb5',hb5);

assignin('base','hb6',hb6);

assignin('base','hb7',hb7);

%%%%%%%%%%%%%%%%%%%%%%%%%%%

dlmwrite('IXT.txt',-10,'delimiter','\t','precision',6);

dlmwrite('IYT.txt',-10,'delimiter','\t','precision',6);%%滑鼠按钮被按下时的反应指令

case'down',

ifstrcmp(get(FigHandle,'SelectionType'),'normal')%如果是左键

set(FigHandle,'pointer','hand');

CurPiont=get(gca,'CurrentPoint');

InitialX=CurPiont(1,1);

InitialY=CurPiont(1,2);

dlmwrite('IXT.txt',InitialX,'-append','delimiter','\t','precision',6);

dlmwrite('IYT.txt',InitialY,'-append','delimiter','\t','precision',6);

%列印「MouseDrawdown!

」讯息

%%fprintf('MouseDrawdown!

\n');

%设定滑鼠移动时的反应指令为「MouseDrawmove」

set(gcf,'WindowButtonMotionFcn','MouseDrawmove');

set(gcf,'WindowButtonUpFcn','MouseDrawup');

elseifstrcmp(get(FigHandle,'SelectionType'),'alt')%如果是右键

set(FigHandle,'Pointer','arrow');

set(FigHandle,'WindowButtonMotionFcn','')

set(FigHandle,'WindowButtonUpFcn','')

fprintf('MouseDrawrightbuttondown!

\n');

ImageX=importdata('IXT.txt');

ImageY=importdata('IYT.txt');

InputImage=ones(imSize);

roundX=round(ImageX);

roundY=round(ImageY);

fork=1:

size(ImageX,1)

if0

InputImage(roundX(k)-1:

roundX(k)+2,roundY(k)-1:

roundY(k)+2)=0;

end

end

InputImage=imrotate(InputImage,90);%图像旋转90

figure

(2);

imshow(InputImage);

end

%%滑鼠移动时的反应指令

case'move',

CurPiont=get(gca,'CurrentPoint');

X=CurPiont(1,1);

Y=CurPiont(1,2);

set(hb3,'String',['CurrentX(',num2str(X),')','CurrentY(',num2str(Y),')']);

%当鼠标移动较快时,不会出现离散点。

%利用y=kx+b直线方程实现。

x_gap=0.1;

%定义x方向增量

y_gap=0.1;

%定义y方向增量

ifX>InitialX

step_x=x_gap;

else

step_x=-x_gap;

end

ifY>InitialY

step_y=y_gap;

else

step_y=-y_gap;

end

%定义x,y的变化范围和步长

ifabs(X-InitialX)<0.01%线平行于y轴,即斜率不存在时

iy=InitialY:

step_y:

Y;

ix=X.*ones(1,size(iy,2));

else

ix=InitialX:

step_x:

X;

%定义x的变化范围和步长%当斜率存在,即k=(Y-InitialY)/(X-InitialX)~=0

iy=(Y-InitialY)/(X-InitialX).*(ix-InitialX)+InitialY;

end

ImageX=[ix,X];

ImageY=cat(2,iy,Y);

popup_index1=26-(get(hb2,'Value')-1)*2;

popup_index2=get(hb4,'Value');

switch(popup_index2)

case1

line(ImageX,ImageY,'marker','.','markerSize',popup_index1,...

'LineStyle','-','LineWidth',4,'Color','Red');

case2

line(ImageX,ImageY,'marker','.','markerSize',popup_index1,...

'LineStyle','-','LineWidth',4,'Color','Blue');

case3

line(ImageX,ImageY,'marker','.','markerSize',popup_index1,...

'LineStyle','-','LineWidth',4,'Color','Black');

case4

line(ImageX,ImageY,'marker','.','markerSize',popup_index1,...

'LineStyle','-','LineWidth',4,'Color','Yellow');

case5

line(ImageX,ImageY,'marker','.','markerSize',popup_index1,...

'LineStyle','-','LineWidth',4,'Color','Green');

end

dlmwrite('IXT.txt',ImageX,'-append','delimiter','\t','precision',6);

dlmwrite('IYT.txt',ImageY,'-append','delimiter','\t','precision',6);

InitialX=X;%记住当前点坐标

InitialY=Y;%记住当前点坐标

%列印「MouseDrawismoving!

」及滑鼠现在位置

%fprintf('MouseDrawismoving!

Currentlocation=(%g,%g)\n',...

%CurPiont(1,1),CurPiont(1,2));

%%fprintf('MouseDrawmove!

\n');

%设定滑鼠按钮被释放时的反应指令为「MouseDrawup」

set(gcf,'WindowButtonUpFcn','MouseDrawup');

%%滑鼠按钮被释放时的反应指令

case'up',

%清除滑鼠移动时的反应指令

set(gcf,'WindowButtonMotionFcn','');

%清除滑鼠按钮被释放时的反应指令

set(gcf,'WindowButtonUpFcn','');

%列印「MouseDrawup!

%%fprintf('MouseDrawup!

\n');

end

end

二、实现手写数字图像特征的提取:

(存为recgnition.m)

functionsample=recgnition(exa)

[i,j]=find(exa~=204);

imin=min(i);

imax=max(i);

jmin=min(j);

jmax=max(j);

a=exa(imin:

imax,jmin:

jmax);

M=imax-imin+1;

N=jmax-jmin+1;

form=1:

5

forn=1:

5

exa_c{m,n}=a(1+(m-1)*M/5:

m*M/5,1+(n-1)*N/5:

n*N/5);

sample(1,(m-1)*5+n)=size(find(exa_c{m,n}~=204),1)/(M*N/25);

%subplot(5,5,(m-1)*5+n),subimage(exa_c{m,n});

end

end

三、建立bp神经网络。

(可修改所建立bp神经网络参数,也可建立其他类型神经网络)。

x=ones(25,2);

x(:

1)=0;

bpnet=newff(x,[50,1],{'logsig','logsig'},'traingd');

bpnet.trainParam.show=5;%显示训练迭代过程(每隔5次训练,显示一次训练进程)

bpnet.trainParam.lr=0.01;%学习速率

bpnet.trainParam.epochs=2000;%最大训练次数

bpnet.trainParam.goal=0.005;%训练要求精度(0.005)

此段命令应存为bpgdtrain.m文件。

以上函数以及m文件须保存以后才可调用。

神经网络要经过一定数量的训练才能达到较高的识别精度。

使用时先运行MouseDraw函数,出现下图界面,

界面介绍:

保存:

可将手写数字图像保存为im.jpg文件。

训练:

用于有导师训练神经网络,用户使用鼠标写好数字,点击训练,弹出输入框框,输入相应正确数字。

识别:

对界面上的手写数字进行识别,结果显示在左边白色方框。

清除:

可清除界面上数字,重新书写。

字号、颜色选择下拉框可选择手写数字字号与颜色。

控制训练精度和学习速率。

具体参照bp神经网络。

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2