手写数字识别问题(5)——完结

经过接近15周的艰苦努力,毕业设计(基于MATLAB的手写数字识别系统)已经完结。
设计过程中遇到的部分问题可查阅博客:

  1. 手写数字识别问题(1)——关于MNIST数据集
  2. 手写数字识别问题(2)——利用MATLAB搭建GUI界面
  3. 手写数字识别问题(3)——详解卷积神经网络LeNet-5
  4. 手写数字识别问题(4)——图像处理时常见问题之uint8与double类型详解
    以及本文手写数字识别问题(5)——完结。

本文采用MATLAB型号是MATLAB R2016a,且是利用纯代码BP神经网络设计实现,没有利用MATLAB神经网络工具箱函数,这样更能方便的了解BP神经网络的工作原理——信号前向传播,误差反向传播。最后利用GUI界面进行搭建,方便快捷。
整个过程包括五部分,分别是:
样本库图像预处理。手写数字识别中使用的数据库,主要图像预处理的方法。
样本特征提取。对预处理之后的图像数据选择样本特征进行提取。
分类器设计。通过对比各种分类器选择较为合适的BP神经网络分类器
手写数字的识别。与样本库图像不同,本文所要识别的对象是利用windows 画图产生黑白二值且保存为.bmp 文件的手写数字图像,因此需要进行与样本库图像不同的图像预处理。
搭建GUI界面。利用MATLAB GUI界面搭建软件系统,验证系统的稳定性良好。

GUI界面又包括单数字GUI界面搭建及多数字GUI界面搭建。本设计基本将手写数字识别的各个领域均涵盖在内。而且代码基本都有注释解释,更方便了解。
部分代码如图所示。
主函数部分代码:
在这里插入图片描述
识别函数部分代码:
在这里插入图片描述
单数字GUI界面:
在这里插入图片描述
多数字GUI界面:
在这里插入图片描述
经过训练,测试集识别率可以超过99%,具有良好的识别性能。

在这里插入图片描述
除此之外,本设计还可以提供必要的开题报告、文献综述、论文大纲及答辩PPT和答辩稿等介绍。
由于投入了不少精力和时间,以及走了大量的弯路。
这里我将多种基于MATLAB的手写数字识别方法进行了汇总,展示如下:

1、利用MATLAB工具箱进行手写数字识别

该方法利用MATLAB自带的工具箱实现,利用MATLAB的net函数实现,训练过程如下:
在这里插入图片描述
最终得到的混淆矩阵如图所示,可以看到准确率大概在95%左右:
在这里插入图片描述
实际识别效果如下:
在这里插入图片描述
资源详细代码请点击这里:资源1

2、利用MATLAB自己搭建BP神经网络进行手写数字识别

BP神经网络采用最原始的逐条代码编写的方式,而没有使用误差更大,更不容易学习精髓,但更方便的工具箱函数,这样也更方便你认真读和理解神经网络的内涵和本质。
【注】:本资源没有GUI界面,需要界面的亲需要自己搭建。
资源详细代码请点击这里:资源2

3、利用MATLAB自己搭建BP神经网络和多特征进行手写数字识别

这里在2的基础上,增加了粗网格特征和交点特征,并且搭建了GUI界面,GUI界面详见上文。
交点特征包括三种,分别是垂直交点、水平交点和对角线交点。
(一)垂直交点
28 ∗ 28 28*28 2828图像行宽的5/12、1/2和7/12处设置三条垂直线,若为小数则四舍五入为最近的整数,提取它们和手写数字的交点数。
(二) 水平交点
28 ∗ 28 28*28 2828图像列宽的1/3、1/2和2/3处设置三条水平线,若为小数则四舍五入为最近的整数,提取它们和手写数字的交点数特征。
(三)对角线交点
28 ∗ 28 28*28 2828图像中分别设置主对角线和副对角线,提取它们和手写数字的交点数特征。
根据三种交点的特征,手写数字的交点特征F可以表示为:
F = [ F 1 , F 2 , F 3 , F 4 , F 5 , F 6 , F 7 , F 8 ] F = [{F_1},{F_2},{F_3},{F_4},{F_5},{F_6},{F_7},{F_8}] F=[F1,F2,F3,F4,F5,F6,F7,F8]
其中, F 1 、 F 2 、 F 3 F_1、F_2、F_3 F1F2F3分别表示垂直5/12处、垂直1/2处和7/12处的交点数; F 4 、 F 5 、 F 6 F_4、F_5、F_6 F4F5F6分别表示水平1/3处、水平1/2处和水平2/3处的交点数; F 7 、 F 8 F_7、F_8 F7F8分别表示左对角线、右对角线的交点数和端点数。交点特征示意图如下图所示。
在这里插入图片描述
关于交点特征的详细内容可参考论文:李怡轩. 基于机器学习的手写数字识别系统设计与实现[J]. 微型电脑应用, 2018, v.34;No.304(08):82-85.


粗网格特征
粗网格特征表示对逐像素扫描法的局部处理,将手写数字图像分成 n ∗ n n*n nn个粗网格,对每个小网格内的白色像素1所占总数进行计算,并将其结果顺序排列成一维特征向量,进行训练学习。
粗网格的提取步骤如下:将 N ∗ M N*M NM手写数字图像分成各不重叠 n ∗ n n*n nn个小区域,计算每个区域的像素数𝑡𝑡,将所得结果作为该区域的特征值存入特征向量中,粗网格划分后该图像的特征值为 ( N ∗ M ) / ( n ∗ n ) (N*M)/(n*n) NM/nn个。
该系统中图像归一化后变成像素为 28 ∗ 28 28*28 2828的手写数字图像,将n的值置为2。特征提取后产生196个特征值的特征向量,每个特征值表示一个 2 ∗ 2 2*2 22 区域内的像素值之和,即白色个数。粗网格特征的一个显著优点是能够有效抑制噪声

关于粗网格特征的详细内容可参考论文:张魁. 基于遗传-BP神经网络的手写数字的识别方法[D].西安科技大学,2012.

【注】:本资源搭建了GUI界面,可以直接运行GUI.m。
资源详细代码请点击这里:资源3

4、利用MATLAB自己搭建BP神经网络和多特征进行手写数字识别+文档资料

这里在2的基础上,增加了文档类资料。文档类资料包括很多内容。
资源详细代码请点击这里:资源4

Tips:2-4我做了视频对代码进行了较为详细的介绍,如果代码不懂可以参考视频:https://www.ixigua.com/7224829299474301475

5、利用MATLAB+CNN卷积神经网络进行手写数字识别

关于卷积神经网络这一部分请参考本专题的下一篇文章:手写数字识别问题(6)【拓展】——利用CNN卷积神经网络实现基于MATLAB的手写数字识别系统的设计

【注】:以上五种方法都附赠一份利用MATLAB和python对MNIST数据集进行处理的程序,希望对你有所帮助。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wendy_ya

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

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

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

打赏作者

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

抵扣说明:

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

余额充值