【手写数字识别】基于matlab GUI贝叶斯+线性分类器手写数字识别【含Matlab源码 828期】
2021/5/6 14:55:27
本文主要是介绍【手写数字识别】基于matlab GUI贝叶斯+线性分类器手写数字识别【含Matlab源码 828期】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、简介
贝叶斯分类器是以贝叶斯原理为基础的分类器的总称,是一种生成式模型,朴素贝叶斯分类器是其中最简单的一种。要高明白贝叶斯分类器的原理,首先得明白一些基本概念。
1 基本概念
先验概率:根据统计/经验得到的某事情发生的概率,比如北京下雨的概率可以通过以往的经验或者统计结果得到。
后验概率:在一定条件下某事情发生的概率,比如北京天空出现乌云(因)会下雨(果)的概率。
条件概率:事情发生时某条件出现的概率,比如北京下雨(果)会出现乌云(因)的概率。
2 贝叶斯公式
2 朴素贝叶斯分类器
二、源代码
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
三、运行结果
四、备注
完整代码或者代写添加QQ 1564658423
这篇关于【手写数字识别】基于matlab GUI贝叶斯+线性分类器手写数字识别【含Matlab源码 828期】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南