【手写数字识别】基于支持向量机SVM实现手写数字识别matlab源码含GUI
发布日期:2021-05-04 12:56:12 浏览次数:20 分类:技术文章

本文共 8399 字,大约阅读时间需要 27 分钟。

一、简介

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

1 数学部分
1.1 二维空间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2 算法部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、源代码

function varargout = DigitClassifyUI(varargin)%  % DIGITCLASSIFYUI MATLAB code for DigitClassifyUI.fig%      DIGITCLASSIFYUI, by itself, creates a new DIGITCLASSIFYUI or raises the existing%      singleton*.%%      H = DIGITCLASSIFYUI returns the handle to a new DIGITCLASSIFYUI or the handle to%      the existing singleton*.%%      DIGITCLASSIFYUI('CALLBACK',hObject,eventData,handles,...) calls the local%      function named CALLBACK in DIGITCLASSIFYUI.M with the given input arguments.%%      DIGITCLASSIFYUI('Property','Value',...) creates a new DIGITCLASSIFYUI or raises the%      existing singleton*.  Starting from the left, property value pairs are%      applied to the GUI before DigitClassifyUI_OpeningFcn gets called.  An%      unrecognized property name or invalid value makes property application%      stop.  All inputs are passed to DigitClassifyUI_OpeningFcn via varargin.%%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one%      instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help DigitClassifyUI% Last Modified by GUIDE v2.5 10-Feb-2021 18:44:08% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name',       mfilename, ...    'gui_Singleton',  gui_Singleton, ...    'gui_OpeningFcn', @DigitClassifyUI_OpeningFcn, ...    'gui_OutputFcn',  @DigitClassifyUI_OutputFcn, ...    'gui_LayoutFcn',  [] , ...    'gui_Callback',   []);if nargin && ischar(varargin{1})    gui_State.gui_Callback = str2func(varargin{1});endif 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 DigitClassifyUI is made visible.function DigitClassifyUI_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject    handle to figure% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% varargin   command line arguments to DigitClassifyUI (see VARARGIN)% Choose default command line output for DigitClassifyUIhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes DigitClassifyUI wait for user response (see UIRESUME)% uiwait(handles.figure1);global FigHandle AxesHandle RectHandle;FigHandle = handles.output;AxesHandle = handles.axes_write;MouseDraw();axis(handles.axes_write,[1 400 1 400]);    % 设定图轴范围RectHandle = rectangle(handles.axes_write,'Position',[80,66,240,268],'LineStyle','--','EdgeColor','#a9a9a9');% --- Outputs from this function are returned to the command line.function varargout = DigitClassifyUI_OutputFcn(hObject, eventdata, handles)% varargout  cell array for returning output args (see VARARGOUT);% hObject    handle to figure% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton1 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton_loadImage.function pushbutton_loadImage_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton_loadImage (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)global RectHandle;cla(handles.axes_write, 'reset')set(handles.axes_write, 'Visible','off');set(handles.output, 'Pointer', 'arrow');axis(handles.axes_write,[1 400 1 400]);    % 设定图轴范围RectHandle = rectangle(handles.axes_write,'Position',[80,66,240,268],'LineStyle','--','EdgeColor','#a9a9a9');% 弹出文件选择框,选择一张图片[file,path] = uigetfile({'*.jpg;*.jpeg;*.png;*.bmp;*.tif',...    '图片文件 (*.jpg,*.jpeg,*.png,*.bmp,*.tif)'},'选择一张图片');if isequal(file,0) % 若文件不存在    set(handles.edit_imagePath, 'String','请选择一张图片');else    fileName= fullfile(path, file); % 选择的图片绝对路径    set(handles.edit_imagePath, 'String', fileName); % 显示选择的图片路径    InputImage = imread(fileName);    image(handles.axes_raw, InputImage);    set(handles.axes_raw, 'Visible','off');        set(gcf, 'Pointer', 'arrow');    set(gcf, 'WindowButtonMotionFcn', '')    set(gcf, 'WindowButtonUpFcn', '')            % 开始执行预处理    if numel(size(InputImage))==3        InputImage = rgb2gray(InputImage);   % 灰度化图片        axes(handles.axes_gray);        imshow(InputImage);    else        axes(handles.axes_gray);        imshow(InputImage);    end    % 二值化    InputImage = imbinarize(InputImage);    axes(handles.axes_binary);    imshow(InputImage);        % 特征提取    InputImage = imresize(InputImage, [28, 28]);    cellSize = [4 4];    [~, vis4x4] = extractHOGFeatures(InputImage,'CellSize',[4 4]);    axes(handles.axes_features);    plot(vis4x4);        load('trainedSvmModel.mat','classifier');    features(1, :) = extractHOGFeatures(InputImage,'CellSize',cellSize);    predictedLabel = predict(classifier, features);    str = string(predictedLabel);    set(handles.text_result, 'String', str);endaxes(handles.axes_write);MouseDraw();% set(gcf, 'WindowButtonDownFcn', '');% --- Executes on button press in pushbutton_load.function pushbutton_load_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton_load (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)global RectHandle;axis(handles.axes_write,[1 400 1 400]);    % 设定图轴范围set(handles.edit_imagePath, 'String','请选择一张图片');delete(RectHandle);h=getframe(handles.axes_write);imwrite(h.cdata,'writedImage.jpg');InputImage = imread('writedImage.jpg');% InputImage = cat(3, InputImage,InputImage,InputImage);image(handles.axes_raw,InputImage);set(handles.axes_raw, 'Visible','off');axis(handles.axes_write,[1 400 1 400]);    % 设定图轴范围RectHandle = rectangle(handles.axes_write,'Position',[80,66,240,268],'LineStyle','--','EdgeColor','#a9a9a9');global FigHandleset(FigHandle, 'Pointer', 'arrow');set(FigHandle, 'WindowButtonMotionFcn', '')set(FigHandle, 'WindowButtonUpFcn', '')set(FigHandle, 'WindowButtonDownFcn', '');% 开始执行预处理if numel(size(InputImage))==3    InputImage = rgb2gray(InputImage);   % 灰度化图片    axes(handles.axes_gray);    imshow(InputImage);else    axes(handles.axes_gray);    imshow(InputImage);end% 二值化InputImage = imbinarize(InputImage);axes(handles.axes_binary);imshow(InputImage);% 特征提取InputImage = imresize(InputImage, [28, 28]);cellSize = [4 4];[~, vis4x4] = extractHOGFeatures(InputImage,'CellSize',[4 4]);axes(handles.axes_features);plot(vis4x4);load('trainedSvmModel.mat','classifier');features(1, :) = extractHOGFeatures(InputImage,'CellSize',cellSize);predictedLabel = predict(classifier, features);str = string(predictedLabel);set(handles.text_result, 'String', str);MouseDraw();% --- Executes on button press in pushbutton_clear.function pushbutton_clear_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton_clear (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)global RectHandle;global FigHandleset(FigHandle, 'Pointer', 'arrow');set(FigHandle, 'WindowButtonMotionFcn', '')set(FigHandle, 'WindowButtonUpFcn', '')set(FigHandle, 'WindowButtonDownFcn', '');set(handles.edit_imagePath, 'String','请选择一张图片');set(handles.text_result, 'String', 'None');cla(handles.axes_write, 'reset')set(handles.axes_write, 'Visible','off');cla(handles.axes_raw, 'reset')set(handles.axes_raw, 'Visible','off');cla(handles.axes_gray, 'reset')set(handles.axes_gray, 'Visible','off');cla(handles.axes_binary, 'reset')set(handles.axes_binary, 'Visible','off');cla(handles.axes_features, 'reset')set(handles.axes_features, 'Visible','off');set(handles.output, 'Pointer', 'arrow');axis(handles.axes_write,[1 400 1 400]);    % 设定图轴范围RectHandle = rectangle(handles.axes_write,'Position',[80,66,240,268],'LineStyle','--','EdgeColor','#a9a9a9');MouseDraw();

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ1575304183

转载地址:https://blog.csdn.net/qq_34763204/article/details/116379608 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【路径规划】基于果蝇优化算法实现机器人路径规划matlab源码
下一篇:【图像加密】基于行列像素置乱+DWT小波变换图像隐藏加密matlab源码

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月21日 07时28分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Vue列表渲染---vue工作笔记0009 2019-04-26
Vue列表搜索和排序---vue工作笔记0010 2019-04-26
Mybatis Plus简介_代码_以及文档地址_以及前置知识---Mybatis Plus工作笔记001 2019-04-26
大数据_Spark_框架简介---Spark工作笔记0001 2019-04-26
大数据_Spark_VS_Hadoop_框架---Spark工作笔记0002 2019-04-26
大数据_Flink_流式处理_简介_Flink是什么---Flink工作笔记0001 2019-04-26
大数据_Flink_流式处理_简介_为什么要用Flink---Flink工作笔记0002 2019-04-26
大数据_Flink_流式处理_简介_流数据处理的应用行业---Flink工作笔记0003 2019-04-26
大数据_Flink_流式处理_简介_流数处理的发展演变---Flink工作笔记0004 2019-04-26
大数据_Flink_流式处理_简介_认识一下什么是BI中的ETL---Flink工作笔记0005 2019-04-26
Vue事件处理_vue的事件处理超级方便_功能强大---vue工作笔记0011 2019-04-26
Vue表单数据自动收集---vue工作笔记0012 2019-04-26
Vue生命周期---vue工作笔记0013 2019-04-26
ES6-ES11新特性_ECMAScript_简单介绍---JavaScript_ECMAScript工作笔记001 2019-04-26
ES6-ES11新特性_ECMAScript相关名词介绍_---JavaScript_ECMAScript工作笔记002 2019-04-26
ES6新特性_let变量声明以及声明特性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记003 2019-04-26
Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001 2019-04-26
Sharding-Sphere,Sharding-JDBC_分库分表介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记002 2019-04-26
Sharding-Sphere,Sharding-JDBC_分库分表(垂直分库_垂直分表)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记003 2019-04-26
ES6新特性_let使用案例---JavaScript_ECMAScript_ES6-ES11新特性工作笔记004 2019-04-26