基于神经网络的手写数字识别系统的设计与实现.docx
《基于神经网络的手写数字识别系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于神经网络的手写数字识别系统的设计与实现.docx(37页珍藏版)》请在冰豆网上搜索。
基于神经网络的手写数字识别系统的设计与实现
中南大学
本科生毕业论文(设计)
题目基于神经网络的手写数字
识别系统的设计与实现
摘要
手写体数字识别是模式识别中一个非常重要和活跃的研究领域,数字识别也不是一项孤立的技术,它所涉及的问题是模式识别的其他领域都无法回避的;应用上,作为一种信息处理手段,字符识别有广阔的应用背景和巨大的市场需求。
因此,对数字识别的研究具有理论和应用的双重意义.
人工神经网络识别方法是近年该研究领域的一种新方法,该方法具有一些传统技术所没有的优点:
良好的容错能力、分类能力强、并行处理和自学习能力,并且是离线训练和在线识别的。
这些优点使它在手写体字符的识别中能对大量数据进行快速实时处理,并达到良好的识别效果。
由于手写体数字识别难于建立精确的数学模型,所以本文采用BP神经网络对这一问题进行处理.神经网络模式识别的一个关键步骤是预处理和特征提取,对于手写体数字识别,本文采用了一种基于结构特征和统计特征的提取方法,并用程序实现了这一特征提取过程。
通过测试,本识别系统对于较规范的手写体数字的识别达到了很好的识别效果。
关键词:
手写体数字识别,特征提取,人工神经网络,MATLAB
ABSTRACT
Handwrittencharacterrecognitionisaveryimportantandactiveresearchinpatternrecognition。
Theoretically,itisnotanisolatedtechnique。
Itconcernswiththeproblemthatalltheotherareasofpatternrecognitionmustconfronted;practically,beingakindofinformationprocessingmeasured,characterrecognitionhasaverybroadapplicationbackgroundandvastneedofmarket。
Thus,itisofboththeoreticalandpracticalsignificance.
Artificialneuralnetworkrecognitionmethodisanewmethodoftheresearchfieldinrecentyears,andthismethodhassomemeritthattraditionaltechniquedonothave;goodtoleranceforerror,strongsortingability,strongparallelhandlingabilityandstrongself—learningabilityaswellasitsoff-linetrainingandon—linerecognizing.Allthesemeritscontributeitsperfectperformanceinhandlingvastdatasetandhandlingintimelymanner。
It’sdifficulttomakeaccuratemathematicsmodelforhandwrittennumeralrecognition,soBPneuralnetworksisusedhere。
Thekeystepsofneuralnetworkspatternrecognitionarepreprocessingandfeaturesubsetselection.Inthispaper,algorithmoffeaturesubsetselectionbasingonstructuralcharacteristicsandstatisticalcharacteristicshasbeenadoptedinhandwrittennumeralrecognition,andtheprocessoffeaturesubsetselectionhadbeenrealizedinprogram。
Recognitionsysteminthispaperhasachievedagoodrateofrecognitioninrandomhandwrittennumeralbytest.
Keyword:
handwrittennumeralrecognition,featureextraction,artificialneuralnetwork,MATLAB
第一章绪论
1.1手写体数字识别研究的发展及研究现状
模式识别[2]是六十年代初迅速发展起来的一门学科。
由于它研究的是如何用机器来实现人(及某些动物)对事物的学习、识别和判断能力,因而受到了很多科技领域研究人员的注意,成为人工智能研究的一个重要方面。
一个模式识别系统的基本职能是对系统所要处理的模式归属于哪一类做出判别,从该系统的模式输入到系统做出判别之间,主要包括信息检测、预处理、特征提取和分类几大环节。
字符识别是模式识别领域中的一个非常活跃的分支。
一方面是由于问题本身的难度使之成为一个极具挑战性的课题;另一方面,是因为字符识别不是一项孤立的应用技术,其中包含的模式识别领域中其他分支都会遇到的一些基本和共性的问题。
从50年代开始,许多的研究者就在这一研究领域开展了广泛的探索并为模式识别的发展产生了积极的影响。
字符识别,从采用的输入设备来分,可分为脱机识别(又称为光学字符识别OpticalCharacterRecognition,OCR)和联机识别,脱机字符又分为印刷体和手写字符识别,从对书写者要求来分,手写字符又分为限制性和非限制性的手写字符识别。
在联机手写字符识别中,计算机能够通过与计算机相连的手写输入设备获得输入字符笔划的顺序、笔划的方向以及字符的形状,所以相对OCR来说它更容易识别一些。
但联机字符识别有一个重要的不足就是要求输入者必须在指定的设备上书写,然而人们在生活中大部分的书写情况是不满足这一要求的,比如人们填写各种表格资料,开具支票等。
如果需要计算机去认识这些已经成为文字的东西,就需要OCR技术.比起联机字符识别来,OCR不要求书写者在特定输入设备上书写,它可以与平常一样书写,所以OCR的应用更为广泛。
OCR所使用的输入设备可以是任何一种图像采集设备,如扫描仪、数字相机等。
通过使用这类采集设备,OCR系统将书写者已经写好的文字作为图像输入到计算机中,然后由计算机去识别.由于OCR的输入只是简单的一副图像,它就不能像联机输入那样比较容易的从物理上获得字符笔划的顺序信息,因此OCR是一个更具挑战性的问题.
脱机字符识别(OCR)分为印刷体OCR和手写OCR。
印刷体字符比手写体字符少了随机性,它的识别相对容易些,难点已经不在识别环节,而在于字符的分割上。
印刷体识别的错误绝大多数都是错误的分割引起的[3]。
对于手写体OCR,无论是联机还是脱机识别,手写体的识别都要经历由限制性手写体识别到非限制性手写体识别两个阶段。
本文将以手写体数字为代表,讨论非限制性手写体字符的识别.脱机字符识别的研究最早始于上个世纪六十年代,是为了应付汉英翻译的需要。
八十年代后的研究重心转移到脱机手写字符的识别上.对于小类别数的字符集如数字、字母的识别,已经可以做到对书写不加任何的限制.非限制性手写OCR的研究始终以阿拉伯数字为主导。
这事因为,第一,十个阿拉伯数字是全世界的一套通用字符。
第二,在数字的许多应用场合,如报表、账单、支票等,手写体还难以被印刷体所替代,而且对识别的可靠性要求极高。
三,由于类别数少,所以模式识别中的许多方法研究均可以以数字识别作为实验背景。
对脱机手写体字符的研究,人们由简单集成笔画密度、笔画方向和背景特征方法过渡到特征匹配方法,进而过渡到结合神经网络方法,随着对识别可靠性要求的提高,九十年代以后,多分类器集成方法成为了一个研究重点。
1。
2神经网络在手写体数字识别中的应用
目前,随着计算机的迅速发展,性能价格比的不断提高,模式识别技术已经从理论探讨为主发展到大量的实际应用,人们将更多的注意力开始转向那些用于语音、图像、机器人以及人工智能等的模式识别实际问题。
解决这些问题的关键是需要进行复杂而庞大的实时数据处理,而现有计算机的存贮容量及计算复杂性的局限,使得真正实时化的应用受阻.这种面向实时应用的模式识别问题促使人们开始将并行处理的神经网络[4]应用到模式识别,而神经网络模式识别技术又将模式识别实时应用推进了一大步,手写体数字识别就是这种应用的一个很重要的领域。
手写体数字识别是一项极具研究价值的课题,随着神经网络[1]和模糊逻辑技术的发展,人们对这一问题的研究又采用了许多新的方法和手段,也使得这一古老的课题焕发出新的生命力[5].目前国际上有相当多的学者在研究这一课题,它包括了模式识别领域中所有典型的问题:
数据的采集、处理及选择、输入样本表达的选择、模式识别分类器的选择以及用样本集对识别器的有指导的训练。
人工神经网络为手写体数字识别提供了新的手段.正是神经网络所具有的这种自组织自学习能力、推广能力、非线性和运算高度并行的能力使得模式识别成为目前神经网络最为成功的应用领域.
二十多年来,人们在数字识别领域做了大量的研究工作,所提出的各种方法在印刷体和手写印刷体数字识别方面已经取得了较好的成绩,识别率稳定在96%左右。
但是自由手写体数字的识别工作目前并不成熟,仍旧是文字识别中最有挑战性的课题之一.
字符识别长期以来都是采用传统的识别方法,对印刷体字符的识别率一般只是稳定在96%左右,不能进一步提高;而对手写体字符的识别,其研究还处于探索阶段,其识别率还相当低,因此,为了提高识别率,就必须寻求新的方法和途径。
进入九十年代以来,人工神经网络(ANN)技术发展十分迅速,它具有模拟人类部分形象思维的能力,是一种模仿人脑学习、记忆、推理等认知功能的新方法.特别是它的信息并行分布式处理能力和自学习功能等显著优点,更是激起了人们对它的极大的兴趣。
人工神经网络是由一些类似人脑神经元的简单处理单元相互连接而成的复杂网络.已涌现出许多不同类型的ANN及相应的学习算法,其中BP(或EBP-ErrorBackPropagation)网络及学习算法得到了广泛关注和研究,并在数字识别方面取得了许多有意义的应用成果。
1。
3论文结构简介
本毕业设计主要解决以图像形式存在的手写体数字识别的问题.整体分为三个部分,第一部分是图像预处理,第二部分是对手写体数字的结构特征的提取,第三部分是设计神经网络并对前面得到的样本数据进行学习和训练。
本文通过图像预处理和数字特征提取以后基于神经网络的判别方法,然后结合使用了MATLAB工具箱中提供的人工神经网络函数设计了一种手写数字识别的新方法。
实验表明,该方法可以获得较好的识别率.
第二章手写体数字识别
2.1手写体数字识别的一般方法及难点
字符识别问题的研究已有几十年的历史了,但时至今日,字符识别的研究成果远未达到人们所期望的,这其中有理论研究和技术实现等多方面因素.在理论方面,我们对人类的视觉认知机理的研究还只是初步的,远未达到深入和透彻的水平。
在技术方面,我们使用的计算机的运算水平和存储能力,比起人脑的信息存储和处理能力有很大差距。
因此,目前的文字识别只能建立在现有的理论基础上,使用现有的技术来研究和解决问题。
手写体数字识别是字符识别的一个分支,问题虽然简单,但却有较大的实用价值。
数字的类别虽然只有十种,笔划又简单,其识别问题表面上是一个较简单的分类问题.但实际上,虽然各种新的识别算法不断的推出.其识别率和误识率仍距实用有相当距离。
手写阿拉伯数字具有变形多差异大的特点,字形与书写人的职业、文化程度、书写习惯以及所使用笔墨纸张所处环境等都有关,所以手写体数字变形多、规律复杂。
具体地说有两个:
一是0~9十个数字中,其中的一些数字字形相差不大,使得准确区分某些数字相当困难;二是数字虽然只有十种,但同一数字写法千差万别.不同的人写出的同一个数字都有差别,即使同一个人在不同的时候也会有不同的写法。
笔划的书写顺序经常发生变化,因此极大地增加了匹配的难度。
一般人写字时都不会一笔一划的书写,为了节省时间,连笔字是自然而然的事情,对于结构识别而言,连笔一方面使笔划种类大大增加,甚至达到难以归纳的程度;另一方面,连笔又使得笔段抽取难度大增,因为连笔会增加一些冗余笔段,连笔造成的畸变又会使笔段方向严重离散.总之,连笔不论对于基于哪种基元的结构识别都是严峻的挑战。
这是造成手写数字识别过程复杂、达到较高识别率困难的根本原因。
如图2.1各种各样的手写体数字。
图2。
1各种各样的手写体数字
2.2图像预处理概述
预处理[6]是字符识别重要的一环,它把原始的图像转换成识别器所能接受的二进制形式.
要识别手写体数字首先要对其字符图像进行预处理。
预处理的主要目的是去除字符图像中的噪声、压缩冗余信息,得到规范化的点阵,为识别做好准备.这就要求预处理在消除图像中与识别无关的因素时尽量保持原图像的字符特征。
手写体数字图像预处理的过程,就一般情况而言,主要经过如图2。
2所示的几个步骤.不同的识别方法对预处理的项目和要求有所不同。
如结构识别方法[7],对字符规范化可以从简,甚至不需要。
有的识别方法对细化要求很高,有的则不需要细化。
本章中将分别对平滑去噪、二值化、归一化和细化分小节讨论。
原始图像
平滑去噪
二值化
归一化
细化
图2。
2图像预处理的基本流程
2。
3图像预处理的处理步骤
2.3.1图像的平滑去噪
手写体数字由于其随机性大,断笔,连笔、飞白状况时常发生,为了减少灰度图像的一些不该出现的黑白噪声,可以采用图像的平滑去噪技术.
进行图像平滑处理的是一种空域滤波器[8],空域滤波器一般可分为线性滤波和非线性滤波两类。
线性滤波器的设计常基于对傅立叶变换的分析,如均值滤波器;非线性滤波器则一般直接对邻域进行操作,如中值滤波器。
以下为采用中值滤波对图像进行平滑处理的部分代码[9]:
fori=2:
175;
forj=2:
259
Xtemp=0;
form=1:
3
forn=1:
3
Xtemp=Xtemp+X2(i+m。
2,j+n.2);
end
end
Xtemp=Xtemp/9;
X3(i,j)=Xtemp;
end
end
2。
3.2二值化处理
图像的二值化就是把图像中的像素根据一定的标准划分成两种颜色。
在这个系统中就是根据像素的灰度值处理成黑白两种颜色。
对数字字符图像二值化后要能真实的再现原数字,其基本要求为:
笔画中不出现空白点,二值化的笔画基本保持原来文字的结构特征。
图像二值化的关键在于阈值的选择。
图像的二值化有很多成熟的算法,有整体阈值二值化法、局部阈值二值化法、动态阈值二值化法等。
二值化的关键在于阈值的选取,阈值选取主要分为整体阈值法、局部阈值法和动态阈值法。
三类阈值的选择是一个比较复杂的问题,有的可以由计算机自动选择,有的需人工干预。
基于字符识别扫描得到的图像目标与背景的灰度级有明显的差别,字符图像的二值化可采用整体阈值法中的双峰法,该方法简单易行,针对目标与背景的灰度级有明显差别的图像,其灰度直方图的分布呈双峰状,两个波峰分别与图像中的目标和背景相对应,波谷与图像边缘相对,应当在分割阈值位于谷底时,图像分割可取得最好的效果.
下面给出我在设计过程中二值化以后的效果图如图2.3。
图2。
3二值化处理
2。
3.3归一化
本文使用的数字图像都是在WindowsXP画图板中手写输入的。
由于10×14像素图像(10是图像宽度,14是图像高度)较小,书写时难度较大。
我们希望书写时尽量不限制图像的大小,然后通过计算统一尺寸,使之具有同一高度,同一宽度,称之为归一化[10]。
在数字图像处理中有一些比较成熟的缩放图像的算法,例如MATLAB使用imresize函数来改变图像的大小。
它的调用格式为I2=imresize(I,rate),I存储的是原始图像的数组,rate是变化率,I2存储的是改变后图像的数组。
例如rate=0。
5时,高度和宽度都将缩小一半,原始图像也就缩小了一半。
这一算法的缺点是只能将原始图像的高度和宽度同时变化相同的比例,如果我们希望将原始图像变成10×14像素的图像,该算法就无法解决了.显然这种算法不适合解决我们面临的问题。
本文提出了一种新的归一化算法,可以将不同尺寸的二值图像统一为10×14像素的图像.具体算法是:
先得到原始图像的高度和宽度,分别与系统要求得到的高度和宽度作比较,得出要变换的系数,然后根据得到的系数计算每一个原始像素点归一化后在新图像中的位置,最后计算新图像中每个像素点的值,方法是:
求出原始像素点及其周围三个点的像素值的平均值,最后用函数floor。
m取整,调用格式为B=floor(A),B取小于或者等于A的整数。
归一化算法程序代码如下:
ans=imread(’0。
bmp');%读入图片0.bmp,28×28像素图像
imshow(ans)
[r,c]=size(ans);%r是原图像的高度,c是宽度
fori=2:
(r-1)
forj=2:
(c—1)
n=i/(r/14);
n=ceil(n);
m=j/(c/10);
m=ceil(m);
M(n,m)=(ans(i,j)+ans(i,j+1)+ans(i,j-1)+ans(i—1,j))/4;
N(n,m)=floor(M(n,m));
end
end
imshow(N)
例如,数字图像“0。
bmp"经该归一化算法计算得到矩阵M,MATLAB运行结果如图2。
4所示。
图2。
4归一化处理
2.3。
4细化
许多字符识别方法在预处理中都很重视对二值化字符的细化处理.直观来说,细化就是将二值化字符点阵逐层剥去轮廓上的点,变成笔画宽度只有一个像素宽度的字符骨架图形。
之所以需要细化处理,是因为二值化点阵图形中,对识别有价值的文字特征信息主要集中在字符骨架上,细化后的字符骨架既保留了原字符的绝大部分的特征,又利于特征提取。
细化后骨架的存储量比原来的二值化字符点阵要少得多,降低了处理工作量.
手写体数字细化的基本要求如下:
第一、保持原有字符笔画的连续性,不能由于细化造成笔画断裂。
第二、要细化为单线,即笔画宽度为一个像素。
第三、细化后的骨架应尽量是原来笔画的中心线.
2。
4小结
预处理是手写数字识别中不可缺少的组成部分,对图像预处理的好坏直接影响到识别的结果,关系到识别算法的好坏。
文中首先对待识别数字的预处理进行了介绍,包括平滑去噪、二值化、归一化、细化等图像处理方法,经过这些预处理步骤,对图像中部分变形信息进行了修正,消除图像中与识别无关的因素,而且尽量保持原图像的字符特征,在实验中提高了数字识别网络的性能。
第三章特征提取
3。
1特征提取的概述
模式识别使用特征来区分不同的种类.因此,特征提取是模式识别系统的关键部分。
特征提取的目标是找到某种变换,将N维或N*N维的模式类别空间转换到维数小得多的M维特征空间,并同时保留模式识别所需要的大部分信息.通过特征提取,模式分类可以在维数低得多的空间上进行,从而降低了计算的复杂度。
而且,对给定的训练样本进行特征提取可以获得更精确的分类函数的描述,以构造更可靠的分类规则.
同样对于手写体数字的识别,特征提取可以降低字符信息量、去除无用的冗余信息,提高识别系统效率,一直是字符识别领域中的关键点.
特征提取的目的是从原始数据中抽取出用于区分不同类型的本质特征.无论是识别过程还是学习过程,都要对研究对象固有的、本质的重要特征或属性进行量测并将结果数值化,形成特征矢量.
手写体数字的识别中,常用的特征有结构特征和统计特征。
结构特征和统计特征各有其优点:
结构特征能描述字符的结构,对于不同人书写的字符,形体不同,但结构都是一致的,所以结构特征能克服手写字体因人而引起的畸变;统计特征最大的优点是对环境噪音不敏感,如若字符的背景噪音通常都是呈高斯分布,用统计特征进行识别可对此影响忽略不计。
本章将用两小节分别对结构特征和统计特征进行论述。
3。
2统计特征
对复杂图像信号作小波变换[11],进行多分辨率分析,已经成为图像信号分析和处理的常用方法。
由于小波变换的结果体现为大量的小波分解系数,这些系数包含了系统或信号本身大量和多样的特征信息。
如果图像信号的主要信息能以一个或一组特征量来表征,我们就可以更加直观、有效和方便地对各种随机信号进行信息提取、信号检测、特征识别。
统计特征分为宏观特征信息和局部特征信息。
宏观特征信息是需要在整幅图像上获取的特征信息。
传统的全局特征主要包括:
全局变换特征(对字符图像进行各种变换,利用变换系数作为特征向量,常用的变换有Fourier变换、K-L变换、小波变换等)、不变矩特征、全局笔划方向特征等;常用的局部统计特征有:
局部笔划方向特征、Gabor特征等。
统计特征对微小的畸变不敏感,但区分相似的能力较差。
以下为程序设计中对小波分析提取低频部分的统计特征的实例:
f=imread('sample。
bmp');输入图像
[c,s]=wavedec2(h,3,'db2');对人脸图像进行3阶小波分解,并提取小波系数
wave2gray(c,s,8);显示小波分解后各子图
y=wavecopy(’a’,c,s)
figure,imshow(mat2gray(y));提取主要特征
3.3结构特征
采用结构特征[12]对字符进行结构分析从而达到识别目的,是一种非常直观的方法。
字符由各个子部件构成,逐级分析字符图像的结构,根据各元素的属性、数量及其相互关系,便可判定待识字符。
与统计方法相比,结构分析不注重特征的绝对位置,只考虑特征的相对关系,因而对书写风格的变化不敏感,其缺点在于特征提取和模板的建立都十分困难,匹配算法也比较复杂,神经网络的应用弥补了这个缺点,只要提取出适当的结构向量作为神经网络的输入向量,会得到令人满意的识别输出结果。
以下详细介绍。
3.3。
1结构特征提取
首先对经预处理后的图像进行分割,如图3.1所示。
图3.1图像分割
对图像分割后,结构特征提取的算法如下:
(1)对细化后的数字图像取竖直的三条直线,分别取在5/12,1/2,7/12处,记下这三条竖直直线与数字笔段的交点数。
(2)再取水平三条直线,分别取在1/3,1/2,2/3处,分别记下这三条水平直线与数字笔段的交点数。
(3)再取对角两条直线,分别记下这两条对角直线与数字笔段的交点数。
3.3.2笔划特征的提取
经细化后的数字图像其特征较为稳定,且笔划简单,因此对其抽取的基本结构组件能反映数字的本质特征,从而可快速有效地识别数字,并达到较好的分类效果。
数字端点如图3.2所示。
图3。
2数字端点
对图像分割后,结构特征提取的算法如下:
(1)按从上到下,从左到右的顺序扫描预处理后图像并选择黑像素点P;
(2)计算像素P的8-邻域之和N;
(3)若N=1,则像素P为端点,端点计数器加一;
(4)重复步骤
(1)-(3),直到遍历整个图像。
3.3.3数字的特征向量说明
依据上