一、简介
模型参考这里。
二、源代码
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);
%--------------------------------------------------------------------------
function y=BayesLeastRisk(data)
clc;
load template pattern;
%将数字特征转化为0、1两个数值表示
for i=1:10
for j=1:25
for k=1:pattern(1,i).num
if pattern(1,i).feature(j,k)>0.1
pattern(1,i).feature(j,k)=1;
else
pattern(1,i).feature(j,k)=0;
end
end
end
end
[pc_template,pc_data]=pcapro(data); %主成分分析
temp=0;
for i=1:10
pattern(1,i).feature=pc_template(:,temp+1:temp+pattern(1,i).num);
temp=temp+pattern(1,i).num;
end
%求协方差矩阵、协方差矩阵的逆矩阵、协方差矩阵的行列式
s_cov=[];
s_inv=[];
s_det=[];
for i=1:10
s_cov(i).data=cov(pattern(1,i).feature');
s_inv(i).data=inv(s_cov(i).data);
s_det(i)=det(s_cov(i).data);
end
三、运行结果
##
四、参考文献
[1]周佳敏. 基于贝叶斯网络的手写数字识别的研究与应用[J]. 科技视界, 2013(08):27-27.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。