手写体数字识别课案.docx
- 文档编号:8604746
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:15
- 大小:318.89KB
手写体数字识别课案.docx
《手写体数字识别课案.docx》由会员分享,可在线阅读,更多相关《手写体数字识别课案.docx(15页珍藏版)》请在冰豆网上搜索。
手写体数字识别课案
手写体数字识别
摘要:
手写体数字识别系统依托计算机应用软件,利用C++程序设计的相关知识,运用模块设计等相关技术,最终完成手写体识别系统的程序综合设计。
关键字:
手写体数字处理模式识别程序设计
Abstract:
Handwrittendigitalidentificationsystemreliesoncomputerapplicationsoftware,usingtheC++programmingknowledgeandmoduledesigningrelatedtechnology,.Finallyitcompletestheprogramintegrateddesignofhandwrittenidentificationsystem.
Keywords:
HandwritingDigitalProcessingPatternrecognitionProgramdesign
一、论题概述
模式识别是六十年代初迅速发展起来的一门学科。
由于它研究的是如何用机器来实现人(及某些动物)对事物的学习、识别和判断能力,因而受到了很多科技领域研究人员的注意,成为人工智能研究的一个重要方面。
字符识别是模式识别的一个传统研究领域。
从50年代开始,许多的研究者就在这一研究领域开展了广泛的探索,并为模式识别的发展产生了积极的影响。
字符识别一般可以分为两类:
1.联机字符识别;2.光学字符识别(OpticalChara-cterRecognition,OCR)或称离线字符识别。
在联机字符识别中,计算机能够通过与计算机相连的输入设备获得输入字符笔划的顺序、笔划的方向以及字符的形状,所以相对OCR来说它更容易识别一些。
但联机字符识别有一个重要的不足就是要求输入者必须在指定的设备上书写,然而人们在生活中大部分的书写情况是不满足这一要求的,比如人们填写各种表格资料,开具支票等。
如果需要计算机去认识这些己经成为文字的东西,就需要OCR技术。
比起联机字符识别来,OCR不要求书写者在特定输入设备上书写,它可以与平常一样书写,所以OCR的应用更为广泛。
OCR所使用的输入设备可以是任何一种图像采集设备,如CCD、扫描仪、数字相机等。
通过使用这类采集设备,OCR系统将书写者已写好的文字作为图像输入到计算机中,然后由计算机去识别。
由于OCR的输入只是简单的一副图像,它就不能像联机输入那样比较容易的从物理特性上获得字符笔划的顺序信息,因此OCR是一个更具挑战性的问题。
数字识别是多年来的研究热点,也是字符识别中的一个特别问题,它是本文研究的重点。
数字识别在特定的环境下应用特别广泛,如邮政编码自动识别系统,税表和银行支票自动处理系统等。
一般情况下,当涉及到数字识别时,人们往往要求识别器有很高的识别可靠性,特别是有关金额的数字识别时,如支票中填写的金额部分,更是如此。
因此针对这类问题的处理系统设计的关键环节之一就是设计出高可靠性和高识别率的数字识别方法。
然而可以说还没有哪个数字识别器达到完美的识别效果。
在过去的数十年中,研究者们提出了许许多多的识别方法。
按使用的特征不同,这些方法可以分为两类:
基于结构特征的方法和基于统计特征的方法。
结构特征通常包括圆、端点、交叉点、笔划、轮廓等,统计特征通常包括点密度的测量、矩、特征区域等,一般来说,两类特征各有优势。
例如,使用统计特征的分类器易于训练,而且对于使用统计特征的分类器,在给定的训练集上能够得到相对较高的识别率,而结构特征的主要优点之一是能描述字符的结构,在识别过程中能有效地结合几何和结构的知识,因此能够得到可靠性较高的识别结果。
二、模式识别与BP神经网络
在观察各种事物或接受各种客观现象时,人们总是不断地进行模式识别。
各种具有相似的特征又不完全相同的事物和现象组成不同的类别。
在同一类别中,事物和现象不尽相同,但它们总是表现出某些方面的相近之处。
例如,每个人写出来的数字“8”可能千差万别,但它们的共同之处在于,它们都属于数字,“8”这个范畴。
也就是说,这些千差万别的数字“8”的共性是它们具有相同的属性特征。
人的思维可以对初次见到的事物进行分类。
比如,即使人们初到一个城市,也可以轻易地辨认出“街道”、“房屋”、“汽车”这样的事物。
同样,看到另外一种写法的“8”,人们仍然可以清楚地知道它的含义。
正是人脑的这种推广能力,使得人们利用见到过的有限事物和现象,形成各种事物类别的概念。
这些有限的、个别的事物和现象就可以称为模式,而整个类别的现象和事物则可以称为模式类,或者简称为类。
人们根据所见模式的特性,将其划归为某一类的过程,实际上就是模式识别的过程。
模式识别这个词既可以是指人对事物的,一个分析、描述、判断和识别的过程,也可以是指利用计算机对某些物理对象进行分类的这门学科。
模式和集合的概念是分不开的,模式可以看作是集合论中的元素,而类则可以看作是子集。
神经网络的概念、原理和设计是受生物、特别是人脑神经系统的启发提出的.神经网络由大量简单的处理单元来模拟真实人脑神经网络的机构和功能以及若干基本特性,是一个高度复杂的非线性自适应动态处理系统.BP网络是1986年由Rinehart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一.BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程.它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小.BP神经网络模型拓扑结构包括输入(input)、隐层(hidelayer)和输出层(outputlayer),如图1所示:
三、基于BP神经网络的手写数字识别
(一)输入向量与目标向量
首先对手写数字图像进行预处理,包括二值化、去噪、倾斜校正、归一化和特征提取,生成BP神经网络的输入向量Alphabet和目标向量Tar2get.其中Alphabet选取40×10的矩阵,第1列到第10列代表0~9的数字.Target为10×10的单位矩阵,每个数字在其所排顺序位置输出1,其他位置输出0.
(二)BP神经网络的构建
BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成.正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元.若在输出层得不到期望的输出,则转向误差信号的反向传播流程.通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程.首先考虑正向传播,设输入层有n个节点,隐层有p个节点,输出层有q个节点.输入层与隐层之间的权值为vki,隐层与输出层之间的权值为wjk.隐层的传递函数为f1(x),输出层的传递函数为f2(x),则隐层节点的输出为
输出层节点的输出为
通过式
(1)和
(2)可得BP神经网络完成n维到q维的映射.其次考虑反向传播.在反向传播中,需要对不理想的权值进行调整,BP神经网络的核心要务即在于调权.定义误差函数,设输入P个学习样本,用x1,x2,⋯,xp来表示.第p个样本输入网络得到
输出ypj(j=1,2,⋯,q),其误差为
式中
为期望输出.P个样本的全局误差为将式
(3)代入得
输出层权值的变化采用累计误差BP算法调整wjk使全局误差E变小,即
式(5)中η为学习率.现定义误差信号为
将式(3)代入可得第一项为
第二项为输出层传递函数f2(x)的偏微分
将式(7)和(8)代入可得误差信号为
则输出层各神经元权值△wjk调整公式将式(9)代入可定义为
在得到输出层权值调整公式后,需要定义隐层权值△vki调整公式
根据输出层各神经元权值△wjk调整公式推导过程,可得△vki为
四、数字识别系统的设计与实现
(一)设计基本原理
程序设计过程,将整个系统问题分割成若干个子问题来做,主要包括图像数据输入模块GetDIB()、二值化模块Threshold()、平滑滤波模块Smooth()、分割模块divide()、字符切分模块CharSegment()、字符识别模块CharRecognition()。
首先分别对每个模块进行单元测试分析和模块测试,然后再组合成系统,进行系统测试。
图4-1系统逻辑模型流程图
此图为系统逻辑模型流程图,其中细箭头代表程序的进程,整个程序就是按上图所示流程编写的。
(一)数字识别中的图像预处理
神经网络为数字识别提供一个强有力的手段。
目前,在神经网络模式识别中根据对输入样本的表达方式的选择有下面两大类:
一类是直接将数字图像经数值化处理之后得到的像素点原始样本作为神经网络的输入;另一类则是对这种原始像素点构成的原始输入样本再作进一步的预处理或变换。
虽然,在某些情况下,人们采用第一类样本表达获得了较好的识别结果,但这种输入方式,通常使得网络分类器结构的复杂程度大大增加,所以,对原始样本进行预处理,已成为神经网络模式识别成功的一个很重要的方面。
对于数字的预处理,人们己作了许多工作,但归根结底有下面几步:
首先是将数字转化为n*n像素点矩阵形式,再经二值化处理,可以得到原始的输入表达方式。
接下来,对原始样本表达进行一些常规变换,包括平滑、锐化、规格化和细化。
而本文是通过大量的样本训练网络,以达到预期的识别率。
1.数值化
数字识别时,首先将印在纸上的数字经过光电扫描产生模拟信号,再通过模数转换变成表示灰度值的数字信号输入计算机。
纸张薄厚、洁白度、光洁度、书写力度和笔划质量都要造成字形的变化,产生污点、飞白、断笔、交连等干扰。
因此,一般由扫描得到的数值化的字符还需要多种进一步的处理。
2.二值化
二值化处理是将数字图像转化为由0和1表示的值像素矩阵形式,最简单也是最原始的作法是将整个数字所在区域用n*n网格划分,然后将数字笔划通过的网格内填1,不通过的网格内填0,这样就将整个数字变为一个由二值构成的矩阵。
而在采用光电扫描仪对数字进行扫描输入时,通常是将数字转换为带灰度值的数字信号输入计算机。
因而,二值化的工作不再是简单的笔划通过与否。
3.平滑
实际获得的图像在形成、传输、接受和处理的过程中,不可避免地存在着外部干扰和内部干扰,如光点转换过程中敏感元件灵敏度的不均匀性,数字化过程的量化噪声,传输过程中的误差以及人为因素等,均会使图像质量变差,使图像模糊。
因此,消除噪声,恢复原始图像是图像处理中的一个重要内容。
图像平滑的目的有两个:
改善图像的质量和抽出对象的特征。
平滑的办法有中值滤波,均值滤波等很多方法,本设计选择的平滑技术是中值滤波法。
4.锐化
图像的锐化处理主要用于增强图像中的轮廓边缘,细化以及灰度跳变部分,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面的区域检测出来的目的。
它是早期视觉理论和算法中的基本问题,也是中期和后期视觉成败的重要因素之一。
与图像的平滑处理一样,图像的锐化也有很多处理方法,如针对平均或积分运算使图像模糊,可逆其道而采取微分运算,使用高通滤波器优化高频分量,抑制低频分量,提高图像边界清晰度等。
在设计中选择使用了梯度锐化法.
梯度幅度比例于相邻像素的灰度级差值。
在灰度陡变区域,梯度值大;在灰度相似区域,梯度值小;在灰度级为常数的区域,梯度为0。
熟悉梯度的这些性质,根据不同的目的选择不同的算法,就能获得满意的锐化效果。
5.字符切分
数字识别常用于邮政编码的自动识别和支票的检验等。
在这些应用中,给出的数字往往是互相牵连,并且常带有覆盖相交叉,所以为了获得可以进行识别的输入样本表达,必须进行数字之间的分离,消除不必要的记号和符号。
经过文字切分得到的一个个独立的样本,可以用于进一步的处理。
通常可以依据两种原则进行分割。
一是依据各个象素点的灰度不连续性进行分割;一是依据同一区域具有相似的灰度(或组织特性)这一特征,寻求不同区域之边界。
前者称为基于点相关的分割技术,后者称为基于区域相关的分割技术。
本设计中选择使用基于灰度阈值的全局阈值化方法.
这是一种最常用、同时也是最简单的分割方法,它特别适用于对象和背景占据不同灰度级范围这类图像。
此时,我们只要选取一个适当的灰度级阈值,然后将每个象素灰度和它进行比较。
超过阈值的重新分配以最大灰度(例如255),低于阈值的分配以最小灰度(例如0),那么,我们就可以组成一个新的二值图像,并成功地把对象从背景中显露出来。
在分割之前进行背景平滑和噪声消除,常常能改善分割的性能。
6.规格化
由于样本数字大小不一,为了便于提取数字特征,需要对样本进行尺寸大小规一化,或者说是将数字的长度和宽度都调整到充满整个n*n的网格之中。
7.细化
在传统的模式识别中,对于数字的特征提取往往是从字形结构的提取入手。
因而人们认为在二值化的字符图像中,对识别有价值的字符特征主要集中在字符的轮廓或者骨架上。
基于这种认识,在经过以上几个步骤的处理,得到干净、平滑、规范的样本集合之后,往往要进行细化。
即将字符中的粗细不等的笔划变换成只有一层像素点构成的统一的笔划。
细化的基本原理都是从字的边界开始逐层移去黑点,直到寻找到一个集合,此集合与其边界相重合,这种方法被称为脱壳算法。
关于细化及快速细化的算法有许多,比如快速细化算法QA,Rutorit算法(简称RA),Hildith算法(简称HA)等。
经过上面几个步骤的预处理变换,则可以获得一种简单像素点输入样本表达。
对传统的识别系统,这种样本不能直接进行识别,以上的步骤只是为特征提取选择打下基础。
而对于神经网络识别系统,这种简单样本表达可以直接输入进行模式识别。
但是,这种简单的原始二值表达式在代表数字时有下面几点不足:
1、样本维数很大,而中间许多特征不一定有用;
2、没有将那些真正反映数字特点的特征突出出来;
3、对于不同数字的外围或边缘及主干特征并没有考虑进去,这样对一些有相似部分的数字容易出现误识。
由于上面三方面的原因,在神经网络模式识别中,我们要用带污染的输入量去训练神经网络,使其具有一定的抗干扰能力,这样对所要识别的数字,能达到更好的识别率。
(二)BP网络在数字识别中的应用设计
BP算法的流程图如下图所示。
(三)程序设计编写
以VC++为手段,在BP神经网络的基础上进行编程以实现手写数字的识别,以下是部分实验代码:
//patternView.h:
interfaceoftheCPatternViewclass
//
///////////////////////////////////////////////////
#if!
defined(AFX_PATTERNVIEW_H__696AB6FA_20EF_46BB_B9DE_8654C84DC5DE__INCLUDED_)
#defineAFX_PATTERNVIEW_H__696AB6FA_20EF_46BB_B9DE_8654C84DC5DE__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
typedefstructtezheng{
signedcharvalue;//数字值
signedcharVHDerection[15];//水平垂直特征
//right--1down--2left--3up--4
signedcharlenth1;//第一个笔画长度1-4>4
signedcharlenth;//最后一个方向的长度1-4
(1)>4
(2)
signedchardecon;//有无断点等于1有断点
signedcharlenfirst;
signedcharlenend;
}TEZHENG;
classCPatternView:
publicCView
{
protected:
//createfromserializationonly
CPatternView();
DECLARE_DYNCREATE(CPatternView)
//自己定义的变量
public:
unsignedcharbitgraph[16][16];//为了以后对扩展时对扫描图像处理方便
intmouseDown;
CPointmypoint[100],oldpoint;//模拟手写板输入
intmytime;//手写板输入的时间序列
intcurvalue;//当前输入的数字
TEZHENG*mytezheng;
CFilecf;//用于保存特征的文件
//Attributes
public:
CPatternDoc*GetDocument();
//Operations
public:
voidGetTeZheng(void);
voidOnStudy(void);
voidOnRecognize(void);
voidOnClear(void);
voidOnMyHelp(void);
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CPatternView)
public:
virtualvoidOnDraw(CDC*pDC);//overriddentodrawthisview
virtualBOOLPreCreateWindow(CREATESTiRUCT&cs);
protected:
virtualBOOLOnPreparePrinting(CPrintInfo*pInfo);
virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo);
virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo);
//}}AFX_VIRTUAL
//Implementation
public:
virtual~CPaatternView();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
protected:
//Generatedmessagemapfunctions
protected:
//{{AFX_MSG(CPatternView)
afx_msgvoidOnLButtonDown(UNITnFlags,CPoiintpoint);
afx_msgvoidOnMouseMove(UNITnFlags,CPoiintpoint);
afx_msgvoidOnLButtonUp(UNITnFlags,CPoiintpoint);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#ifndef_DEBUG//debugversioninpatternView.cpp
inlineCPatternDoc*CPatternView:
:
GetDocument()
{return(CPatternDoc*)m_pDocument;}
#endif
///////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif
//!
defined(AFX_PATTERNVIEW_H__696AB6FA_20EF_46BB_B9DE_8654C84DC5DE__INCLUDED_)
识别系统运行的结果
参考文献:
1吴佑寿,丁晓青汉字识别原理方法与实现北京高等教育出版社,
1992
2PandyaAS,MacyRB.神经网络模式识别及其实现
北京电子工业出版社1999;57-110
3VapnikVN.张学工译统计学习理论的本质,北京;
清华大学出版社,2000;85-124
4手写体数字识别技术的研究北京理工大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手写体 数字 识别
![提示](https://static.bdocx.com/images/bang_tan.gif)