【手写数字识别】基于支持向量机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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年03月21日 07时28分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Vue列表渲染---vue工作笔记0009
2019-04-26
Vue列表搜索和排序---vue工作笔记0010
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
Vue事件处理_vue的事件处理超级方便_功能强大---vue工作笔记0011
2019-04-26
Vue表单数据自动收集---vue工作笔记0012
2019-04-26
Vue生命周期---vue工作笔记0013
2019-04-26