【手写数字识别】基于matlab Fisher分类手写数字识别 【含Matlab源码 505期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、Fisher分类手写数字识别简介

1引言
手写体数字识别在过去的几十年里一直是模式识别领域的研究热点,在手写较多的领域如邮政编码、统计报表、财务报表、支票的数字识别等方面有广泛应用.专家、学者提出了很多识别算法,但是很多只是停留在实验室中,由于书写风格的不同造成了各种字符变形,研究高性能的手写数字识别算法是一个有相当挑战性的课题.提取字符特征大体分两类:一是统计特征,通常包括点矩、特征区域等;二是结构特征,通常包括圈、端点、拐角点、笔画、轮廓等现有的识别方法很多,例如基于模板匹配或结构特征的方法、使用模糊推理的方法、基于矩和变换的方法、基于神经网络的方法等.

2 预处理及特征提取
为防止手写时(粘带等操作)出现离散的孤立点,笔者采用面积滤波法去除离散点.滤波算法描述如下:
[step 1] 循环:扫描整个书写区;
[step 2] 计算:根据8邻域像素点计算各连通区域的像素点数目, 作为面积值s;
[step 3] 判断:若面积值ss Threshold(指定阈值) , 则使用背景色重绘当前离散点区
[step 4] 继续:跳转到step 2;
[step 5] 输出:滤波处理完成后, 得到相对连通的数字图像.
对输入的手写图像进行上述处理后,得到了相对较为规整的数字图像,减少了干扰点源,为后续的特征提取工作做了较好的预处理.如图1为书写时获得的输入图像含噪声点的情况,通过面积滤波后得至到噪声点较少的图像2.
在这里插入图片描述
图1 含噪声点的图像 图2 滤波后 图3 区域定位 图4 特征分割
滤波处理完成后,进入边界判断处理.为得到数字的边界进行归一化由于书写数字大部分情况都不能充满数字区,所以笔者采用从数字区的4个边界向中心紧缩的方法寻找数字边界.区域定定位结果如图3.此种定位方法好处就是能够动态地获得各小区域的比值,实现了一种弹性的归一化,不必用专门放大或缩小卜的方法作归一化,为后续识别工作带来方便.定位完成后,对数字进行特征提取.特征提取有很多方法,笔者采用5×5的模板[4]:
水平方向上的间距为dn=(h2-h1)/5(1)
垂直方向上的间距为dy=(V2-V1)/5(2)
由于整个数字区域的水平距离、垂直距离很多时候不是5的倍数,会造成最后一列和最后一行的数据不能完全包括在内,所以在实际操作中,笔者将前4x4小区域间距分别采用所求得的dh,dy,水平方向余下的全部作为最后一行的范围,其宽度为dhs w<2dh; 垂直方向余下的全部作为最后一列的范围, 其高度为dy≤h<2·dy.所以有时会看到分割后最后一列和最后一行的大小与前4x4小区域不一致.如上操作将得到5×5=25维特征E值,特征值的选取为每一个小区域中数字像素数与整个小区域面积之比,若大于给定的阈值Th=0.05,便将此维特征记为为1,否则为0.

3 Fisher算法
在解决模式识别问题时, Fisher判别是一种有效的模式分类算法[5, 6] 它求出一个最佳分类向量, 将原来高维的模式样本特征投影到最佳分类向量空间以达到减少特征维数的目的, 这是Fisher算法要解决的基本问题.
Fisher算法的主要思想:为得到最佳分类向量, 需要计算各类别样品均值、样品类内离散度矩阵、总类间离散度矩阵、样品类间离散度矩阵.根据Fisher准则找到最佳分类向量, 将训练样品集进行投影到待求的直线方向上, 然后求出边界点,最后将待测样品特征向已求出的直线方向投影,计算与训练样品投影点的边界距离关系,便可对应地识别结果.
最初Fisher算法主要是进行两类问题的分类, 而问题中要解决0~9中的10个数字的分类识别问题, 所以需要构建10×(10-1) /2=45次分类.Fisher算法描述如下:
[step 1] 均值:计算各类的样品均值:
其中Ni是对应ωi类中的样品个数, X为样品特征向量.
[step2]离散度矩阵:对样品计算类内离散度矩阵Si
在这里插入图片描述
各样品的总类内离散度矩阵S:
Sw=Z Sji=0, 1(5)
计算样品类间离散度矩阵S。
Sd=(mo-m1)(mo-m1)T(6)
[step 3] 投影向量:Fisher判别的目的是找一个最佳分类向量W, 使得映射后的类间离散度矩阵和类内离散度矩阵的比值最大.
在这里插入图片描述
[step5]分类:对于待测样品特征值X, 计算它在最佳分类向量上的投影点yx:

yx=WTX (12)
在这里插入图片描述
上述算法描述中, 采用了两类Fisher分类法, 对于10个数字的识别, 在实际编程时需要两两分类处理, 最后在计算结果对应最大值者位置为对应的类别序号, 即为识别结果.

⛄二、部分源代码

function varargout = main_gui(varargin)
% MAIN_GUI MATLAB code for main_gui.fig
% MAIN_GUI, by itself, creates a new MAIN_GUI or raises the existing
% singleton*.
%
% H = MAIN_GUI returns the handle to a new MAIN_GUI or the handle to
% the existing singleton*.
%
% MAIN_GUI(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in MAIN_GUI.M with the given input arguments.
%
% MAIN_GUI(‘Property’,‘Value’,…) creates a new MAIN_GUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before main_gui_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to main_gui_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 main_gui

% Last Modified by GUIDE v2.5 02-Apr-2019 15:37:29

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @main_gui_OpeningFcn, …
‘gui_OutputFcn’, @main_gui_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 main_gui is made visible.
function main_gui_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 main_gui (see VARARGIN)
% set( handles.axes1, ‘visible’, ‘off’ );
% set( handles.axes1, ‘box’, ‘on’ );
global W W0;
load W
load W0

% Choose default command line output for main_gui
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes main_gui wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = main_gui_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 structure
varargout{1} = handles.output;

% — Executes on mouse press over figure background, over a disabled or
% — inactive control, or over an axes background.
function figure1_WindowButtonDownFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global draw_enable; %定义一个标志,1表示绘图,0表示停止绘图
global x;
global y;
draw_enable=1;
if draw_enable
position=get(gca,‘currentpoint’); %gca(获取当前坐标轴的句柄)
x(1)=position(1);
y(1)=position(3);
end

% — Executes on mouse motion over figure - except title and menu.
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global draw_enable;
global x;
global y;
global h1;
if draw_enable==1
position=get(gca,‘currentpoint’);
x(2)=position(1);
y(2)=position(3);
h1=line(x,y,‘LineWidth’,25,‘color’,‘k’,‘Linestyle’,‘-.’);
x(1)=x(2);
y(1)=y(2); %鼠标移动,随时更新数据
end

% — Executes on mouse press over figure background, over a disabled or
% — inactive control, or over an axes background.
function figure1_WindowButtonUpFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global draw_enable;
draw_enable=0;

function num_Callback(hObject, eventdata, handles)
% hObject handle to num (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,‘String’) returns contents of num as text
% str2double(get(hObject,‘String’)) returns contents of num as a double

% — Executes during object creation, after setting all properties.
function num_CreateFcn(hObject, eventdata, handles)
% hObject handle to num (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

% — 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)
global W
global W0
img=getframe(handles.axes1);
img=imresize(img.cdata,[28,28]);
img=im2bw(img,graythresh(img));
img=~img;
axes(handles.axes2);
img1=~img;
imshow(img1);%img1为预览图像
%计算概率
for cnt=1:4
for cnt2=1:4
Atemp=sum(img(((cnt7-6):(cnt7)),((cnt27-6):(cnt27))));%10*10box
lett((cnt-1)*4+cnt2)=sum(Atemp);
end

⛄三、运行结果

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

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]丁建,李宁谦.基于核函数的Fisher手写数字识别系统研究[J].电脑知识与技术. 2020,16(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海神之光

有机会获得赠送范围1份代码

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

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

打赏作者

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

抵扣说明:

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

余额充值