基于OPENCV的手写数字识别系统开发毕业作品.docx
- 文档编号:6756507
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:28
- 大小:265.86KB
基于OPENCV的手写数字识别系统开发毕业作品.docx
《基于OPENCV的手写数字识别系统开发毕业作品.docx》由会员分享,可在线阅读,更多相关《基于OPENCV的手写数字识别系统开发毕业作品.docx(28页珍藏版)》请在冰豆网上搜索。
基于OPENCV的手写数字识别系统开发毕业作品
毕设
业计
(20届)
基于OPENCV的手写数字识别系统开发
所在学院
专业班级电子信息工程
学生姓名学号
指导教师职称
完成日期年月
摘要
数字识别作为现在计算机视觉技术的一个重要研究课题,有着它自己独特的功能。
特别是在大规模数据的统计、金融领域、邮件的自动分拣以及手写文稿自动输入等诸多方面发挥巨大作用。
但是手写数字识别由于其字形信息量小、字形相差不大、笔划顺序信息难于获取、数字变形大等特点又成为这一领域的一个具有挑战性的课题。
这篇文章所要讲述的主要是处理手写数字并加以识别的一种一般办法。
在实现识别的时候使用的是VisualC++6.0作为软件平台,结合现在图像处理领域比较流行的OPENCV函数库来对一系列的手写数字图像进行加工处理。
在识别算法的选择上,我们采用了最简单,也是最基本的识别算法——模板匹配法,来设计用来识别的分类器。
之所以不使用现在比较流行的BP神经网络误差反馈算法。
一个是因为没有完全的理解这个算法的作用机理,另一个是第一次使用VC这款软件来进行比较繁琐的程序设计。
在技术实现上表现的有点无力。
软件的主要设计流程,和普遍的图像识别的算法一样。
首先获取图像,对图像进行必要的预处理,之后对图像进行分割,并提取特征。
最后把特征导入到分类器中进行识别并输出结果。
经过测试。
软件能够正常运转,并能够实现手写数字的识别这一基本功能。
但是识别率不是尽如人意。
如果以后还有机会开发这一类识别程序的话,会尽量考虑使用BP算法来实现,来体会一下这种算法的强大。
关键字:
模式识别;模板匹配;数字图像处理
Abstract
Digitalrecognitionascomputervisiontechnologyisnowanimportantresearchtopichasitsownuniquefeatures.Especiallyinthelarge-scaledata,statistics,finance,mailsortingandautomatichandwritinginput,andmanyotheraspectsofpresentationautomaticallyplayasignificantrole.Butthehandwrittennumeralrecognitionbecauseofitssmallamountofinformationshape,fontorless,thestrokeorderinformationdifficulttoaccess,digitaldistortionandothercharacteristicsofthisareahasbecomeachallengingissue.
Thisarticleismainlytobeaboutdealingwithhandwrittennumbersandtoidentifyageneralapproach.WhenusedinachievingtherecognitionthatVisualC++6.0asthesoftwareplatformisnowmorepopularinimageprocessinglibraryOPENCVtoaseriesofhandwrittendigitalimageprocessing.
Thechoiceoftherecognitionalgorithm,weusethemostsimple,isthemostbasicrecognitionalgorithm-thetemplatematchingmethodtodesigntheclassifiertoidentify.ThereasonwhynottousemorepopularnowBPneuralnetworkerrorfeedbackalgorithm.Oneisbecausethereisnocompleteunderstandingofthemechanismofthisalgorithm,theotheristhefirsttimeyouusethissoftwaretocompareVCcomplicatedprogramming.Ontheperformanceofthetechnologyabitweak.
Themainsoftwaredesignprocess,anduniversal,likeimagerecognitionalgorithm.Firstgettheimage,theimagepre-processingnecessary,aftertheimagesegmentationandfeatureextraction.Finally,thefeatureintotheclassifiertoidentifyandoutput.
Tested.Softwaretooperatenormally,andtoachieverecognitionofthehandwrittendigitsbasicfunction.Buttherecognitionrateisnotsatisfactory.Ifyoulaterhavetheopportunitytodevelopthistypeofrecognitionprogram,wewilltrytoconsiderusingtheBPalgorithmtorealize,tounderstandwhatthepowerofthealgorithm.
KeyWords:
PatternRecognition;TemplateMatching;DigitalImageProcessing
1 引言
在计算机技术飞速发展的今天。
计算机的功能越来越强大,使用的方法也是越来越复杂。
计算机的使用者也越来越向着低操作水平的人群发展。
以前在使用计算机的时候,操作人员要有相当强的专业知识,要严格按照各种计算机语言程序来使计算机运行。
为了让更多的人能够自由,轻松的操作计算机,就要让计算机了解人的习惯和要求,这样才能让更多的人来使用复杂的计算机。
让计算机拥有逻辑判断能力,就是现在人工智能所要研究的主要方向。
模式识别是人工智能中人机交互的一个非常重要的研究课题。
其在人工智能研究中的作用,就好像眼睛对于人的作用一样。
现在研究的手写数字识别系统,在模式识别研究中,有着重要的理论价值。
现阶段的手写数字识别系统的研究,以理论研究为主,并没有大量的投入到商业应用之中。
虽然现在识别的精度可以达到98%以上,但是对于金融,邮政这种失之丝毫,差之千里的行业来说,这样的精度还是不够理想。
目前的识别算法有很多,人工神经网络、模糊算法、小波变换算法、遗传算法、傅里叶变换法等等都可以用来解决手写数字的识别,但它们当然有不同的优缺点。
现在使用的最多的是人工神经网络算法中的BP神经网络算法。
它有很强的非线性映射能力、泛化能力和容错能力。
在处理手写数字这种没有特定规范的事物时,有着非常好的效果。
本文所设计的手写数字识别系统,主要的研究对象是0到9这十个阿拉伯数字,它们是唯一的被世界各国通用的代表数字大小的字符。
这样就使得研究的应用扩展到了世界范围。
而且识别的类别比较少,笔画也不是非常的复杂。
作为一个研究用的对象来说是比较合适的。
在它的研究基础上,可以进一步的做深入的研究和开发一些新的理论。
最直接的拓展就是在它的基础上研究英文26个字母,之后就可以再进一步的应用到英文的文章,乃至于中国汉字的识别了。
目前,在脱机手写字符识别研究中使用最广泛的是光学字符识别,即OGR方法。
其统计模式识别方法注重数量特征,便于特征提取、分析和计算。
但是,它将字符看成一种随机的二维点阵,没有考虑字符的结构特征和结构信息。
因此,这种方法对单一字符比较有效,而对不同字体的字符识别效果则较差。
结构模式识别的方法是把待识别的模式看成由若干个比较简单的子模式构成的集合,任何模式都可以用一组基元及一定的组合关系来描述。
由于字符含有丰富的结构信息,可以设法提取含有这种信息的结构特征,作为字符识别的依据。
但是,由于字符结构比较复杂,实际应用中仍有较大困难。
近年来,出现了将统计和结构识别结合起来的途径,既吸取了统计识别的优点,又利用了字符的结构信息。
手写数字识别是字符识别的一个特定方向。
由于问题本身的特殊性,传统的OCR方法不能有效地解决这一问题。
因此,手写数字的识别方法应该是一种具有自适应、抗干扰、能够有效地解决手写数字分割、统计模式识别与结构模式识别相结合的方法。
2 计算机视觉、工具介绍
2.1计算机视觉简介
视觉是各个应用领域,如制造业、检验、文档分析、医疗诊断,和军事等领域中各种智能/自主系统中不可分割的一部分。
由于它的重要性,一些先进国家,例如美国把对计算机视觉的研究列为对经济和科学有广泛影响的科学和工程中的重大基本问题,即所谓的重大挑战(grandchallenge)。
计算机视觉的挑战是要为计算机和机器人开发具有与人类水平相当的视觉能力。
机器视觉需要图像信号,纹理和颜色建模,几何处理和推理,以及物体建模。
一个有能力的视觉系统应该把所有这些处理都紧密地集成在一起。
作为一门学科,计算机视觉开始于60年代初,但在计算机视觉的基本研究中的许多重要进展是在80年代取得的。
计算机视觉与人类视觉密切相关,对人类视觉有一个正确的认识将对计算机视觉的研究非常有益。
为此我们将先介绍人类视觉。
人类正在进入信息时代,计算机将越来越广泛地进入几乎所有领域。
一方面是更多未经计算机专业训练的人也需要应用计算机,而另一方面是计算机的功能越来越强,使用方法越来越复杂。
这就使人在进行交谈和通讯时的灵活性与目前在使用计算机时所要求的严格和死板之间产生了尖锐的矛盾。
人可通过视觉和听觉,语言与外界交换信息,并且可用不同的方式表示相同的含义,而目前的计算机却要求严格按照各种程序语言来编写程序,只有这样计算机才能运行。
为使更多的人能使用复杂的计算机,必须改变过去的那种让人来适应计算机,来死记硬背计算机的使用规则的情况。
而是反过来让计算机来适应人的习惯和要求,以人所习惯的方式与人进行信息交换,也就是让计算机具有视觉、听觉和说话等能力。
这时计算机必须具有逻辑推理和决策的能力。
具有上述能力的计算机就是智能计算机。
智能计算机不但使计算机更便于为人们所使用,同时如果用这样的计算机来控制各种自动化装置特别是智能机器人,就可以使这些自动化系统和智能机器人具有适应环境,和自主做出决策的能力。
这就可以在各种场合取代人的繁重工作,或代替人到各种危险和恶劣环境中完成任务[1][2][3]。
2.2手写数字识别系统的应用前景
手写识别系统具有极大的市场潜力和应用前景。
1市场应用范围
目前,手写输入识别系统的主要市场应用有:
(1)与手写板配套作为PC的输入手段之一;
(2)PDA掌上电脑的必需输入手段;
(3)PDA的必需输入手段;
(4)手机的一种输入方案;
(5)机顶盒可选择的一种输入方案;
而随着未来计算、无线通讯、任务处理等多种功能逐渐趋于融合,以及家庭数字化产品的更高发展,手写输入识别系统将成为未来小巧、轻便的数字化产品最为重要的通用输入系统。
2在PC领域的市场分析
中文手写识别系统最早应用于PC行业,作为PC的一种可选输入方式:
手写板,在台湾、香港首先使用。
目前,在台湾以及港澳地区,手写输入已经被普遍采用,台湾的手写板年销量约为电脑销量的四分之一,在香港手写板已成为电脑的标准配置之一,而且这个比例正在呈上升趋势。
近年随着国内计算机市场的逐步扩大,手写识别系统在PC领域的应用也逐年成倍增长。
据统计,1995\1996年不到1万套,而1999年手写板市场突破了50万套,2000年更达到70万套。
但按2000年国内PC销量已公布数字800万套算,手写板的销量尚不足电脑销量的十分之一,因此手写板在PC领域还有很大的市场容量。
1999年全国PC销量达到600万台,PC保有量为1700万台,而这个速度正以30%的速度增长,而到2002年底,全国的PC保有量将达到3000万台,如果手写产品占有率能达到20%,即有600万台电脑会配上手写系统。
以一套手写笔200元计算,总销售额可达12亿元,由于手写笔软件不断升级改进,硬件使用寿命一般为3年,因此这个市场将持续扩大。
目前市场销售中,以软件计,汉王以超过40%的市场占有率遥遥领先,精品25%次之,蒙恬约20%,清华文通约8%,手写之星5%,其余还有一些不成熟的手写产品,没有什么市场影响。
在移动设备领域的市场分析近年,随着PalmPC、PDA、PDA手机的推出,计算机、手机、PDA等设备的逐渐融合,以及初露头角的家庭数字设备,手写输入识别系统作为最必需的输入途径显露出比在PC领域中更大的市场潜力[4]。
2.3VisualC++6.0简介
MicrosoftVisualC++是一个功能强大的可视化软件开发工具。
从1993年VisualC++1.0问世以来,Microsoft(微软)公司随后又不断的有新版本问世。
已经成为大多数程序员的首选工具了。
VisualC++6.0发行于Microsoft的VisualStudio6.0套装软件中。
该工具在速度和代码量要求较高的场合中是首选工具。
它在以前版本的基础上有增加了许多的特性。
除了支持Internet特性外,ADO数据绑定、ATL复合控件、AutoCompletion、编辑和继续特性、OLE-DB提供者模块、延迟加载移入以及新的调试特性等都给VisualC++6.0增色不少。
开发者可以充分利用VisualC++6.0的这些特性,构建出自己的Windows应用程序[5]。
VisualC++它大概可以分成三个主要的部分:
1DeveloperStudio
这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“MicrosoftVisualC++”,所以很多人理所当然的认为,那就是VisualC++了。
其实不然,虽然DeveloperStudio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。
我们也知道,DeveloperStudio并不是专门用于VC的,它也同样用于VB,VJ,VID等VisualStudio家族的其他同胞兄弟。
所以不要把DeveloperStudio当成VisualC++,它充其量只是VisualC++的一个壳子而已。
这一点请切记!
2MFC
从理论上来讲,MFC也不是专用于VisualC++,BorlandC++、C++Builder和SymantecC++同样可以处理MFC。
同时,用VisualC++编写代码也并不意味着一定要用MFC,只要愿意,用VisualC++来编写SDK程序,或者使用STL,ATL,一样没有限制。
不过,VisualC++本来就是为MFC打造的,VisualC++中的许多特征和语言扩展也是为MFC而设计的,所以用VisualC++而不用MFC就等于抛弃了VisualC++中很大的一部分功能。
但是,VisualC++也不等于MFC。
3PlatformSDK
这才是VisualC++和整个VisualStudio的精华和灵魂,虽然我们很少能直接接触到它。
大致说来,PlatformSDK是以MicrosoftC/C++编译器为核心(不是VisualC++,看清楚了),配合MASM,辅以其他一些工具和文档资料。
上面说到DeveloperStudio没有编译程序的功能,那么这项工作是由谁来完成的呢?
是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成VisualStudio的基石[6][7]。
2.4OPENCV简介
OpenCV(OpenComputerVision)既开源计算机视觉库,采用C/C++语言编写,能够运行在Windows/Linux/Mac等操作系统上,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV是计算机视觉、模式识别、图像处理、信号处理、视频监控等相关从业人员的好工具。
它包含了300多个C函数的跨平台的中、高层API。
在这些已经完成的函数的基础上,相关人员可以迅速的开展自己的工作,而不需要从最原始的函数一点一点的开始。
而且它为IPP(Intel®IntegratedPerformancePrimitives)提供了透明的接口。
这表明OpenCV将在运行时自动加载这些库。
整个OpenCV函数库主要包含以下几个模块:
1CxCore:
提供各种数据类型的基本功能,包含一些基本结构和算法函数。
2HighGUI:
提供用户交互部分(GUI、图像视频I/O、系统调用函数)的函数。
3Cv:
这个是OpenCV的主要函数,包含图像处理、运动分析、结构分析、模式识别、摄像机标定和物体跟踪等功能。
4CvAux:
是OpenCV的附加函数库,包含ViewMorphing,三维跟踪,PCA,HMM等实验性的函数[8][9]。
3识别算法分析
数字的识别,可以归类到字符的识别。
目前的方法主要可以分为两大类:
全局分析和结构分析。
对于全局分析来说,最主要的方法是模板匹配法,这类方法通常是和统计分类法一起使用的。
其特点是,分析简单,但是计算量大,而且错误率高。
对于结构分析来说,法主要分析的是字符的轮廓或骨架上提取字符形状的基本特征。
和结构特征匹配使用的,通常是一些句法的分类方法。
但是知道目前为止,还没有一个简单的方法能够对完全没有限制的手写数字的识别,做到很高的识别率和识别精度。
所以,只能向着更加成熟、复杂、综合的方向发展。
充分的利用现在比较热门的理论技术,比如:
Bayes决策、句法方法、BP神经网络等。
是解决这一难题的很好的途径。
我们来简单的了解一下这些识别算法[10][11][12]。
3.1Bayes决策
根据各种事件发生的先验概率球的求得后验概率,以此进行决策的方法称为贝叶斯决策方法。
为了减少这种决策的风险,通过科学实验、调查、统计分析等方法获得较为准确的事件信息,以修正其先验概率。
贝叶斯分类决策包括以下步骤:
1进行预后验分析,决定是否值得搜索资料以及确定从这些资料可能得到的结果并决定最有方法。
2搜集补充资料,取得先验概率及类条件概率密度,并验明其是否适合计算后验概率。
3计算联合概率和边际概率,用贝叶斯定理计算后验概率。
4用后验概率进行决策判断,获得分类结果。
3.2句法方法
又称结构方法或语言学方法。
它的基本思路是把一个完整的模式用多个简单的子模式的组合来表示,子模式又可以用更加简单的模式来表示。
最后得到一个类似于树形的结构描述。
最底层的子模式称为模式基元,它就好像是决策分类法中的特征一样。
通常要求所选的基元能够对模式提供一个紧凑的反应其结构关系的描述,又要易于用非句法方法加以描述,称为模式描述语句,这个就相当于语言中的语法一样。
一旦基元被鉴定,识别过程就可以通过句法分析进行,就是分析给定的模式语句是否符合指定的语法,满足的就被分到这个类别中。
3.3BP神经网络
神经网络算法是最近新兴的一种人工智能技术,它的设计思路是模拟人脑的结构和功能来推理分类系统。
它通过调整权重和阀值来学习或发现变量间的关系。
人工神经网络的基本单元是神经元,基本神经元模型的数学表达式如下:
(3-1)
(3-2)
其中,ωi为权值,θ为阀值,f(s)为作用函数。
作用函数一般采用S型函数表达式如下:
(3-3)
BP神经网络算法是神经网络算法的一种变形,它包括前向计算和反向计算两个关键算法。
所以这个算法又称为BP误差反穿算法。
1前向计算。
设n次迭代中第j个单元的输入为
输入为
,单元j的净输入
为:
(3-4)
其中p为加到单元j上的输入的个数,
为前一层单元i到单元j的连接权,则有输出:
(3-5)
其中
为作用函数,若单元j的作用函数为Sigmoid函数,则有:
(3-6)
(3-7)
2反向计算。
设期望输出为
,则误差信号
为
,输出端总的平方误差
为:
(3-8)
其中q为输出端的个数,设训练集中样本的总数为N个,则平方误差的均值
为:
(3-9)
权值
的修正量为:
(3-10)
负号表示修正量按梯度下降方向,其中
称为局部梯度,当单元j是一个输出单元是,有:
(3-11)
当单元j是隐含单元是,有:
(3-12)
为单元j到后一层单元k的链接权。
3按下式修改权值:
(3-13)
3.4模板匹配法
所谓的模板匹配法,就是将待测图像的特征和已经训练好的模板中的特征进行对比,选出特征最为相近的模板进行分类的方法。
这种算法是识别算法中,最简单和最易于理解的方法。
例如要对一个图像进行分类。
其中模板库中,A类有40个样本,B类有10个样本。
那么就要使待测样本和A类和B类中的每一个样本进行匹配计算它们的相似度,然后找出相似度最大的那个样本,从而得到待测图像属于哪个类。
下面我们来看一下基于模板匹配法中的多类分类情况。
设有M个类别ω1,ω2,…,ωM,每类有若干向量表示,如ωi类,则有:
对于任意被识别的数字X,
计算特征距离d(xi,yi),若存在某个i,使
j=1,2,…,M,i≠j
则待识别的数字X∈ωi。
在进行判别时,X和Y两点距离可以用|X-Y|2来表示,既:
(3-14)
式中的
是特征的线性判别函数:
(3-15)
若
,则X∈ωi。
这就是多类问题的最小距离分类法。
4总体设计
手写数字的识别过程主要是将要识别的数字图像的特征向量输入已经定义好的网络结构中,通过已经保存的各级网络的权值(即数字模板的相关信息)来计算出输入特征的数据结果,将此计算结果和标准的数字类别比较,即可识别出相应数字的归类。
4.1识别系统设计思路
对于一般的手写数字图像处理系统来说,实现识别的步骤主要有以下几步:
1对所要识别的数字图像进行必要的预处理。
预处理包括:
数字外界矩形图像的获取,图像噪声的去除,图像的二值化处理,图像的相对位置校正,图像大小的校正,图像数字笔划粗细的调整等。
图像的二值化处理:
将图像中的数字目标通过二值化处理,从图像中提取出来。
对于数字识别.可以使用常用的二值化方法来实现。
具体阈值的选取取决于具体的图像像素情况,一般情况选取区域像素的平均值。
图像噪声的去除:
取出图像数字周围的一些孤立点和噪声信号.并对图像笔划中的不规则笔划进行校正。
在二值化的图像中可能有一些图像笔划的凹凸现象.对于此类现象,可以通过数学形态学中的一些基本运算.选取适当的结构元素去除笔划的凹凸现象和数字周围的一些孤立点。
图像位置的校正:
对于各种情况下的图像数字,图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 OPENCV 手写 数字 识别 系统 开发 毕业 作品
![提示](https://static.bdocx.com/images/bang_tan.gif)