1 案例背景
手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性。由于手写体数字的随意性很大,如笔画粗细、字体大小、倾斜角度等因素都有可能直接影响到字符的识别准确率,所以手写体数字识别是一个很有挑战性的课题。在过去的数十年中,研究者们提出了许多识别方法,并取得了一定的成果。手写体数字识别的实用性很强,在大规模数据统计如例行年检、人口普查、财务、税务、邮件分拣等应用领域都有广阔的应用前景"。
本案例讲述了图像中手写阿拉伯数字的识别过程,对手写数字识别的基于统计的方法进行了简要介绍和分析,并通过开发一个小型的手写体数字识别系统来进行实验。手写数字识别系统需要实现手写数字图像的读取功能、特征提取功能、数字的模板特征库的建立功能及识别功能。

2 BP算法与实现过程
2.1 BP算法基本原理
将已知输入向量和相应的输出向量(期望输出)作为训练样本,并假定即将学习的网络已被赋予一组权值。为消除梯度幅度的不利影响,利用弹性反向传播算法通过过如下步骤更新权值(图1):首先,使用初始权值(不管正确与否)从输入层开始向前传播,计算出所有神经元的输出,这样输出层的输出与期望输出(即输出值与目标值)之间存在较大的误差。然后,计算作为神经元权值函数的]误差函数(损失函数或目标函数、代价函数)的梯度,根据误差降低最快的方向来调整更新权值,通过将输出误差反向传播给隐含层来不断调整误差函数。在计算误差梯度的同时,使用与上面同样的方法更新隐含层的权值。反复迭代更新,直到损失函数达到预定的理想目标。在弹性反向传播算法的学习过程中,权值的修正值即为学习率,而梯度只影影响权值变化的方向,即正负。

图1 反向传播神经网络模型

1.2 感知器神经网络
感知器(multilayer perceptron, MLP) 神经网络是模式识别的简单二元分类人工网络, 它通过权值模仿神经细胞的突触,用激活函数模仿细胞体,偏置即为阈值。单层的感知器网络结构如图2所示。单层感知器可将外部输入x分成两类:当感知器的输出y为正数或零时,输入属于第一类;当感知器的输出为负数时,输入属于第二类。

1.3 实现过程
(1)图像读取

在本文中,设计并自建了样本的数据库,库中有0~9共10个阿拉伯数字的5000张不同的手写数字图像,均为白底黑色的bmp格式的文件, 每个数字对应500张图片。实验要从每一个数字中都随机选取450张手写图像作为训练样本,每一个数字剩下的50张作为测试样本。部分数字样张如图3所示。

图3 数字样张
(2)提取特征
本设计中的训练样本数量多,而而一般神经网络输入层的神经元数就是训练样本向量的维数,因此需要对训练样本向量做降维预处理。预处理过程就是通过灰度阈值函数将图像转换成二值图像。降维前需先将所有图像做一次缩放,以确保每个图像的输入向量都具有相同的像素。本设计选定图像缩放的高度和宽度分别为70像素点和50像素点,符合一般手写阿拉伯数字的高宽比。对这些缩放后的图像作纵横切割,如图4所示,每10×10个像素点作为一系列像素块,构成一张包含35个像素块的二值图像计算每一个像素块中0和1的占比,并用它作为模式的一个特征值,这样可以构成5x7的特征值矩阵。考虑到感知器神申经网络输入向量只能是一维,故需要将此矩阵转换成一维向量作为训练样本的输入,转置后共生成35个一维向量。

图4 缩放后的图像切割

(3)构造标签
无论是训练样本还是测试样本,都需要构造标签,前者用于映射的学习,后者用于判断训练网络的正确率。一般地,输出层神经元个数即为分类网络中的分类类别数。阿拉伯数字是10类,故输出神经元数为10。每个类由具体的500个图像构成,包含训练样本和测试样本。通过提取特征每个类均生成35个一维向量:用500个列向量(1000000000)T来标注模式1,即数字1;(0100000000)标注模式2,即数字2;(0010000000)标注模式3,即数字3;依此类推,最后的(0000000001)标注模式0,即数字0。运行代码如下:

(4)随机选定训练样本和测试样本测试
利用MATLAB中已有的rand()伪随机数生成函数来生成5000个介于0和1之间的伪随机数。将生成的伪随机数做升序排序,通过索引来记录随机数原来的位置,并将原来的位置组合成新的行向量。在本设计中,输入层的神经元有35个,输出层神经元有10个,选取25为中间隐含层神经元个数。

(5)数字识别与正确率的计算
对比测试前的标签和仿真后的输出,用测试前的标签值减去输出值,得到误差值,将误差为0的视为正确识别,求出神经网络的正确率。

2 现成案例(代码+参考文献)
1【手写数字识别】基于matlab CNN网络手写数字识别分类【含Matlab源码 1286期】

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

3【手写数字识别】基于matlab GUI BP神经网络手写数字识别【含Matlab源码 1118期】

4【手写数字识别】基于matlab GUI RBM神经网络手写数字识别【含Matlab源码 1109期】

5【手写数字识别】基于matlab GUI SVM手写数字识别【含Matlab源码 676期】

6【手写数字识别】基于matlab GUI贝叶斯+线性分类器手写数字识别【含Matlab源码 828期】

7【手写数字识别】基于matlab GUI贝叶斯最小错误率手写数字识别【含Matlab源码 308期】

8【手写数字识别】基于matlab GUI模板匹配手写数字识别【含Matlab源码 094期】

9【手写数字识别】基于matlab GUI知识库手写数字识别【含Matlab源码 1227期】

10【手写数字识别】基于matlab PCA手写数字识别【含Matlab源码 309期】

11【手写数字识别】基于matlab RBF手写数字识别【含Matlab源码 471期】

12【手写数字识别】基于matlab知识库手写体数字识别【含Matlab源码 311期】

13【手写字母识别】基于matlab GUI BP网络手写体大写字母识别【含Matlab源码 183期】

14【手写字母识别】基于matlab GUI ELMAN+BP神经网络手写大写字母(A-O) 识别【含Matlab源码 785期】

15【手写字母识别】基于matlab GUI模板匹配手写大写字母(A-J) 识别【含Matlab源码 1107期】

16【数字识别】基于matlab离散Hopfield神经网络数字识别【含Matlab源码 226期】

17【数字识别】基于matlab数字仪表图像识别【含Matlab源码 693期】

18【印刷数字识别】基于matlab OCR识别系统【含Matlab源码 438期】

19【印刷字符识别】基于matlab OCR键盘数字+字母识别【含Matlab源码 807期】

20【印刷字符识别】基于matlab模板匹配英文字母识别【含Matlab源码 808期】

21【字符识别】基于matlab模板匹配(区域生长法) 字母+数字识别【含Matlab源码 1214期】

22【手写数字识别】基于matlab GUI BP神经网络手写数字识别(手写+带面板)【含Matlab源码 1196期】

23【手写数字识别】基于matlab GUI BP神经网络手写数字识别(导图+带面板)【含Matlab源码 320期】

24【字符识别】基于matlab GUI模板匹配(区域生长法)字母+数字识别【含Matlab源码 1695期】

3 Matlab毕设系列 —说明
Matlab毕设系列–说明
链接:https://qq912100926.blog.csdn.net/article/details/121363930

4 参考文献
[1]王永亮 .基于BP神经网络数字识别技术的研究[J].山西电子技术. 2021,(05)

毕设题目:Matlab手写或印刷数字字母识别相关推荐

  1. MATLAB实现数字识别系统,基于人工神经网络的MATLAB手写数字识别系统

    <基于人工神经网络的MATLAB手写数字识别系统>由会员分享,可在线阅读,更多相关<基于人工神经网络的MATLAB手写数字识别系统(8页珍藏版)>请在人人文库网上搜索. 1.基 ...

  2. 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    利用Python对MNIST手写数据集进行数字识别 一.编程环境Jupyter Notebook Jupyter Notebook,之前被称为IPython notebook,是一个交互式的Web应用 ...

  3. 手写字体的fisher算法识别

    代表了一些投影的方法 最佳W值的确定: 最佳w值的确定实际上就是对Fisher准则函数求取其达极大值时的. 对于这个问题可以采用拉格朗日乘子算法解决,保持分母为一非零常数c的条件下,求其分子项的极大值 ...

  4. 最好用的数学神器Mathpix Snip-公式神器,只要截图就能识别公式,手写的公式都能识别

    对于程序猿,LaTex 数学表达式少不了.既然要写 ML 数学表达式,那么神器 Mathpix Snip 就必不可少了,它可以将表达式截图转化为 LaTex 代码. [置顶] 现在mathpix sn ...

  5. matlab手写数字识别图片集下载,Matlab实现Mnist-image 手写数字图像识别

    [实例简介] CNN--卷积神经网络类数字识别matlab实现代码,原因是现在而与Matlab c++ / CUDA库前端比一个Matlab库.这个项目提供了matlab类卷积神经网络的实现.勒存这网 ...

  6. matlab手写神经网络实现识别手写数字

    实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手写数字图片,于是我就尝试用matlab写一个网络. 实验数据:500 ...

  7. 基于人工神经网络的MATLAB手写数字识别系统

    函数MouseDraw实现手写识别系统GUI界面的建立和鼠标手写的实现.(使用时保存为MouseDraw.m) function MouseDraw(action) % MouseDraw 本例展示如 ...

  8. matlab手写字母识别,一种基于MATLAB的手写字母的神经网络识别方法

    文章编号 :1009 - 671X(2001) 10 - 0028 - 03 一种基于 MATLAB 的手写字母的神经网络识别方法 邓铭辉 ,孙 枫 ,张 志(哈尔滨工程大学 自动化学院 ,黑龙江 哈 ...

  9. MATLAB手写识别

    文章在对BP神经网络基本原理研究的基础上提出了利用BP神经网络方法来实现手写数字识别的方案.通过MATLAB仿真实验表明基于BP神经网络的数字识别系统取得了良好效果.手写数字识别模式识别BP神经网络中 ...

  10. 基于RBF简单的matlab手写识别

    GetFeature.m %将图像分为25块,计算每一块的空白部分所占比例 function data=GetFeature(I) [row,col]=find(I==0); %返回数字的上下左右的边 ...

最新文章

  1. Object.create(..)和new(..)的内部实现
  2. mtcnn android
  3. vuepress 2.x 集成百度统计
  4. linux查看机器配置命令,linux 下查看机器配置的几个命令
  5. ICCV2021 MIT-IBM沃森开源CrossViT:Transformer走向多分支、多尺度
  6. git恢复到master版本_关于git,请教如何恢复版本库?
  7. smote算法_探索SMOTE算法
  8. 面试官问:“你还有什么事想问的?” 该怎么回答?
  9. java api微盘_新浪微盘的API Python版封装
  10. 怎样修改游戏服务器里的数据库,修改自己游戏服务器中的数据库
  11. Github / Gitlab Actions 中的 cron 格式 和设置方法
  12. Jetson TX2刷机教程
  13. 27岁从业软件测试5年的我被无情的辞退了
  14. 数据库数据采集利器FlinkCDC
  15. 区块链新秀DACC解决内容产业主要矛盾
  16. Android开发之BroadcastReceiver
  17. 【android】项目案例(三)之微信朋友圈上传,下载图片
  18. 仅用Python三行代码,实现数据库和excel之间的导入导出
  19. 婚礼答谢宴ppt模板_婚礼答谢宴主持词简短婚礼答谢宴的主持词.doc-资源下载-金锄头文库...
  20. java 实现在线编辑本地pdf文件内容

热门文章

  1. MySQL-快速入门(5)数据查询-常用关键字、分组查询、聚合函数
  2. GIMP的Path的import和export
  3. rest_framework 权限功能
  4. 容器化RDS|计算存储分离 or 本地存储?
  5. 前端js、jQuery实现日期格式化、字符串格式化
  6. 自动开票失败可能出现的错误信息
  7. ADO.NET Entity Framework(3)ObjectContext
  8. Flexsim 视觉类 平面 plane仿真对象模块化
  9. 20200708每日一句
  10. Processes and Threads 线程和进程的理解