基于opencv的手写数字字符识别修改版_v3_第1页
基于opencv的手写数字字符识别修改版_v3_第2页
基于opencv的手写数字字符识别修改版_v3_第3页
基于opencv的手写数字字符识别修改版_v3_第4页
基于opencv的手写数字字符识别修改版_v3_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、1.1数字识别概述模式识别是六十年代初迅速发展起来的一门学科。由于它研究的是如何用机器来实现人(及某些动物)对事物的学习、识别和判断能力,因而受到了很多科技领域研究人员的注意,成为人工智能研究的一个重要方面。字符识别是模式识别的一个传统研究领域。从50年代开始,许多的研究者就在这一研究领域开展了广泛的探索,并为模式识别的发展产生了积极的影响。字符识别一般可以分为两类:1.联机字符识别;2.光学字符识别(Optical Chara- cter Recognition,OCR)或称离线字符识别。在联机字符识别中,计算机能够通过与计算机相连的输入设备获得输入字符笔划的顺序、笔划的方向以及字符的形状,

2、所以相对OCR来说它更容易识别一些。但联机字符识别有一个重要的不足就是要求输入者必须在指定的设备上书写,然而人们在生活中大部分的书写情况是不满足这一要求的,比如人们填写各种表格资料,开具支票等。如果需要计算机去认识这些己经成为文字的东西,就需要OCR技术。比起联机字符识别来,OCR不要求书写者在特定输入设备上书写,它可以与平常一样书写,所以OCR的应用更为广泛。OCR所使用的输入设备可以是任何一种图像采集设备,如CCD、扫描仪、数字相机等。通过使用这类采集设备,OCR系统将书写者已写好的文字作为图像输入到计算机中,然后由计算机去识别。由于OCR的输入只是简单的一副图像,它就不能像联机输入那样比

3、较容易的从物理特性上获得字符笔划的顺序信息,因此OCR是一个更具挑战性的问题。数字识别是多年来的研究热点,也是字符识别中的一个特别问题,它是本文研究的重点。数字识别在特定的环境下应用特别广泛,如邮政编码自动识别系统,税表和银行支票自动处理系统等。一般情况下,当涉及到数字识别时,人们往往要求识别器有很高的识别可靠性,特别是有关金额的数字识别时,如支票中填写的金额部分,更是如此。因此针对这类问题的处理系统设计的关键环节之一就是设计出高可靠性和高识别率的数字识别方法。然而可以说还没有哪个数字识别器达到完美的识别效果。在过去的数十年中,研究者们提出了许许多多的识别方法。按使用的特征不同,这些方法可以分

4、为两类:基于结构特征的方法和基于统计特征的方法。结构特征通常包括圆、端点、交叉点、笔划、轮廓等,统计特征通常包括点密度的测量、矩、特征区域等,一般来说,两类特征各有优势。例如,使用统计特征的分类器易于训练,而且对于使用统计特征的分类器,在给定的训练集上能够得到相对较高的识别率,而结构特征的主要优点之一是能描述字符的结构,在识别过程中能有效地结合几何和结构的知识,因此能够得到可靠性较高的识别结果。1.2数字图像处理的应用数字图像处理主要研究的内容有以下几个方面: 1、图像变换。由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离

5、散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。 2、图像编码压缩。图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。 3、图像增强和复原。图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像

6、增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像。 4、意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。 5、图像描述。图像描述是图像识别和理解的必要前提。作为最简单的二值

7、图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。 6、图像分类(识别)。图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。在数字识别中分类识别之前要利用数字图

8、象处理和计算机图形学的知识进行图象的预处理以便进行下面的特征提取以及识别。图象的预处理包括二值化、图象的增强、图象的锐化以及图象的分割等。1.3 本论文所做的工作本论文在数字识别及预处理方面做了如下工作:1、介绍了数字识别广阔的应用前景和常用的识别方法,通过分析指出数字识别的难点在于无法建立精确的数学模型和做出简单可行的识别系统。3、第二章分析了常规数字识别的基本步骤,并指出数字识别的关键步骤是预处理和特征提取。第2章数字识别系统的设计与实现2.1系统的实现平台程序采用Microsoft Visual Studio 2010与OpenCV2.4.8在Windows 7-64位旗舰版系统下开发完

9、成。并在Windows xp-32位系统下测试可用。2.2 系统的流程几种常用的解决问题的软件开发方法,一种是对问题追述的方法,也就是从问题的结果分析起一步一步找到问题的源头。另一种解决问题的方法是寻找容易解决的或者是己经解决的相关的问题转而应用到解决当前的问题来。但是当前软件开发中更为流行和常用的方法是逐步求精法。这种方法是一种由顶向下的方法,也就是由一般到特殊的方法,它的基本思想是将原始的问题分割成若干个子问题,子问题较整个大问题容易解决。本文程序设计采用逐步求精法,将整个系统问题分割成若干个子问题来做,主要包括图像预处理,特征提取,分类识别。首先分别对每个模块进行单元测试分析和模块测试,

10、然后再组合成系统,进行系统测试。预处理过程主要找到图像的ROI部分子图像并进行大小的归一化处理,特征提取将图像转化为特征向量,分类识别采用k-近邻分类方法进行分类处理,最后根据分类结果完成识别工作。主流程图:细化流程图:2.3 系统的具体处理步骤2.3.1预处理预处理的过程就是找到图像的ROI区域的过程,如下图所示:首先找到数字的边界框,然后大小归一化数字图片,主要流程如下图所示:主要代码:IplImage preprocessing(IplImage* imgSrc,int new_width, int new_height)IplImage* result;IplImage* scaled

11、Result;CvMat data;CvMat dataA;CvRect bb;/bounding boxCvRect bba;/boundinb box maintain aspect ratio/Find bounding box找到边界框bb=findBB(imgSrc);cvGetSubRect(imgSrc, &data, cvRect(bb.x, bb.y, bb.width, bb.height);int size=(bb.width>bb.height)?bb.width:bb.height;result=cvCreateImage( cvSize( size,

12、size ), 8, 1 );cvSet(result,CV_RGB(255,255,255),NULL);/将图像放中间,大小归一化int x=(int)floor(float)(size-bb.width)/2.0f);int y=(int)floor(float)(size-bb.height)/2.0f);cvGetSubRect(result, &dataA, cvRect(x,y,bb.width, bb.height);cvCopy(&data, &dataA, NULL);/Scale resultscaledResult=cvCreateImage(

13、cvSize( new_width, new_height ), 8, 1 );cvResize(result, scaledResult, CV_INTER_NN);/Return processed datareturn *scaledResult;/直接返回处理后的图片2.3.2特征提取在拿到ROI图像减少了信息量之后,就可以直接用图片作为向量矩阵作为输入:void basicOCR:getData()IplImage* src_image;IplImage prs_image;CvMat row,data;char file255;int i,j;for(i =0; i<clas

14、ses; i+)/总共10个数字for( j = 0; j< train_samples; j+)/每个数字50个样本/加载所有的样本pbm格式图像作为训练if(j<10)sprintf(file,"%s%d/%d0%d.pbm",file_path, i, i , j);elsesprintf(file,"%s%d/%d%d.pbm",file_path, i, i , j);src_image = cvLoadImage(file,0);if(!src_image)printf("Error: Cant load image %

15、sn", file);/exit(-1);/process fileprs_image = preprocessing(src_image, size, size);/生成训练矩阵,每个图像作为一个向量cvGetRow(trainClasses, &row, i*train_samples + j);cvSet(&row, cvRealScalar(i);/Set data cvGetRow(trainData, &row, i*train_samples + j);IplImage* img = cvCreateImage( cvSize( size, si

16、ze ), IPL_DEPTH_32F, 1 );/转换换 8 bits image to 32 位浮点数图片取值区间为0,1/scale = 0.0039215 = 1/255; cvConvertScale(&prs_image, img, 0.0039215, 0);cvGetSubRect(img, &data, cvRect(0,0, size,size);CvMat row_header, *row1;/convert data matrix sizexsize to vecorrow1 = cvReshape( &

17、amp;data, &row_header, 0, 1 );cvCopy(row1, &row, NULL);2.3.3分类识别识别方法采用knn近邻分类法。这个算法首先贮藏所有的训练样本,然后通过分析(包括选举,计算加权和等方式)一个新样本周围K个最近邻以给出该样本的相应值。这种方法有时候被称作“基于样本的学习”,即为了预测,我们对于给定的输入搜索最近的已知其相应的特征向量。K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本

18、中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。识别工作主要有以下几个步骤:1. 初始化机器学习算法,及其训练knn=new CvKNearest( trainData, trainClasses, 0, false, K )

19、;因为trainData, trainClasses数据已得到。训练在CvKNearest算法初始化中已经完成2. 识别获取识别测试的数据,testDataresult=knn->find_nearest(testData,K,0,0,nearest,0);result为返回的识别的结果2.4实验结果实验截图程序界面由以上两个界面构成,第一个用于介绍软件的使用说明和软件实际运行时的识别效果,主要由三个指标:识别结果,测试精度,准确度。第二个界面提供给使用者输入想要识别的数字。在knn参数k=5,子图像向量大小选取128*128像素,训练样本50副图片,测试样本50副图片,系统误识率为7.

20、4%。对于用户手写阿拉伯数字2的识别结果为2,识别比较准确。2.5未来的工作本程序主要参照网上的一些实例完成了部署跟实验工作,虽然仅仅完成了手写阿拉伯数字的识别工作,但是字符识别的一些原理工作都是相同的,未来能够从一下几个方面进行提高:1、提高程序的识别准确率,从一些文献实现的结果来看,简单的模型结合大量的训练样本,往往效果比复杂的模型结合少量训练样本实现的效果好。2、扩展程序的功能,从实现简单的字符到最终实现识别手写汉字等。3、提高识别速度,改进算法为并行算法,实现如联机在线识别等。3.总结对于数字图像处理这门课的最后综合性作业,我们组进行了友好的任务分配,经过一个月的实践,我们终于能够基本实现其功能,虽然过程是很艰辛的,但是对于我们自身来说却是十分有意义的。我们的设计题目是基于opencv的手写数字识别。数字识别技术发展到现在已经很成熟了,它的应用范围也很广泛。数字识别的实现是有很大实际意义的。在我所做的这个系统中主要应用到了三门学科:数字图象处理、模式识

温馨提示

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

评论

0/150

提交评论