当前位置:文档之家› 基于人工神经网络的MATLAB手写数字识别系统

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

基于人工神经网络的MATLAB手写数字识别系统一、函数MouseDraw实现手写识别系统GUI界面的建立和鼠标手写的实现。

(使用时保存为MouseDraw.m)function MouseDraw(action)% MouseDraw 本例展示如何以Handle Graphics来设定滑鼠事件% (MouseDraw Events)的反应指令(Callbacks)% 本程序在鼠标移动非常快时,不会造成画“断线”% global不能传矩阵global InitialX InitialY FigHandle hb2 hb3 hb4 count hb5 hb6 hb7 count='E:\im.jpg';imSize = 50;if nargin == 0, action = 'start';endswitch(action)%%开启图形视窗case'start',FigHandle = figure('WindowButtonDownFcn','MouseDraw down','DeleteFcn','save bpnet');axis([1 imSize 1 imSize]); % 设定图轴范围%set(gca,'Position',[.25 .20 .7 .7]);axis off;grid off;box on; % 将图轴加上图框title('手写体输入窗');try evalin('base','load bpnet')catchevalin('base','bpgdtrain');end% % fprintf('start');%%设定滑鼠按钮被按下时的反应指令为「MouseDraw down」% set(gcf, 'WindowButtonDownFcn', 'MouseDraw down');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',[ 50 50 50 30],...'String', {'26','24', '22', '20', '18', '16','14','12','10'}); hb3=uicontrol('Parent', FigHandle,'Style','text',...'Position',[10 90 90 30],'String',[ 'CurrentX() ','CurrentY()']); hb4=uicontrol('Parent',FigHandle,'Style','popupmenu','Position',[ 50 20 50 30],...'String',{'Red','Blue','Black','Yellow','Green'});uicontrol('Parent',FigHandle,'Position',[270 6 70 30],'String','训练','Callback',...['exa=rgb2gray(frame2im(getframe(gca)));','sample=reshape(recgnit ion(exa),25,1);','clc;',...'t=inputdlg(''数字类别'',''样品训练'');','t=str2num(t{1,1})/10;',...'bpnet.trainParam.lr=str2num(get(hb6,''String''));','bpnet.trainP aram.goal=str2num(get(hb7,''String''));',...'[bpnet]=train(bpnet,sample,t);','save bpnet']);uicontrol('Parent',FigHandle,'Position',[360 6 70 30],'String','识别','Callback',...['exa=rgb2gray(frame2im(getframe(gca)));','sample=reshape(recgnit ion(exa),25,1);',...'record=round(sim(bpnet,sample)*10);','clc;','set(hb5,''String'', num2str(record),''fontSize'',48);']);uicontrol('Parent',FigHandle,'Style','text','Position',[10 60 30 20],'String','字号');uicontrol('Parent',FigHandle,'Style','text','Position',[10 30 30 20],'String','颜色');hb5=uicontrol('Parent',FigHandle,'Style','text','Position',[10 150 90 90]);uicontrol('Parent',FigHandle,'Style','text','Position',[5 260 50 20],'String','学习速率');hb6=uicontrol('Parent',FigHandle,'Style','Edit','Position',[60 260 30 20],'String','0.01');uicontrol('Parent',FigHandle,'Style','text','Position',[5 290 50 20],'String','训练精度');hb7=uicontrol('Parent',FigHandle,'Style','Edit','Position',[60 290 30 20],'String','0.005');uicontrol('Parent',FigHandle,'Style','pushbutton','Position',[450 6 70 30],'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',if strcmp(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);% 列印「MouseDraw down!」讯息% % fprintf('MouseDraw down!\n');% 设定滑鼠移动时的反应指令为「MouseDraw move」set(gcf, 'WindowButtonMotionFcn', 'MouseDraw move');set(gcf, 'WindowButtonUpFcn', 'MouseDraw up');elseif strcmp(get(FigHandle, 'SelectionType'), 'alt') % 如果是右键set(FigHandle, 'Pointer', 'arrow');set( FigHandle, 'WindowButtonMotionFcn', '')set(FigHandle, 'WindowButtonUpFcn', '')fprintf('MouseDraw right button down!\n');ImageX = importdata('IXT.txt');ImageY = importdata('IYT.txt');InputImage = ones(imSize);roundX = round(ImageX);roundY = round(ImageY);for k = 1:size(ImageX,1)if0<roundX(k) && roundX(k)<imSize && 0<roundY(k) && roundY(k)<imSizeInputImage(roundX(k)-1:roundX(k)+2,roundY(k)-1:roundY(k)+2) = 0;endendInputImage = imrotate(InputImage,90); % 图像旋转90figure(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),')']);% 当鼠标移动较快时,不会出现离散点。

相关主题