# 基于Matlab及Bayer/Fisher分类器的手写数字识别
## 项目介绍
这个项目源自于老师布置的一个模式识别大作业,要求使用Matlab实现对手写数字的识别工作,为了展示的直观还设计了GUI界面。因为刚开始,所以首先学会用最传统简单的Bayes分类器去做,接着又使用同样的数据集使用Fisher分类器去实现。Bayes分类器的分类准确率为80%,Fisher分类器的分类准确率为78%。
## Bayes分类器文件结构及用途介绍
**Trainset**:使用GUI手写板输入并保存下来的数字图片训练集,一共分为0-9十个类别,每个类别单独放在一个子文件夹中,子文件夹中各有10张手写数字图片
**singleNum_feature_extraction.m**:函数功能为将图片中保留有的坐标轴部分截除(手写板保存下来的图片左边及下边都会有坐标轴相关的线,会一定程度上影响后面特征的提取,故而要去掉),对图片就行二值化,接着获取书写数字所在的区域,将获取的区域图片分成10x10batches,当batch中像素值为1的个数大于该batch像素总数的十分之一时(当然这个阈值可以自己设定),将该batch直接置为1,否则为0。最后这个函数返回的是1x100的行向量,及该数字图片的100个特征值
**feature_struct_build.m**:调用singleNum_feature_extraction.m遍历TrainSet中各类别的所有图片,计算出训练集的特征数据,并保存为有着label和feature两字段的结构体变量,feature为元胞数组,因为每个类别有10张图,所以每个label对应的feature有10个cell,cell中的数据即为每张图片提取出来的1x100特征。最后该结构体变量,以便构造贝叶斯分类器的时候调用。
**featureData.mat**:上述save下来的结构体变量
**bayesClassifierBulid.m**:构造贝叶斯分类器,并返回label。具体原理可参考[CSDN博客](https://blog.csdn.net/weixin_39758398/article/details/86597147)的分类器设计部分。
**interface.m与interface.fig**:GUI文件。下面是GUI的界面:<div align=center><img width="500" height="500" src="https://github.com/GYee/Matlab-HandWriting_Number_Recognition/raw/master/GUI界面.png"/></div>
**Acc1.rar**:(请下载解压缩后再看本段后面的文字)压缩包中挺多文件的,其主要的功能是实现基于定义的类条件概率密度函数构造的贝叶斯分类器的准确度测试。训练和测试样本集来自于opencv库自带的一张digits.png图片,图片里面是5000个手写数字,每个类别500个,每个数字占用的空间是20乘以20pixels.所以里面的digits_segmentation.m文件就是用来切割digits.png图片并保存的,接着将切割下来的图片按照类别分别放到不同的文件夹中,最后从每个类别中随机挑选出100张图作为测试集,剩下的全部作为训练集。这些图片的特征提取方法跟上面讲述的一样,feature_struct_build.m文件就是用来生成训练集和测试集的特征数据的,并保存为两个mat文件,最后打开Acc_test.m文件调用这两个mat文件进行准确地测试,可得准确率80.1%。对于这样简单的分类器来说,这样的准确度还算可以接受了,当然你要想用自己的图片集来测试准确度也可以,方法是:打开feature_struct_build.m文件,修改文件路径为你图片集所在的路径,生成对应的特征数据并保存为mat文件,最后运行Acc_test.m即可。
## 使用方法
将所有files下载放到同一个目录下,打开interface.m文件运行,会跳出一个GUI界面,然后在手写板上用鼠标写0-9其中一个数字,点击“确认”按钮即可。当想再次输入另外一个数字时,请先点击“清除”按钮。
因为训练集是我个人建的,且数量比较少,可能对其他人的手写数字识别的准确度不高,这时你可以自己建立训练集。具体方法为:打开GUI界面,在速写板上用鼠标写数字,点击“确认”,这时候会在文件夹目录下生成一个output.jpg图片,重命名(例如1-1.jpg)后放到TrainSet/1/文件夹中,以此类推,一个类别的训练图片数量不限,越多越好啦!
构建好TrainSet后,打开feature_struct_build.m文件,生成新的featureData.mat。
最后再次在GUI界面中输入手写数字,就能很好地识别啦!
## Fisher压缩包文件中的文件结构及使用方法同上面描述的一致,故不再重复,下载即可使用!
***第一次写,很多不完善的地方,会慢慢改进,还望大家体谅啦哈哈哈哈!!!***
***代码和文字都是一个字一个字打出来的,非常不容易,转载请标明出处哦!***
没有合适的资源?快使用搜索试试~ 我知道了~
【计算机课程作业/毕设】数字识别学习课题毕业设计程序完整代码
共38个文件
sample:13个
head:4个
m:4个
4 下载量 101 浏览量
2023-05-05
09:02:51
上传
评论
收藏 9.83MB RAR 举报
温馨提示
数字识别是一种基于人工智能和图像处理的技术,旨在识别数字图像中的数字字符,并将其转化为数字形式的数据。数字识别已经广泛应用于识别信用卡号码、车牌号码、邮政编码等领域。 数字识别的实现过程,通常需要经过以下几个步骤: 第一步,数据采集。数字识别需要大量的数据集来进行训练和测试,因此,需要收集大量的数字图像数据。 第二步,数据预处理。对于采集到的数字图像数据,需要进行一系列的预处理,包括图像去噪、图像增强、二值化、字符分割等等。 第三步,特征提取。在数字识别过程中,需要将数字图像转化为数字形式的数据,因此需要将数字图像中的特征提取出来,比如数字的轮廓、角度、弯曲程度等等。 第四步,模型训练。在数字识别中,通常会选择一些机器学习算法或深度学习模型来进行训练,以实现对数字图像的自动识别。 第五步,模型测试。在完成模型训练后,需要对其进行测试,以检测其对数字图像的识别准确率和鲁棒性。 最后,将训练好的模型应用到实际场景中,以实现对数字图像的自动识别和处理。 在数字识别的发展过程中,随着人工智能和深度学习技术的不断发展,数字识别的准确率和鲁棒性在不断提高,同时也在被应用到更广泛。
资源推荐
资源详情
资源评论
收起资源包目录
sxsjnumber.rar (38个子文件)
Matlab-HandWriting_Number_Recognition
featureData.mat 2KB
feature_struct_build.m 1KB
GUI界面.png 17KB
singleNum_feature_extraction.m 2KB
TrainSet.rar 527KB
interface.m 9KB
.git
index 962B
HEAD 23B
refs
heads
master 41B
tags
remotes
origin
HEAD 32B
objects
pack
pack-0018db4dd4aaae84238baba996d6b48bbf112e02.idx 2KB
pack-0018db4dd4aaae84238baba996d6b48bbf112e02.pack 2.34MB
info
description 73B
packed-refs 114B
info
exclude 240B
logs
HEAD 208B
refs
heads
master 208B
remotes
origin
HEAD 208B
hooks
post-update.sample 189B
prepare-commit-msg.sample 1KB
commit-msg.sample 896B
pre-receive.sample 544B
update.sample 4KB
pre-commit.sample 2KB
pre-rebase.sample 5KB
applypatch-msg.sample 478B
fsmonitor-watchman.sample 5KB
push-to-checkout.sample 3KB
pre-applypatch.sample 424B
pre-push.sample 1KB
pre-merge-commit.sample 416B
config 328B
interface.fig 33KB
output.jpg 10KB
bayesClassifierBulid.m 2KB
fisher.rar 3.54MB
Acc1.rar 3.36MB
README.md 5KB
共 38 条
- 1
资源评论
全球学习中心
- 粉丝: 3
- 资源: 90
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功