一起研究的。
在过去的数几年中,研究者提出了许许多多的识别方法,按提取的数字特征的不同,可以将这些方法分为两类:基于结构特征的方法和基于统计特征的方法。统计特征通常包括点密度的测量、矩、特征区域等;结构特征通常包括圆、端点、交叉点、笔划、轮廓等,一般来说,两类特征各有优势。例如,使用统计特征的分类器易于训练,而且对于使用统计特征的分类器,在给定的训练集上能够得到相对较高的识别率;而结构特征的主要优点之一是能描述字符的结构,在识别过程中能有效地结合几何和结构的知识,因此能够得到可靠性较高的识别结果。在此次的设计中使用的是统计特征。
基于以上所述,本次毕业设计课题为手写数字识别系统的设计与实现。其功能是将人工手绘的数字图像转换成可编辑的文本信息。该系统包括手写数字绘制模块、图像预处理模块、特征提取模块、训练模块和识别模块。涉及模式识别、图像处理、人工智能、统计学、心理学和计算机科学等相关内容。通过对图像处理和识别算法进行不断地研究和实践,以降低误识率和拒识率。
本文主要介绍手写数字识别系统的设计与实现,首先需要了解手写数字识别系统现阶段的发展情况和研究现状,然后对系统进行分析,主要从功能需求分析、性能需求分析、数据需求分析和相关软件介绍四方面入手,从而使得对系统有初步的认识,然后对系统的整体设计模块进行介绍,进而对系统的各个功能模块具体的设计原理进行详细介绍,之后对本次所设计出的系统进行介绍并对相关代码进行说明,最后总结本系统的优缺点及今后工作展望等,整篇文章通俗易懂,条理清晰,可以使读者轻松阅读,并理解实现过程。
3
1 需求分析
综合用户在实际应用中的需求,对系统的运作流程进行了整理,并通过对流程的分析得出了如下的需求分析。 1.1 功能需求分析
根据对用户需求的分析,系统应包含以下功能: 1)数字的绘制
在绘制数字的窗口中实现数字的手写,并对其坐标值进行保存,利用复位按钮可实现数字的清除工作。
2)数字的预处理
在手写数字图像识别系统中,图像的预处理跟一般图像系统不同,我们不需要对图像进行灰度化处理、去噪处理等基本操作,我们利用程序保存的坐标值就可以对生成一张二值化图像,相当于图像处理系统的二值化处理。
3)特征的提取
在第二步中我们得到了手写数字的二值化图像,进行特征提取前需要对此图像的数据区域进行定位,在程序中我们遍历此二值化图像,找到手写数字区域的上、下、左、右边界,重新生成一张数字图片,利用新生成的数字图片分成8*8的区域,统计每个区域的目标像素个数和整个小区域像素个数,计算目标像素个数与整个小区域像素的比值,得到64个特征值,作为这个手写数字的特征值。
4)特征库的训练
我们需要训练一个特征库,作为识别的标准。系统中我们手写一个数字提取出它的特征值,再输入此手写数字,将数字与这些特征值相对应存储到特征库里面,特征库我们使用的是Access数据库,字段是数字及这个数字所对应所有特征值。特征库越丰富,识别率越高。
5)数字识别
在手写数字识别中,我们使用的方法是模板匹配法,其实质就是提取出手写数字的特征值,利用这些特征值与特征库的数字的特征值进行比对,找出待识别数字特征值与特征库里存储的特征值最接近的数字,作为识别结果。 1.2 性能需求分析
1) 正确性:根据手写数字识别系统的设计流程,流程中的每个步骤在系统
4
中都必须有所体现,以保证程序的正确性。
2) 精确性:根据手写数字识别系统的应用领域,该系统的识别结果必须有很高的识别精度,这样才能真正的实现该系统的价值。
3) 效率性:根据该系统的应用领域可知,系统一旦投入应用需要处理大量的数据,所以对系统的处理速度也有很高的要求。
1.3 数据需求分析
根据手写数字识别系统的设计步骤可知该系统采用的是模板匹配法进行手写体数字识别。模板匹配法是图像识别中最具有代表性的方法之一。它是将从待识别的图像提取的若干特征量与模板对应的特征量进行比较,计算图像和模板特征量之间的距离,用最小距离法判定所属类。而模板匹配通常需要事先建立标准模板库。这里,模板库中的标准模板是数字样本的特征向量。特征库的存储是利用Access数据库,并且利用MFC ADO技术连接数据库,不需要进行硬件配置。数据库如图1.1所示。
图1.1 数据库
1.4 相关软件介绍
本课题是基于Visual C++6.0的,它是Microsoft公司开发的Visual Studio集成开发环境中功能最为强大、代码效率最高的开发工共。利用VisualC++6.0可以两种方式编写Win32应用程序,一种方式是基于Windows API的C编程方式,另一种是基于MFC的C++编程方式。本系统采用的是基于MFC的编程方式。
5
2 手写数字识别系统的设计与基本原理
2.1 系统整体功能模块设计
整体模块如图2.1所示:
主界面 数字图像的绘制 二值化处理 特征提取 训练特征库 数字识别
图2.1 整体模块
2.2 手写数字识别系统的基本原理
下面分别介绍各部分工作的基本原理:
2.2.1 数字图像的绘制
手写数字绘制功能的实现方案是:通过Visual C++中的CStatic控件来建立画布,用MFC中的封装类CDC实现手写数字功能。在对话框中,响应鼠标事件的消息,分别是鼠标按下事件MouseDown,鼠标移动事件MouseMove,鼠标抬起事件MouseUp,判断当前鼠标点是否在CStatic控件上,在的话程序将此点的坐标值保存。手写数字的绘制开始是鼠标按下事件,结束是以左鼠标抬起为标志。
2.2.2 图像的预处理
图像的预处理是为了突出手写体数字的特征。在本次设计中主要包括:图像二值化处理。
图像的二值化处理就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。在手写数字识别系统中,我们在VC可视化编程界面中在一个固定大小的控件中手写了一个数字,在程序中获得的只是以这个控件左上角为原点的一系列坐标。在内存中我们开辟一个大小跟这个控件区域
6
大小相同的二维数组(以像素为单位,即生成一张图片的长跟宽跟这个矩形区域相等),这样内存中图像的数据区域的二维数组就跟手写区域的坐标相同,我们再取出手写区域的坐标值,将这些坐标值对应到图像图像数据区域中,并且将它的灰度值置为255(白色),将图像数据区域的其它坐标值下的灰度值置为0(黑色),这样我们就得到了一张手写数字的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。
2.2.3 图像的特征提取
若直接把预处理后的数据作为输入量,进行分类计算时数据时数据量大,同时由于手写字体的多样化及图像本身和预处理过程中附带的某些干扰的影响,对系统的容错能力要求较高。特征提取的目的就是从分析数字的拓扑结构入手,把它的某些结构特征提取出来,使数字的位移、大小变化、字形畸形等干扰相对较小,也就是把那些反映数字特征的关键信息提供给系统,这样就等于间接地增加了系统的容错能力,而且经过特征提取后数据量也大大减少了,这样就提高了识别的效率。
手写数字识别的特征提取极大程度地影响着分类器的设计和性能,以及识别的效果和效率。为了保证所要求的分类识别的正确率和节省资源,希望依据最少的特征达到所要求的分类识别的正确率。在进行手写数字识别的过程中,特征提取应遵循以下原则:
1)特征应能尽量包含字符的有用信息。 2)特征的提取方法应简单而且提取快速。 3)各个特征之间的相关性应尽可能小。 4)特征数量尽可能少。 5)特征应有较好的抗干扰能力。
考虑到算法的实时性、快速性和准确性,在此次设计中采用的是一种简单的模板法对待测样本进行特征提取。步骤为:1、搜索数据区域,找出手写体数字的上下左右边界。2、将搜索到的数字区域平分成8*8共64个小区域。3、计算8*8的每一个小区域中白色像素所占比例,即用每一个小区域内的白色像素个数除以该小区域的面积总数(总像素数),即得特征值,第一行的8个比例值是特征的前
7