一、获取代码方式

获取代码方式1:
完整代码已上传我的资源: 【手写字母识别】基于matlab GUI ELMAN+BP神经网络手写大写字母(A-O)识别【含Matlab源码 785期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、手写大写字母识别技术简介

1 引言
字符识别长期以来都是采用传统的识别方法,对印刷体字符的识别率一般只是稳定在96%左右,未能进一步提高,而对手写体字符的识别,其研究还处于探索阶段,其识别率还相当低,因此,为了提高识别率,就必须寻求新的方法和途径。
20世纪80年代中期, 人们已经开始利用人工神经网络解决手写体数字识别问题。人工神经网络为OCR研究提供了新的手段,它具有一些传统技术所没有的特点:1)具有很强的分类能力,可以在特征空间内形成任意复杂的决策区域;2)硬件实现后的神经网络分类速度比传统方法快得多;3)分类器便于训练,无需人为过多的干预。特别是对手写体字符识别问题,神经网络技术更显示出独特的优越性。
目前研究的神经网络字符识别系统可划分为两大类.第一类系统实际上是传统方法与神经网络技术的结合,这也是本文采用的方法.这类系统分为两块,第一块主要完成样本模式预处理和字符特征抽取任务,第二块是用前面获得的模式特征来训练神经网络分类器,从而达到识别字符的目的。这类系统充分利用了人的经验来获取模式特征以及神经网络的杰出分类能力来识别字符,是人们通常采用的方法。第二类系统省去了特征抽取工作,整个字符直接作为神经网络的输入,这类系统的神经网络结构的复杂度大大增加了,首先输入模式维数的增加导致网络规模的庞大,使得网络的训练、学习非常困难。此外神经网络结构上要消除模式变形的影响。通常这类网络都采用局部连接的方式减少网络的复杂度,并采用共享连接权的策略增强网络抗变形(输入模式)的能力。
由于人工神经网络具有并行处理和很强的容错性等特点,因此有可能大大提高手写体字母数字识别的准确率和速度。目前神经网络手写体字母数字识别系统的识别水平已与传统模式方法相当,且大有提高的余地。本文阐述了利用BP网络进行手写体字母(小写)、数字识别的一些尝试,取得了令人满意的测试结果。

2 预处理和特征抽取
2.1 样本集的获取和预处理
实验中所用的手写体数字样本集由1000个数字组成,它们是在屏幕上随意书写后,由象素点提取程序提取数据并存入磁盘文件,每个数字由6×8的网格数据组成。实验中所用的手写体小写字母样本集由400个字母组成,它们也是在屏幕上随意书写后,由象素点提取程序提取数据并存入磁盘文件,每个数字由8×10的网格数据组成。图1给出了部分原始数字图象和处理后的图像样本和部分原始字母图像和处理后的图像样本。

2.2 特征提取方法
字符是由弧线和直线构成的,弧线的弯曲方向和程度不同,字符的形状也就不一样。但是同一类不同形状的字符,它的端点数、交叉点数,点与点之间的相对位置及弧线的弯曲方向基本上是稳定的。而这些特征反映了字符的拓扑结构,是字符的重要特征。

图1 部分原始图象和处理后图像样本
我们所采用的特征提取方法是:在手写(用鼠标模拟)过程中,由于鼠标会在屏幕上留下轨迹,所以只要从鼠标按键到鼠标起键,分别记录下鼠标经过的最大最小横纵坐标值,就可以分别将数字、字母划分为6×8和8×10的结构(如图1所示)o在确定好字符所占的区域之后,对于每一个网格,按照12×16的点阵提取象素点,如果在12×16的点阵上存在象素点的象素值为字体颜色,则认为相应网格取值为1,否则取值为0。
例如:图1中数字2提取的特征值为:
0011100100100000100000100001100011000110001111111
字母a提取的特征值为:
00111000010011000100010010000100100001001000110010011100110101000110001000000001
所得到的数据作为神经网络输入层的输入数据。
在生成训练集时,不但要把上述数据存入磁盘文件,同时,还要将目目标值(数字2和字母a)也分别写入磁盘文件,作为训练集数据。

3 识别和训练
3.1 神经网络的结构及其优化

我们采用的是误差反向传播的BP网络,选一层隐含层,网络结构如图2所示。输入层神经元的数目即为输入样本的维数(数字48,字母80),输出层的神经元数目为10(数字)和26(字母),分别对应10个数字和26个字母。至于隐含层神经元数目目前只有在实验的基础上经验选取,在实验中,我们将数字识别神经网络的隐含层神经元设置为20,字母的设置为40。

图2 BP网络结构
3.2 识别的实现

本实验中, 经调试发现, 取η=0.1, μ=0.4时, 学习与收敛速度为最佳。

三、部分源代码

clear all;
%形成用户界面,添加图形窗口
H=figure('Color',[0.75 0.75 0.75],...'position',[400 200 500 400],...'Name','基于Elman神经网络和BP神经网络的字母识别',...'NumberTitle','off',...'MenuBar','none');
%画坐标轴对象,显示原始图像
h0=axes('position',[0.15 0.6 0.3 0.3]);
%添加图像打开按钮
h1=uicontrol(H,'Style','push',...'Position',[80 120 150 70],...'String','选择识别图片',...'FontSize',10,...'Call','op');
%画坐标轴对象,显示经过预处理之后的图像
h2=axes('position',[0.55 0.6 0.3 0.3]);
%添加预处理按钮
h3=uicontrol(H,'Style','push',...'Position',[280 120 150 70],...'String','图片二值化',...'FontSize',10,...'Call','preprocess');
%添加识别按钮
h4=uicontrol(H,'Style','push',...'Position',[280 50 150 70],...'String','识别字母',...'FontSize',10,...'Call','recognize');
%添加显示识别结果的文本框
%recognize
%生成向量形式
M=figure('Color',[0.75 0.75 0.75],...'position',[200 300 400 200],...'Name','字母识别结果',...'NumberTitle','off',...'MenuBar','none');
M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','请先训练网络',...'FontSize',12,...'call','delete(M(1)) ' );  for m=0:15q(m*16+1:(m+1)*16,1)=p1(1:16,m+1);
end
%识别显示
[a,Pf,Af]=sim(net,q);
a=round(a);
switch acase 0,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是A',...'FontSize',16,...'call',...'delete(M(1))'); case 1,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是B',...'FontSize',16,...'call',...'delete(M(1))'); case 2,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是C',...'FontSize',16,...'call',...'delete(M(1))'); case 3,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是D',...'FontSize',16,...'call',...'delete(M(1))'); case 4,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是E',...'FontSize',16,...'call',...'delete(M(1))'); case 5,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是F',...'FontSize',16,...'call',...'delete(M(1))'); case 6,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是G',...'FontSize',16,...'call',...'delete(M(1))'); case 7,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是H',...'FontSize',16,...'call',...'delete(M(1))'); case 8,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是I',...'FontSize',16,...'call',...'delete(M(1))'); case 9,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是J',...'FontSize',16,...'call',...'delete(M(1))'); case 10,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是K',...'FontSize',16,...'call',...'delete(M(1))'); case 11,M0=uicontrol(M,'Style','push',...'Position',[150 80 130 40],...'String','这个字母是L',...'FontSize',16,...'call',...'delete(M(1))');

四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

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

  1. 【光学】基于matlab GUI矩阵法和等效界面法光学薄膜对反射率影响【含Matlab源码 2102期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI矩阵法和等效界面法光学薄膜对反射率影响[含Matlab源码 2102期] 点击上面蓝色字体,直接付费下载, ...

  2. 【图像识别】基于BP神经网络实现手写体大写字母识别附matlab代码

    1 简介 手写体字符识别是人机交互领域的一个重要内容,本文基于 BP 神经网络实现了任意数量字符模版的多字符手写体字符识别.分为以下几步,第一,首先对目标图像进行识别前预处理.包括灰度图像二值化,图像 ...

  3. 【语音识别】基于matlab GUI动态时间规整算法(RTW)语音识别系统【含Matlab源码 341期】

    ⛄一.动态时间规整算法(RTW)语音识别 软件算法主要分为语音信号滤波去噪.预加重.分帧.端点检测.特征参数提取.模式匹配.算法的关键点和难点是特征参数提取和模式匹配.孤立词的语音识别应用程序也是基于 ...

  4. 【语音识别】基于matlab GUI MFCC+VAD端点检测智能语音门禁系统【含Matlab源码 451期】

    ⛄一.MFCC简介 1 引言 语音识别是一种模式识别, 就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术.语音识别技术主要包括特征提取技术.模式匹配准则及模型训练技术3个方面.目前一 ...

  5. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  6. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板+语音播报)【含Matlab源码 1220期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  7. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板)【含Matlab源码 790期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  8. 【芯片识别】基于matlab GUI形态学PCB板芯片识别【含Matlab源码 1820期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[芯片识别]基于matlab GUI形态学 PCB板芯片识别[含Matlab源码 1820期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  9. 【大米粒计数】基于matlab GUI形态学大米粒颗粒识别【含Matlab源码 915期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[大米粒计数]基于matlab GUI形态学大米粒颗粒识别[含Matlab源码 915期] (https://download.csdn. ...

  10. 【数字信号】基于matlab GUI电话按键识别【含Matlab源码 2382期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号]基于matlab GUI电话按键识别[含Matlab源码 2382期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

最新文章

  1. java实现七日股票问题_七日打卡--JAVA资源限制
  2. 简书 SSH 登录流程分析
  3. 6、android传递数据之剪切板传递数据
  4. 嵌入式linux系统,给WIFI模块增加一个开关
  5. 就业技术书文件表格_Word格式:工程预结算工作流程图及工作表单,附20余表格...
  6. PHP获取当前页面的网址
  7. 源码 连接mysql_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...
  8. nginx+keepalived详细配置信息
  9. jsonpath 判断是否包含_mysql json 判断某个key是否存在
  10. iview兼容ie8_iview在ie9及以上的兼容问题解决方案__Vue.js__JavaScript__前端__iView
  11. php使用jasperreport,用PHP访问JasperReport | 学步园
  12. android 获取网卡mac_android 获取MAC地址
  13. linux里centos7开放端口,linux centos7 防火墙及端口开放相关命令
  14. 2018在职计算机科学硕士申请,2018年哪些学校计算机在职研究生专业比较好
  15. 帝国 cms 列表 php,常用帝国cms目录结构分享
  16. GMA Round 1 YGGDRASIL
  17. 苹果Mac电脑开机启动时的声音如何关闭?
  18. 求一个3×3矩阵对角线元素之和。
  19. 推动“海纳众创”,打造“漫天繁星”:中国联通视频彩铃全国创意创新大赛开赛仪式顺利举行!
  20. 三千万单车产能大跃进:供应链提价,矛盾一触即发

热门文章

  1. iOS - LocalNotification
  2. C语言中scanf()的用法
  3. F.Studio 远程备份系统
  4. mysql 修改密码
  5. Ubuntu4.04 安装Mesos
  6. 20200713每日一句
  7. 20191115英文每日一句
  8. 传智播客Java学习之类的继承
  9. unity远程协同共享leap手势
  10. 181004有道扇贝每日一句