function varargout = Classification(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Classification_OpeningFcn, ...
'gui_OutputFcn', @Classification_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Classification is made visible.
function Classification_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
%--------------------------------------------------------------------------
global flag
flag=0;
if exist('template.mat','file')~=0
load template pattern;
else
pattern(1,1).num=0;
pattern(1,1).feature=[];
pattern(1,2).num=0;
pattern(1,2).feature=[];
pattern(1,3).num=0;
pattern(1,3).feature=[];
pattern(1,4).num=0;
pattern(1,4).feature=[];
pattern(1,5).num=0;
pattern(1,5).feature=[];
pattern(1,6).num=0;
pattern(1,6).feature=[];
pattern(1,7).num=0;
pattern(1,7).feature=[];
pattern(1,8).num=0;
pattern(1,8).feature=[];
pattern(1,9).num=0;
pattern(1,9).feature=[];
pattern(1,10).num=0;
pattern(1,10).feature=[];
save template pattern;
end
%------------------------------------------------------------------------
% --- Outputs from this function are returned to the command line.
function varargout = Classification_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%--------------------------------------------------------------------------
%手写板实现---按下左键开始画直线
function figure1_WindowButtonDownFcn(hObject, eventdata, handles)
%clc
global flag
global pos0 %
global x0 y0
pos0=get(handles.WritingAxes,'currentpoint');
x0=pos0(1,1);
y0=pos0(1,2);
if (pos0(1,1)>=0&pos0(1,1)<=100) && (pos0(1,2)>=0&pos0(1,2)<=100)
flag=1;
end
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
%clc
%手写板实现---移动鼠标进行画线实现的程序
global flag
global pos0
global x0 y0
pos=get(handles.WritingAxes,'currentpoint');
x=pos(1,1);
y=pos(1,2);
if flag && (pos(1,1)>=0&pos(1,1)<100) && (pos(1,2)>=0&pos(1,2)<100)
line(x,y, 'marker', '.','markerSize',18, 'LineStyle','-','LineWidth',2,'Color','Black');
if x>x0
stepX=0.1;
else
stepX=-0.1;
end
if y>y0
stepY=0.1;
else
stepY=-0.1;
end
X=x0:stepX:x;
if abs(x-x0)<0.01
Y=y0:stepY:y;
else
Y=(y-y0)*(X-x0)/(x-x0)+y0;
end
line(X ,Y, 'marker', '.','markerSize',18, 'LineStyle','-','LineWidth',2,'Color','Black');
x0=x;
y0=y;
pos0=pos;
else
flag=0;
end
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
function figure1_WindowButtonUpFcn(hObject, eventdata, handles)
%clc
%手写板实现程序---释放鼠标左键结束画线的程序
global flag
flag=0;
%global data
data=[];
Img=getframe(handles.WritingAxes);
imwrite(Img.cdata,'当前手写数字.bmp','bmp');
I=imread('当前手写数字.bmp');
I=rgb2gray(I);
I=im2bw(I);
imwrite(I,'当前手写数字.bmp','bmp');
I=imread('当前手写数字.bmp');
data=GetFeature(I);
%--------------------------------------------------------------------------
% --- Executes on selection change in popupmenuNUM.
function popupmenuNUM_Callback(hObject, eventdata, handles)
%-------------------------------------------------------------------------
% --- Executes during object creation, after setting all properties.
function popupmenuNUM_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
function pushbuttonSave_Callback(hObject, eventdata, handles)
%global data
I=imread('当前手写数字.bmp');
data=GetFeature(I);
load template pattern;
num=get(handles.popupmenuNUM,'value');
switch num
case 1
msgbox('请选择数字类别再保存','提示');
case 2
pattern(1,1).num=pattern(1,1).num+1;
pattern(1,1).feature(:,pattern(1,1).num)=data;
case 3
pattern(1,2).num=pattern(1,2).num+1;
pattern(1,2).feature(:,pattern(1,2).num)=data;
case 4
pattern(1,3).num=pattern(1,3).num+1;
pattern(1,3).feature(:,pattern(1,3).num)=data;
case 5
pattern(1,4).num=pattern(1,4).num+1;
pattern(1,4).feature(:,pattern(1,4).num)=data;
case 6
pattern(1,5).num=pattern(1,5).num+1;
pattern(1,5).feature(:,pattern(1,5).num)=data;
case 7
pattern(1,6).num=pattern(1,6).num+1;
pattern(1,6).feature(:,pattern(1,6).num)=data;
case 8
pattern(1,7).num=pattern(1,7).num+1;
pattern(1,7).feature(:,pattern(1,7).num)=data;
case 9
pattern(1,8).num=pattern(1,8).num+1;
pattern(1,8).feature(:,pattern(1,8).num)=data;
case 10
pattern(1,9).num=pattern(1,9).num+1;
pattern(1,9).feature(:,pattern(1,9).num)=data;
case 11
pattern(1,10).num=pattern(1,10).num+1;
pattern(1,10).feature(:,pattern(1,10).num)=data;
end
save template pattern;
%--------------------------------------------------------------------------
%-------------------------------------------------------------------------
function pushbuttonFeature_Callback(hObject, eventdata, handles)
%global data
I=imread('当前手写数字.bmp');
data=GetFeature(I);
data=data';
fprintf('当前手写数字的特征如下所示:\n')
for i=1:25
if data(i)>0.1
data(i)=1;
else
data(i)=0;
end
fprintf(num2str(data(i)));
fprintf(' ');
if i/5==1 || i/5==2 || i/5==3 || i/5==4 || i/5==5
fprintf('\n');
end
end
%-------------------------------------------------------------------------
%--------------------------------------------------------------------------
function pushbuttonNUM_Callback(hObject, eventdata, handles)
load template;
num0=pattern(1,1).num;
disp(['数字0的样本数量为:',num2str(num0)])
num1=pattern(1,2).num;
disp(['数字1的样本数量为:',num2str(num1)])
num2=pattern(1,3).num;
disp(['数字2的样本数量为:',num2str(num2)])
num3=pattern(1,4).num;
disp(['数字3的样本数量为:',num2str(num3)])
num4=pattern(1,5).num;
disp(['数字4的样本数量为:',num2str(num4)])
num5=pattern(1,6).num;
disp(['数字5的样本数量为:',num2str(num5)])
num6=pattern(1,7).num;
disp(['数字6的样本数量为:',num2str(num6)])
num7=pattern(1,8).num;
disp(['数字7的样本数量为:',num2str(num7)])
num8=pattern(1,9).num;
disp(['数字8的样本数量为:',num2str(num8)])
num9=pattern(1,10).num;
disp(['数字9的样本数量为:',num2str(num9)])
%-------------------------------------------------------------------------
%--------------------------------------------------------------------------
function pushbuttonDelete_Callback(hObject, eventdata, handles)
load template;
num=get(handles.popupmenuNUM,'value');
switch
- 1
- 2
- 3
前往页