基于人工神经网络的手写识别系统_第1页
基于人工神经网络的手写识别系统_第2页
基于人工神经网络的手写识别系统_第3页
基于人工神经网络的手写识别系统_第4页
基于人工神经网络的手写识别系统_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 绪论学 号 密 级 基于人工神经网络的手写识别系统Handwriting Recognition System Based on Artificial Neural Network学生姓名:所在学院:所在专业:指导教师:职 称:所在单位:论文提交日期:论文答辩日期:学位授予单位:摘要信息技术的快速发展,计算机迅速走进人们的生活,手写识别技术和应用领域越来越广泛,比如在移动设备上、文印工作中都离不开它的身影,极大的方便了人们的日程生活、工作、学习,因此手写识别具有很强的应用价值和实用价值。本文中利用神经网络算法识别数字图像和手写汉字。识别的前提是获得稳定的神经网路,需要通过大量的训练样本

2、进行训练。针对数字图像首先对图像进行处理,通过灰度化、二值化、中值滤波、梯度锐化、归一化等算法获得特征矩阵,然后用经过训练的神经网路算法识别需要识别的特侦矩阵,进而获得识别的结果。针对汉字识别,首先处理图像获得特征矩阵,通过经过训练的神经网络的识别获得笔画,然后用笔画去识别汉字,最后获得识别的汉字以及联想汉字和词组。经过测试和验证,基于人工神经网络的手写识别系统能够有效识别数字手写图像与手写汉字,在本文选用的一些测试文字与数字图像的识别上获得了不错的结果。关键词:手写识别;图像处理;神经网络ABSTRACTThe rapid development of information technol

3、ogy makes the computer immediately appear in peoples lives. The application of handwriting recognition technology becomes widespread, and there are more and more application areas. For example, we can see it on a mobile deviceand in the printing work. It makes peoples daily life, work and learning m

4、ore convenient. Therefore, the handwriting recognition has very strong applied value and practical value.In this article, the writer uses neural network to identify digital image and handwriting Chinese ideogram. The premise of recognition is to obtain a stable neural network and a great deal of sam

5、ple training is needed. For digital image, we need to process the images, and get characteristic matrix through a series of algorithms, including graying, linearization, Median filter, gradient sharpening and normalization.For Chinese ideogram recognition,we should gain a characteristic matrix by pr

6、ocessing images, and then get painting pen through the training neural network identification.Next, we use painting pen to recognize Chinese ideogram.At last, the Chinese ideogram and associative Chinese characters and phrases will be obtained.After testing and verification, handwriting recognition

7、which is based on artificial neural network system can effectively identify the handwriting image and Chinese ideogram. We obtain satisfying results in the identification test on words and digital image.Key words: Handwriting recognition;image processing;neural networkI目录第1章 绪论11.1 课题研究的背景11.2 课题研究的

8、目的及意义11.3 国内外研究现状21.4 课题研究内容21.5 论文的组织结构3第2章 神经网络算法的原理42.1 神经网络的原理42.1.1 生物神经元网络42.1.2 人工神经元网络42.2 神经元学习算法62.2.1 前馈神经网络62.2.2 感知机62.2.3 反向传播算法82.2.4 神经网络在模式识别上面的优势112.3 本章小结11第3章 系统设计与实现123.1 神经网络算法的实现123.1.1 神经网络的结构123.1.2 算法的结构123.2 神经网络识别手写数字143.2.1 手写数字的常规预处理方法143.2.2 图像的灰度化153.2.3 图像的二值化153.2.4

9、 中值滤波163.2.5 去掉离散点163.2.6 图像锐化173.2.7 数字的切分183.2.8 数字的归一化193.2.9 特征提取193.2.10 数字识别过程193.2.11 神经元规模的确定213.3 神经网络识别汉字213.3.1 笔画的预处理223.3.2 图像的处理233.3.3 神经网络规模的确定243.3.4 字库的管理方式243.3.5 汉字的查询273.3.6 联想词组的查询283.4 UI界面的实现293.4.1 主窗口的自绘实现293.4.2 自绘控件的实现303.5 本章小结32第4章 系统测试及效果分析334.1 系统测试334.1.1 神经网络算法的测试33

10、4.1.2 手写数字识别的测试334.1.3 手写汉字识别的测试364.2 本章小结37结论38参考文献39致谢41第1章 绪论1.1 课题研究的背景手写识别的研究具有很大的使用价值,在过去的几十年,由于数字化、信息化的大力发展,手写识别成为模式识别的一个热点。随着手机、平板等电子产品的快速发展,手写识别技术在这些产品上已经广泛应用,既能够提升这些产品的用户体验、也能提高不少的效率。与此同时,现实生活中存在大量的手写、打印文件等,有的需要整理成电子文档,如果用人力去将该文件录入到电子设备当中,不仅效率低而且错误率高,这种方法已经不适应当今社会,由于现在电子计算机的广泛应用于各行各业,但是由于各

11、种各样的原因,智能识别系统不能广泛应用于社会,极大影响了人们的生活、工作效率。人工智能有一段时间曾经陷入低迷,大众都认为人工智能只是个玩具而没有实际应用价值。进入21世纪以来,数学的大力发展大大推动了人工智能的进步,也大大推动了计算机科学的发展。机器学习是人工智能的一个重要分支,也是现在的一个热点。一个真正的智能,应该具有学习能力,能够根据自身的环境来学习,并改善自身的性能,能够自动获取学习所需要的知识。以前的智能系统不具有学习能力,只是根据某些算法去计算,随着时代的发展,这种局限表现的更加突出。在这种现象下,机器学习在很大程度上解决了这种局限。现在机器学习已经应用到各个领域,比如专家系统、语

12、音识别、搜索、计算机视觉等。神经网络是机器学习学科中的一个重要部分,用来分类或者回归。神经网络的发展,为手写识别提供了一个新的途径。1.2 课题研究的目的及意义单个神经元的结构简单,但是当大量的神经元组成了神经网络,就有了本质的改变,它能够模拟现实生活中的行为,而且每个神经元都能处理和存储信息,使得神经网络具有了并行计算和分布式存储的特点。研究神经网络的结构有助于更好的从手写字中踢出去关键因素,从而提高识别的准确度和丰富度。研究手写识别具有很大的应用价值,将其应用于现代便携电子设备,丰富了人们的生活,提高工作效率。将其应用于手写文档的识别,不仅能将人们从繁重重复的劳动中解脱出来,而且能够提高手

13、写文档电子化的效率。手写识别有很重要的理论价I值,人们书写的文字种类不同,每个人的书写习惯不同,使得识别的样本具有丰富的多样性,识别算法需要从不同的方面进行研究。1.3 国内外研究现状在20世纪20年代,西方学者就研究过字符的识别,最早的是德国人G.Tausher的阅读机,采用的比较简单的匹配原理,能够粗略的识别简单的字符比如数字。到了20世纪60年代初,OCR(广字符阅读机)已经能够识别书写比较公正的手写体字符了,比如日本的Toshiha公司开发的邮政编码自动分拣机。到了近代,人工智能的发展,神经网络走入了人们的视线,它具有众多优点,能够有效利用样本的特点进行学习,然后根据学习的结果识别手写

14、字符1。由于汉字的基数大、写法复杂、字体繁多,识别起来难点很大,所以汉字的识别被认为是字符识别领域的最终目标,很多人投入了大量的精力,也取得了很大的成就2。汉字的识别最开始始于1966年,IBM公司的Casey和Nagy首次发表了汉字识别的文章。国内的汉字识别技术始于20世纪70年代,当时是联机手写识别技术,经过长时间的摸索之后,刘迎健等人于1988年提出了利用笔段作为基元来进行联机的手写汉字识别,识别的汉字能够达到6763-12000字,已经具有了一定的实用价值。现在的手写识别技术较上个世纪,已经有了长足的进步,识别范围能够支持GB2312-80规定的6763个简体字,对于书写规范的汉字,识

15、别率能够达到95%以上3,4。1.4 课题研究内容本课题研究的是一个基于神经网络的手写识别系统。系统由C+语言开发完成,负责神经网络前馈网络、反馈神经网络、界面的设计、图形的处理、图形的识别、字库管理程序的设计,手写识别系统包括神经网络算法的设计。系统研究的是基于神经网络的手写识别,包括数字与汉字的识别。数字与汉字的识别方法不一样,数字比较简单,数量只有10个,汉字较为复杂,数量大,所以针对这两种模型采用了不同的思路。本文首先从理论上介绍了神经网络算法,然后介绍了数字的识别方法、汉字的手写识别方法。数字的识别能够识别两种模式的数字,第1种是直接通过手写工具写在手写板上的数字,通过神经网络的分类

16、,得出书写的结果;第2种是加载含有噪声的数字,首先通过计算机图形学的知识降噪,然后通过神经网络分类得出结果。汉字的识别是将汉字拆分成元字根,本系统根据笔尖的走向,判断出书写的笔划,然后通过笔划来判断汉字。1.5 论文的组织结构本文共分为4章,按如下方式组织:第1章是全文的绪论部分,介绍了系统开发的背景,系统的研究的目的和意义,国内外的研究现状,课题的研究内容,系统的预期效果和关键指标以及本文的组织结构。第2章是神经网络算法的介绍,这部分详细介绍了神经网络算法,然后介绍了神经网络中的BP神经网络算法。第3章是手写识别的基本过程,这部分介绍了神经网络的实现、对图形的处理、特征向量的提取、以及汉字和

17、数字的手写识别过程,以及用户界面的实现过程。第4章是介绍了系统的测试部分,这部分主要介绍了手写识别系统的三个部分的测试。最后是结论部分,对全文进行了全面的总结。39第2章 神经网络算法的原理第2章 神经网络算法的原理人工神经网络(Artificial Neural Network,ANN)由大量的神经元组成,结构与脑神经 组织相似,是对生物神经元的模拟,能够完成与生物神经元网络类似的功能。2.1 神经网络的原理2.1.1 生物神经元网络人脑的神经系统的基本组成单位是神经细胞,人脑组织的神经系统大约由1011个神经元细胞组成,而每个神经细胞大于与104个神经细胞相连接,通过大量的神经细胞的活动,

18、完成人神经系统的活动。在神经系统中,有的能力是先天就有的,比如呼吸,有的能力是后天训练完成的,比如说话。神经元细胞之间的连接通过突触来完成,其中突触分为轴突和树突。神经元细胞之间信息的传递通过生物电来完成,当神经元细胞产生一个兴奋的信号时,神经细胞的膜电位就会产生变化,通过脉冲的方式传递给其他神经元细胞。通过树突-胞体-轴突-神经连接-其他细胞,这样就兴奋信号传递了出去。2.1.2 人工神经元网络人工神经元网络模拟生物神经网络的结构见图2.1。图2.1 人工神经元的基本模型图2.1中,X表示神经元的输入,相当于其他神经元的输出值,w表示权重(weight),f是一个非线性函数,神经元的动作如下

19、:当f为阈值函数的时候,其输出为:为了使式子简约,先设阈值则或可以选取sgn函数作为阈值函数如果要求学习算法的输出函数可微,可以选用sigmoid函数,即:sigmoid函数的函数图像见图2.2。图2.2 sigmoid函数Sigmoid函数是无限次可微、连续、有界、关与原点对称的函数,抑制两头,对中间的细微变化敏感,使得神经网络对特征的识别度更好。2.2 神经元学习算法2.2.1 前馈神经网络前馈神经网络是一个接受前一级输入,并且输出到下一级的结构,没有反馈结构,每一个神经元可以有多个输入,但是只有一个输出,每一个神经元的输出可以作为任意多个其他节点的输入。前馈神经网络可以分成不同的层,第n

20、层的输入只与第n-1层的输出有关。通常将所有的神经元层分成三层,即:输入层、输出层、隐含层,输入层即神经元网络的第一层,负责从外部接受输入数据,最后一层为输出层,输出整个神经元网络的结果,输入层与输出层之间的全部是隐含层,隐含层的层数目可以大于等于1层。前馈神经网络结构示意图见图2.3。图 2.3 前馈神经网络的结构示意图2.2.2 感知机感知机是一种双层的神经元网络模型,没有输出层,有输入层,是一层计算单元。感知机学习的目的是将训练数据进行超平面的线性划分,感知机模型首先导入了误分类的损失函数,然后利用梯度下降法对损失函数小化。感知机的模型如下:其中x为输入向量,sgn是上面介绍过的符号函数

21、,是权值向量, 为偏置向量,要求出感知机的模型,只需要求出和即可。假设训练数据集是超平面线性可分的,感知机的目的就是求的一个合适的和,将训练集中的正例和负例完全区分开来。选择误分类点到分类超平面S的总距离位损失函数,即:其中,为输入空间任意一点,为的L2范数。对于误分类点来说,当,=-1,当时,=1。故:所以误分类点到分类超平面S的距离是:假设所有误分类点的集合为M,那么所有误分类点到分类超平面S的距离是:那么最终的损失函数为:现在的问题就是选取最小的损失函数模型的和感知机求解算法:采用随机梯度下降,首先任意选取一个超平面,,然后用梯度下降法不断极小化(1)式子。极小化的过程中随机一个误差分类

22、点进行梯度下降。分别对(1)式中的 和求偏导,即:随机选取一个误分类点,对和,则有:其中,为步长。然后不停地进行梯度下降算法,直到训练集总没有误分类点为止。这种算法的思路是:当一个点被误分类的时候,就重新进行梯度下降,调整和,使得分类平面往误分类的一侧移动,减少该点与分类超平面的距离,直到该点被正确的分类,然后再次选取点重复上述方法,直到所有的点都被正确分类,那么就找到了正确的和。2.2.3 反向传播算法感知机作为最简单的前向人工神经网络算法,虽然结构简单,但是能解决复杂的问题,但是感知机的本质缺陷是不能处理线性不可分问题。前馈神经网络中隐含层无法与外界相连,无法计算误差,为了解决这一问题,提

23、出了反向传播网络(BP,Back-Propogation)算法6,算法主要思想为:首先通过前馈神经网络得出神经网络的值,然后计算该值与训练集中值的误差,然后简介算出隐含层的误差,然后调整参数,再次计算误差,直到误差小到可以接受的范围。在反向传播算法中,通常采用梯度下降法来修正权值,从感知机的求解过程中,可知输出函数要求可微, 故通常采用sigmoid函数作为输出函数。当研究某一层时,j表示该层的第j个神经元,i表示前一层的第i个神经元,k表示后一层的第k个神经元,表示该层第j个神经元的输出,表示前一层第i个神经元与本层第j个神经元之间的权值。计算某一层的输出值:对于输出层来说,实际输出值与理想

24、输出值之间存在误差,误差为:其中为理想的输出值,是实际输出值。误差E对权值求偏导数,得:其中为局部梯度:采用梯度下降法对误差进行调整,得到每次的调整量为:如果节点j是输出层,那么神经元输出值即为,那么:如果节点j是隐含层,那么神经元的输出值需要用sigmoid函数处理,即:由于隐含层的每一个节点对后面的节点都由影响,可以得出:在反向传播过程中,为了加快算法的收敛速度,会在权值修正量中加上前一次的权值修正量,即惯性项:综上所述,反向传播算法步骤如下:(1)随机初始权系数初始值。(2)首先执行神经网络的前向传播过程,计算各层单元:(3)然后计算输出层的局部梯度:(4)然后计算各个隐含层额局部梯度,

25、方向从后向前。(5)得出神经元之间的权值修正量:(6)修改权值:(7)重复2-6过程,直到算法收敛。采用反向传播算法能有效解决隐含层的权值修正问题,通过不断的计算输出层的误差,然后通过梯度下降法调整输出层的前一层神经元的权值,然后再循环调整所有的隐含层的权值,直到整个算法收敛。但是采用反向传播算法有可能会陷入到局部最小点,而不是收敛到全局最小点,因为算法采用的是梯度下降算法来求解非线性函数的极值,梯度下降法不具有全局观念。反向传播算法中有两个重要的参数,和,即步长和惯性系数。步长直接影响到算法的收敛性,如果该值较大,沿着梯度下降的幅度大,但是对极小值出的处理不好,如果该值较小,沿着梯度下降的幅

26、度小,但是收敛速度慢,影响算法的效率。惯性项系数影响收敛速度,可以在0.9-1之间选择。在实际应用反向传播算法的过程中,还需要好注意一些问题:(1)样本的处理,由于传入神经元的数据可能会是各种各样的值,由于采用sigmoid函数,所以数据需要进行归一化处理,可以归一化到(0,1)或者(-1,1)之间。针对样本的输出,从sigmoid函数可以得知,如果要输出0,1,那么值需要是无重大或者无穷小,故需要进行处理,可以认为输入大于0.5即为1,小于0.5即为0。(2)网络结构的选择。反馈神经网络的隐含层层数和神经元数目的确定,对算法有着至关重要的作用,它们决定了神经网络的规模,如果规模大,计算量就会

27、大,而且可能会导致神经网络拟合的函数过度追求拟合拟合效果,反而失去了原本的特性,即过拟合,如果规模小,计算量小,但是可能会导致神经网络拟合的函数不能很好的拟合所有的数据,即欠拟合。(3)初始权值、阈值的选择。初始值对学习结果也是有影响的,选择一个适当的初始值能尽快收敛,而且保证拟合的效果好。(4)批量学习和增量学习。批量学习适用于离线学习,即一次性输入所有的学习样本,然后去学习。批量学习的优点是学习效果比较稳定,拟合出的函数性能比较好,但是缺点是一次需要所有的学习样本;增量学习适用于在线学习,即动态获取学习样本,然后输入神经网络进行学习,然后再次获取学习样本,再次学习。这种学习方法对噪声比较敏

28、感,不适合剧烈变化的输入模式,但是可以在原有网络的基础上直接学习。2.2.4 神经网络在模式识别上面的优势1、神经网络能够分布式的存储信息神经网络是利用多个神经元之间的连接以及各个神经元之间的权值来表示信息,每个神经元都能够单独的存储信息,所以它能够分布式存储信息,而且如果网络部分受到损害,也能够恢复原来信息。2、神经网络能够并行处理信息神经网络中的每个神经元都可以接受信息,然后独立运算和处理,然后将运算的结果输出来,这些步骤都是可以并行的。3、神经网络能够自动学习神经网络模拟了生物神经系统的结构,能够根据外界的环境来调节内部的信息,从而去适应外界的环境,通过对参数分类,使得网络收敛来符合当前

29、的环境。2.3 本章小结本章详细介绍了神经网络算法,以及其基本组成部分:感知机、前馈神经网络、反向神经网络。利用严格的公式论证了该算法,并且说明了算法的一些特点以及注意事项,在最后讲述了神经网络在模式识别中的优势。第3章 系统设计与实现第3章 系统设计与实现本章首先介绍了神经算法的实现,接着详细介绍了手写数字的实现、手写汉字的实现,最后介绍了UI界面的实现。3.1 神经网络算法的实现3.1.1 神经网络的结构一个完整的神经网络结构包括:输入层、输出层、隐含层、隐含层权重、输出层权重、输出层误差、隐含层误差等结构。具体的数据结构如下:double * pInputLayer; / 输出层数据do

30、uble* pHiddenLayer; / 隐含层数据double* pOutputLayer; / 输出层数据double* pWeightHidden; / 隐含层权重double* pWeightOutput; / 输出层权重double* pErrOutput; / 输出层误差double* pErrHidden; / 隐含层误差double* pLastChangeHidden; / 上次隐含层改变值double* pLastChangeOutput; / 上次输出层改变值bool bRegression; / 是否回归double dRate1; / 学习率double dRate

31、2; / 惯性项系数int iInputCount; / 输入层神经元个数int iHiddenCount; / 隐含层神经元个数int iOuputCount; / 输出层神经元个数3.1.2 算法的结构用代码实现神经网络算法,主要步骤分为五个部分,初始化神经网络、加载神经网络参数、前向神经网络、反向神经网络、学习过程。1、初始化神经网络首先通过Initializer函数传入神经网络需要的各个参数,然后通过这些参数,给神经网络分配内存。2、加载神经网络参数由于学习样本的庞大,每次学习的耗时很长,所以预先将已经学习好的参数保存在文件当中,当初始化好神经网络之后,就开始加载神经网络里面的参数。3

32、、前向神经网络算法的步骤如下:(1)将训练的input数据输入到神经网络的输入层。(2)将输入层的偏移置为1.0。(3)计算隐含层的每一个神经元的值,然后通过sigmoid函数将计算得的值赋值给当前神经元。(4)将隐含层的偏移置为1.0。(5)计算输出层的每一个神经元的值,根据是否回归来选择使用采用sigmoid函数来处理计算所得值。4、反向神经网络算法的步骤如下:(1)计算输出层的误差。(2)根据1中计算得误差,计算输出层的局部梯度。(3)根据局部梯度与上次输出层的改变值、学习率等参数改变输出层权重。(4)计算隐含层的误差。(5)根据4中计算得误差,计算隐含层的局部梯度。(6)根据隐含层的局

33、部梯度与上次隐含层的改变值、学习率等参数改变隐含层权重。5、学习过程算法的步骤如下:(1)检查参数有效性。(2)将输入的input数据顺序打乱。(3)对input数据的每一组训练数据,作如下训练:(1)前向网络计算隐含层与输出层神经元的值。(2)反馈网络调整隐含层与输出层神经元的值以及权值。3.2 神经网络识别手写数字在识别手写数字的过程中,会碰到很多种情况,使用不同的方法,会得到不同的结果,具体过程见图3.1。图3.1 识别数字的步骤3.2.1 手写数字的常规预处理方法 在利用神经网络识别手写数字的过程中,对神经网络的输入数据有两种表现方式,第1种是将数字图像经过数值化后直接传入神经网络进行

34、学习,第2种是将数字图像经过数值化后,再经过预处理,再传入神经网络进行学习。第1种方法未经过处理,在某些特定的环境会获得更好的效果,但是会使得分类器的复杂程度大大增加。因此,对原本的样本的预处理,已经成为手写数字识别的一个重要途径。预处理的第一步是将数字图像转换成m*n的一个像素矩阵,然后经过灰度化、二值化,然后经过一些降噪算法,如中值滤波算法,去掉图像的噪声,然后再经过梯度锐化算法锐化边缘,最后经过细化、平滑、规格化等处理,得到比较好的输入数据。最后这是从样本中提取出特征,来构成输入数据,对于数字常见的方法有提取数字宽度、长度、粗细等特征。3.2.2 图像的灰度化图像的灰度化指去掉图像的色彩

35、信息,只保留图像的亮度信息。一副图像的一个像素点由RGB三种颜色组成,灰度图像不再关心RGB色彩,只关心亮度。在识别过程当中,人们只关心图像的形状,不关心色彩,相反,色彩由于颜色过于丰富,反而会影响识别,所以获得像素矩阵后要将图像灰度化。图像的灰度化一般有4中方法,即分量法、最大值法、平均值法、加权平均法。本文中采用平均值法,即使得图像的RGB三个分量的值相等。通过公式:这样使得RGB三个分量的值等于三个分量的平均值,就可以得到灰度图像。灰度图像是很多图形处理的第一步,经过图像的灰度化之后,就可以进行其他的处理,所以,图像的灰度化是很重要的一个步骤。3.2.3 图像的二值化图像的二值化是指把图

36、像中的所有像素根据一定的方法,划分成黑白两种颜色。经过二值化后的图像,全部的像素都是0或者255,图像会显示出很明显的黑白效果。这样就不再和更多的像素有关。这样一个像素点可以压缩成0和1两个数,利于处理和节省空间。二值化法的基本公式是:公式中f(i,j)为图像灰度化后的像素值,g(i,j)为图像二值化后的值,T为阈值。从式子中可以看出,T的值直接关系到二值化的效果,根据T值得不同选取方法,可以把二值化算法分为三种,即:整体阈值法、局部阈值法、动态阈值法。整体阈值法,即整张图像的阈值都是一个值。但是这个阈值需要根据具体的图像来确定,曝光度高的图像,阈值需要小一点,曝光度低的图像,阈值需要大一点。

37、整体阈值法的阈值一旦确定就不能更改,不能根据特定的区域来更改阈值,但是整体阈值法的算法简单,运算速度快,适用于干扰小的图像。这个阈值的确定方法也比较简单,通常就计算整张图片的亮度值,然后选取中间值作为二值化的阈值。局部阈值法,即根据不同的区域来确定不同的阈值。当一张图像的曝光度不均匀时,采用整体阈值法会得到不理想的二值化图像,如果采用局部阈值法,可以根据不同区域的曝光度来确定阈值,得到一张效果良好的二值化图像。但是采用局部阈值法,计算量大一些,速度也会慢一些。动态阈值法,即根据每个像素点的像素值和位置来确定不同的阈值。这种方法不仅考虑了单个像素点的特点,还考虑了该像素点周围的像素点的特点,能够

38、很好的突出图像的边缘。但是在手写数字的识别过程中,数字图像与背景的区别较大,不需要采用这种方法来二值化,而且会降低图像处理的速度。3.2.4 中值滤波图像的噪声指影响人们接受图像信息的因素。噪声在理论上是不能被预测的,只能通过概率的方法来统计随机误差。如果图像中存在噪声,会大大影响字符的切分、特征向量的提取等。因此图像的降噪将直接影响到数字识别的效果。中值滤波是一种非线性的图像平滑方法,能够根据图像的不同去平滑图像,而且不会影响图像的边缘,具体方法可定义为:式子中,g (x, y)和f (x-i, y-i)分别为输出和输入像素值,W为模版窗口,可以选择线性、方形、十字形、圆形、菱形等。取出模版

39、窗口W中的所有像素值,然后排序,选择这些像素值的中间值作为g(x,y)的像素值。3.2.5 去掉离散点在图像中可能会存在很多孤立的点或者点区域,这些点的面积往往比较小,通过中值滤波等滤波算法可能不会被去掉,如果不去掉就会影响图像的进一步处理。数字图形往往都是一个很大的联合的整体,即相连的非空白像素点数目很大,而往往与孤立的离散点相连的非空白点数目小,因此可以根据这个去掉孤立的点区域。算法的步骤如下:(1)扫描整个图像,找到非空白点。(2)将该空白点进队列。(3)从队列中取出第一个点,然后分别求出与之相连的上下左右四个点,判断该点是否在图像区域内并且没有被搜索过。(4)如果满足3中的要求,就将该

40、点放入队列,并且标记该点已经被检索。(5)循环2-4过程,直到队列为空或者被标记的点的个数超过了一个阈值。(6)判断被标记的点的个数是否超过了阈值,如果没有超过,就将这些被标记的点置为空白点。(7)循环1-6过程,直到扫描完了所有的点。之所以采用这种算法,原因是图像的不同,有的图像的离散点区域比较大,采用其他的算法不能快速的将这些离散的点清理掉,这时候采用这种算法,只需要判断阈值,就能快速将连续点小于这个阈值的离散点去掉。但是这个算法也存在缺点,如果是噪声点贴近数字图像,算法则不能判断该点为噪声点,也就不能去掉了,所以需要与其他算法配合使用才能更好的去掉噪声。3.2.6 图像锐化图像锐化的主要

41、目是使边缘从图像背景中更容易区分开来,使物体能够更加鲜明的从图像中区分开来,有助于后序的分割、特征提取等操作。图像的模糊实际上是受到平均或者通过积分运算造成的,对图像进行微分运算,可以使图像清晰化。本文中主要采用梯度锐化算法来锐化图像的边缘,首先计算各点的梯度值,定义在f (x,y)在点(x,y)处的梯度是一个矢量,定义为:其中,梯度的幅度Gf (x,y)可以由以下公式算出:在f (x, y)在其最大变化率方向上增加的距离,叫做梯度的数值,因此,上式可以写作:当采用这种算法的时候,图像的最后一行、最后一列无法计算梯度,所以可以采用前一行或者前一列的梯度值来代替。算法的步骤如下:(1)将图像的最

42、后一行像素点置为0xFF。(2)对除去最后一行的图像中的每一个像素点循环。(3)取出当前像素点值(a)、当前像素点的左边一个像素点(b)、当前像素点的下边一个像素点(c)。(4)计算梯度值abs(a-b) + abs(a-c)。(5)判断梯度值是否大于一个阈值,如果大于该阈值,就将当前像素点的值设置为梯度值。物体与物体、背景与背景之间的梯度变化一般都很小,只有在物体的边缘梯度变化才会比较大,也就是物体和背景交叉的部分。当某点的梯度值大于一个阈值的时候,就认为该点在物体和背景的交叉边缘,处理方法是:加上一个特定的值C,使得边缘变亮;如果梯度值小于这个阈值,就认为在同一个环境下,就不去改变该点的像

43、素值。当图像处理完时,物体和背景的边缘就被增量了,同时也不影响图像的其他点。3.2.7 数字的切分经过上述图像处理的算法之后,数字图像就比较好的被处理了出来。人们识别数字只关心数字部分,其他部分是不关心的,所以需要将数字部分从数字图像中区分开来。经过切分后的数字,去掉了部分背景,使得切分后的图像刚好包含了整个数字,大大减少了对以后的图像分析、处理所需要的数据量。算法的主要步骤如下:(1)扫描整个图像。(2)当循环到一个没有被扫描过的黑色点时,就将该点放入一个队列。(3)从队列中取出一个点,然后计算该点的上下左右四个方向的点,判断这些点是否在图像内以及是否没有被扫描过。(4)如果满足3中的条件,

44、就将点放入队列中,同时用该点的坐标值更新区域的位置值(left、right、top、bottom)。(5)循环2-4,直到队列为空。(6)将获得的区域的位置值放入到一个向量中,同时循环1-6,直到扫描完整个图像。最终切分的数字图像的区域就在(6)中的区域位置向量中了。3.2.8 数字的归一化经过数字的切分之后,数字图像就从背景中分离了出来,但是数字之间彼此的大小都不一样,但是识别要求所有的数据都是一样的尺寸,所以需要对数字进行归一化处理。归一化算法一般有两种,即线性归一化和非线性归一化。线性归一化算法比较简单,即对像素坐标进行线性的变换,然后把原来的字符映射到规定的区域内。首先按照图像现在的大

45、小和要变换的大小求出变换系数,然后用插值的方法把原来的像素点映射到归一化的区域内。需要注意的是,数字图像有的长有的宽,需要根据不同的长和宽计算变换系数。非线性归一化算法会考虑到原有图像的形状等特点,利用这些特点进行非线性的变换,这样归一化后的图像会最大化的保留以前图像的特点。本文中采用的为线性归一化算法,算法思路如下:(1)获取切分后的数字区域位置(left,right,top,bottom)。(2)根据1中所得位置计算区域的width与height,如果width大于height,那么则按照width扩展,反之,根据height扩展。(3)计算原图像与变换后的图像的变换系数。(4)对数字区域

46、中的每一个像素循环,如果该像素不为空白点,那么根据变换系数以及拓展选项计算在变换后的坐标,然后将该点的值置为非空白点。3.2.9 特征提取特征提取是整个字符识别系统的关键,识别算法是根据选取特征的种类来进行选择的。系统识别率高低的关在是:提取的特征是否稳定,是否代表一类字符的特点。针对数字的特征提取,可以采用比较简单的方法,扫描得到的整个图像,当碰到黑色点时,就提取出1,当碰到白色点时,就提提取出0。当扫描完整个图像后,就得到了一个与图像大小一样的特征向量矩阵。这种方法很简单,运算速度快,但是适应性不强。针对BP神经网络的特点,可以使神经网络很快收敛,如果加大训练样本的数目,可以增强适应性。3

47、.2.10 数字识别过程首先从图像中获取特征向量,得到训练样本,然后将特征向量输入到神经网络中进行训练,经过一定数量的训练之后,就可以用该神经网络去识别数字了。数字识别的过程见表3.1。表3.1 数字识别过程表样本的准备灰度化二值化中值滤波梯度锐化去掉离散点数字的切分归一化识别的结果3.2.11 神经元规模的确定1、输入层与输出层神经元个数的确定输入层和输出层的神经元个数应该和具体的应用环境有关。输入层的神经元数目和特征矩阵有关,在本文中,采用的特征矩阵为20*20,所以输入的神经元数目为400个。输出层神经元的数目和输出规模有关,由于在数字识别中,只有0-9这10个数字,所以输出层神经元数目

48、为10。同时规定,当第几个神经元输出1时,匹配的就是几,例如第4个神经元输出1,其他输出0,那么匹配的数字就是4。2、隐含层神经元个数的确定隐含层神经元的个数关系到神经网络的性能,取在合适的数量能大大提升性能,如果数目过大,会出现过拟合情况,如果数目过小,会出现欠拟合情况。目前还没有一种比较科学的方法来确定隐含层神经元个数的方法,大多是通过经验以及尝试得出数目。事实上,通过各种公式计算出来的隐含层神经元个数不一样,性能也相差很多倍。3、隐含层层数的确定。增加隐含层层数,可以提高神经网络的精度,也可以降低整个网络的误差,同时也会增加网络的复杂程度,影响网络的性能,而且有可能会出现过拟合的情况。已

49、经有定理证明:若输入层和输出层采用线性转换函数,隐层采用Sigmoid转换函数,则含一个隐层的MLP网络能够以任意精度逼近任何有理函数6。根据这个理论,可以只设计包含一个隐含层的神经元网络,通过适当控制该隐含层神经元,就可以达到多层隐含层的神经网络的效果。3.3 神经网络识别汉字相比数字,汉字的识别就复杂了不少,目前汉字的识别被认为是最困难的模式识别问题之一。汉字是一种特殊模式的几何,包括的种类多、结构复杂、而且书写的形势多种多样,加上其他干扰因素,都使得汉字的识别很困难。汉字的具体识别过程见图3.2。图3.2 识别汉字的步骤3.3.1 笔画的预处理汉字的识别可以拆分成笔画,汉字的笔画有多种,

50、本文将汉字的笔画基本分为以下16种,具体笔画见表3.2。由于笔画是直接书写在面板上的,面板上除了白色背景就是笔画了,所以预处理也会相对比较简单。本文中把汉字的笔划分成3类,第1类是除去点的15种笔划,这15种笔画的处理方式就是直接用神经网络来识别。第2类是点笔划,由于点的形状不确定,大小比较小,如果采用神经网络来识别,有很大的几率会识别成其他笔画或者识别不出来,所以可以用一个阈值来确定是否为点笔划,当获得的笔画大小小于一个值时,就判断为点笔划。第3类是类似于第1类的笔画,比如竖钩与竖、撇折与竖折,比较类似,可以把这几种笔画与第1类的进行融合,然后都采用神经网络来识别笔画,这样既能保护输出层的神

51、经元数目少、也能减少工作的复杂度,这对于汉字的识别是有较大的益处的。表3.2 汉字笔画表序号笔画代表汉字1横一、二、三2竖十3撇八、人4捺入5横折穴6点兴7竖折发、画8横折钩刀、刃9卧钩心10横撇又11竖弯钩儿12横折弯钩乙、亿13竖折弯钩与、马14横折提说、让15横折折折钩及、乃16竖折撇专3.3.2 图像的处理1、图像的二值化针对汉字识别的二值化,就简单很多,就是把背景点的其他点标记为黑点,背景点标记为白点。该本文中,笔画采用的颜色为绿色(RGB(0,0xFF,0),所以将非绿色点标记为白色,绿色点标记为黑色,就完成了二值化过程。2、图像的归一化在书写汉字的过程当中,每次书写一次的时候,就需要提取书写的信息,故每一次归一化的图像都是一次书写的图像。归一化的方法也比较简单,即对像素坐标进行线性的变换,然后把原来的字符映射到规定的区域内。首先按照图像现在的大小和要变换的大小求出变换系数,然后用插值的方法把原来的像素点映射到归一化的区域内。3、特征向量的提取经过图像的归一化后,得到一个m*n的像素矩阵,由于汉字的识别只关心形状,不关心颜色,所以首先扫描整个图像,如果碰到一个黑色像素点,把一个黑色像素点转换成1,碰到一个白色像素点,就转换成0,当整张图像转换完成后,就得到了一个特征矩阵

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论