【手写数字识别】基于贝叶斯分类器实现手写数字识别matlab源码含GUI

一、简介

贝叶斯分类器是以贝叶斯原理为基础的分类器的总称,是一种生成式模型,朴素贝叶斯分类器是其中最简单的一种。要高明白贝叶斯分类器的原理,首先得明白一些基本概念。\ 1 基本概念\ 先验概率:根据统计/经验得到的某事情发生的概率,比如北京下雨的概率可以通过以往的经验或者统计结果得到。\ 后验概率:在一定条件下某事情发生的概率,比如北京天空出现乌云(因)会下雨(果)的概率。\ 条件概率:事情发生时某条件出现的概率,比如北京下雨(果)会出现乌云(因)的概率。

2 贝叶斯公式\ 在这里插入图片描述\ 2 朴素贝叶斯分类器\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述

二、源代码

``` function varargout = Classification(varargin) % Begin initialization code - DO NOT EDIT guiSingleton = 1; guiState = struct('guiName', mfilename, ... 'guiSingleton', guiSingleton, ... 'guiOpeningFcn', @ClassificationOpeningFcn, ... 'guiOutputFcn', @ClassificationOutputFcn, ... 'guiLayoutFcn', [] , ... 'guiCallback', []); if nargin && ischar(varargin{1}) guiState.gui_Callback = str2func(varargin{1}); end

if nargout [varargout{1:nargout}] = guimainfcn(guiState, varargin{:}); else guimainfcn(guiState, 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

[pctemplate,pcdata]=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

%求协方差矩阵、协方差矩阵的逆矩阵、协方差矩阵的行列式 scov=[]; sinv=[]; s_det=[];

for i=1:10 scov(i).data=cov(pattern(1,i).feature'); sinv(i).data=inv(scov(i).data); sdet(i)=det(s_cov(i).data); end ```

三、运行结果

在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值