数字字符识别系统-毕业设计.doc_第1页
数字字符识别系统-毕业设计.doc_第2页
数字字符识别系统-毕业设计.doc_第3页
数字字符识别系统-毕业设计.doc_第4页
数字字符识别系统-毕业设计.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

华侨大学机电及自动化学院本科毕业设计(论文) 毕 业 论 文 (科 学 研 究 报 告)题 目用U描述子识别数字院(系)别机电及自动化学院专 业机械电子级 别2009 学 号姓 名指导老师 华 侨 大 学 教 务 处 2013年6月2 华侨大学机电及自动化学院本科毕业设计(论文)摘 要数字识别系统作为字符识别系统的基础,能够准确地、快速地将数字识别出来。同时也为研究其它字符提供了探索的原理和方法。本文提出了一个相对较完整的数字字符识别方法,主要将对提取边缘点和边缘点单向单点搜索进行主要论述。其它内容还包括综述了国内外流行的字符识别算法,并相应介绍如何基于VC+实现系统的功能。同时也将对灰度均值二值化算法、边缘提取、算法应用、模板建立等相关过程进行论述。由于本文采用的方法是单点单方向法对数字进行边缘搜索,故会出现几个边缘搜索的几个特殊情况,这些特殊情况的剔除将大大提高系统的准确性,再利用模板匹配法进行数字字符的识别。数字字符识别系统的实现效果表明,本文介绍的数字字符识别方法速度快,适合应用在实时系统中,适应性较强,识别率也不错。关键词:数字识别; 灰度化; 二值化; 边缘点ABSTRACTNumber recognition system as the basis of the character recognition system, it is possible to be identified the number accurately and quickly.And it given an Exploring the principles and methods to study other characters.This paper presents a relatively completenumeric character recognition methods, and will discusses the major which including extracting the edge points and the method of single-direction-single-pointedge-points search. Other also includes the popular at home and abroad character recognition algorithm and describes how to achieve the function of the system and the corresponding based on VC + + . Also the gray binarization algorithm, edge extraction algorithm, template establishment processes will be discussed. In this paper, the method is a single point in one direction on the numeric edge search, so there will be several edge search a few special circumstances, these special circumstances culling will greatly enhance the accuracy of the system, and then use the template matching method for digital character recognition.Achieve the effect of the digital character recognition system indicate that this article describes the digital character recognition method is fast and suitable for application in real-time systems, adaptability, the recognition rate is also good.KEY WORDS:Digital identification; Gray; Binarization; Edge points 目 录前 言 .1第1章基于VC+的数字识别系统的基本框架21.1VC+简介21.2基于VC+系统框架的建立21.2.1建立单文档窗口21.2.2添加CDib类41.2.3添加消息响应函数51.3本章小结6第2章图像数据读取72.1图像数据分析72.1.1BMP位图介绍72.1.2BMP文件数据的组成72.2图像数据的读入72.2.1文件头的读入72.2.2信息头的读入82.2.3 图像数据92.3本章小结9第3章图像的灰度化二值化103.1图像灰度化103.1.1图像灰度化介绍103.1.2灰度化方法103.1.3如何实现像素灰度转换103.2图像二值化103.2.1图像二值化介绍103.2.2如何实现二值化113.3实现效果123.4本章小结12第4章提取边缘点及计算134.1提取边缘点的相关介绍134.1.1什么是边缘134.1.2边缘提取的方法134.1.3本文使用的方法134.2如何提取边缘点134.2.1确定第一个边缘点134.2.2确认边缘点的一般方法144.2.3五种特殊非边缘点剔除164.3边缘周长计算及相关数据的存储194.3.1像素点之间的距离计算194.3.2相关数据的存储204.4本章小结20第5章U系统和U描述子215.1分段线性U系统215.2U描述子简介235.3U描述子的性质245.4U描述子的应用255.5本章小结27第6章数字的识别286.1数字模板286.1.1为何要建立数字模板286.1.2如何建立数字模板286.2数字识别296.2.1系统如何识别296.2.2识别方法296.2.3实现结果306.3本章小结31第7章系统测试与评价327.1测试总要求327.2测试过程327.3测试结果评析347.3.1错误率原因猜测347.3.2如何进行改进347.4本章小结35结束语 36致谢 参考文献V前 言随着图形图像技术的发展,数字识别技术也越来越趋于成熟,特别是应用在现在的车牌识别技术准确率越来越高,识别速度越来越快。数字识别已经成为计算机基础图像识别的重要组成部分之一,应用十分广泛。研究数字识别,无论对于理论还是都有极其重大的意义。在实践中,数字识别乃至一般物体识别的研究则能给人类生活的方方面面,尤其是交通、国防、教育带来极为重大的影响,甚至改变人们生活的模式,对整个社会有着深远的意义。现如今国内外有不少的机构和公司都正致力于开发和推出针对不同种类的数字识别系统。像湖南金码科技公司,德国捷德公司等。其中有专门针对银行存折号码自动检测的,有针对钞票号码进行号码自动检测的,有对汽车牌照自动识别的。我国在数字识别系统地研制和生产上起步较晚,是自助设备已经在社会上广泛应用时才开始进行研制和生产,在此领域的专项研究处于起步阶段,目前许多科研院所、企业都投入了相当的人力、物力进行研究开发,取得了显著的成果,某些成果达到了国际领先水平。数字字符识别系统主要实现将用户从本地磁盘中选择的数字图像中的数字字符识别出来。为了提高数字识别系统的识别率,本文阐述了一种适应性较好的基于模板匹配算法的数字字符识别方法,并把此数字字符识别方法应用于数字字符识别系统的实现,但由于本文不涉及图片滤波、对图片中前景背景的提取,所以实现的效果会有较大的识别率。本文主体内容分为以下三部分:1. 基于VC+数字识别系统框架的设计:详细叙述了如何建立数字识别系统的基本框架。2. 基于VC+文档类数字字符识别系统的实现:详细的论述了应用基于调节因子的灰度平均值作为阈值的二值化算法、基于VC+平台的边缘点提取方法和解决如何剔除用单像素搜索法出现的特殊点等等实现各个功能的过程和实现效果。3. 系统测试与评价:通过对图片数字字符翻转、缩放进行识别,从而得出识别系统的准确率,对相应出现的问题提出解决的方案。39第1章 基于VC+的数字识别系统的基本框架1.1 VC+简介Microsoft VisualC+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。Visual C+ 6.0是本系统所使用的编程平台,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。Visual C+6.0由Microsoft开发, 它不仅是一个C+ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。它以拥有“语法高亮”,IntelliSense(自动完成功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C+类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。1本系统使用的编程环境是MFC,编程软件为Visual C+ 6.0。1.2 基于VC+系统框架的建立1.2.1 建立单文档窗口用VC+向导建立一个单文档工程,名称为Project,具体创建步骤如下:(1)选择文件-新建菜单命令,打开“新建”对话框。(2)在“工程”选项卡中,选择MFC AppWizard(exe)工程类型,并设置工程名为Project,单击OK按钮,打开MFC应用程序向导,如图2.2所示。图1.1 建立Project工程 (3)选择单文档,单击完成按钮,如图2.3所示。图1.2 选择单文档 (4)单击确定按钮,向导将自动创建单文档用户界面应用程序框架,如图2.4所示。图1.3 完成工程创建1.2.2 添加CDib类(1)DIB设备无关位图介绍DIB设备无关位图文件,这是一种文件格式,是为了保证用某个应用程序创建的位图图形可以被其它应用程序装载或显示一样。DIB的与设备无关性主要体现在以下两个方面:DIB的颜色模式与设备无关。例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。运行在不同输出设备下的应用程序可以通过DIB来交换图象。2(2)添加CDib类由于MFC未提供DIB类,用户在使用DIB时将面临繁重的Windows API编程任务。为了减轻我们的编程压力,指导老师为我们提供了CDib类,现只需将这个类添加进代码即可,添加CDib类步骤如下:先将老师提供的“CDib.cpp”和“CDib.h”放入工程文件目录中,打开工程文件“project.dsw”,在工作空间“FileView”界面中,在“Source File”文件夹点击右键,选择“添加文件到工程(F)”,在相应的文件中选择“CDib.cpp”文件,点“确定”,就完成“CDib.cpp”文件的添加。用相同的方法在“Header File”文件夹点右键,将“CDib.h”头文件添加进去。如图1.4和图1.5。 图1.4 FileView界面 图1.5 添加cdib类1.2.3 添加消息响应函数在工作区间的“SourceView”窗口中,双击“Menu-IDR_MAINFRAME”, “文件-打开-建立类向导”,会弹出如图1.6,在“Object IDs”选择“ID_FILE_OPEN”,在Messages项选择“COMMAND”消息响应类型,点击“Add Function”,再点击“Edit Code”返回代码编辑。图1.6 建立类向导在视类“CProjectView”中“OnDraw”函数里添加如下代码,可实现文件打开读取功能。if (pDoc-m_pDib-m_lpBMIH!=NULL)CSize sizeFileDib = pDoc-m_pDib-GetDimensions();/显示图片pDoc-m_pDib-Draw(pDC,CPoint(0,0),sizeFileDib);1.3 本章小结本章主要介绍了编程环境Visual C+ 6.0,以及如何建立数字识别系统的基本框架。详细地介绍了如何用MFC建立单文档工程,如何添加类以及如何建立类向导。这些都是系统最基本的框架,最核心的内容将在后面几章论述。第2章 图像数据读取2.1 图像数据分析2.1.1 BMP位图介绍BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。32.1.2 BMP文件数据的组成BMP文件一般分为四部分:文件头、位图信息头、调色板和图像数据 (有些BMP图像,例如真彩色图像不需要调色板,这种图像的信息头之后紧跟着的就是图像数据)。BMP图像的文件结构如图2-1所示。图2-1 BMP位图的文件结构2.2 图像数据的读入2.2.1 文件头的读入图像数据的读入需要对BMP文件数据进行分析。我们可以对其文件头“BITMAPFILEHEADER”中成员变量bf Type的值来判断位图文件的类型,BMP格式的文件头bf Type值为0x4D42。读文件头:nCount = pFile-Read(LPVOID) &bmfh,sizeof(BITMAPFILEHEADER);判断读取文件头的大小是否正确:if(nCount != sizeof(BITMAPFILEHEADER)return false;/ 读文件出错判断图片是否为BMP格式:if(bmfh.bfType != 0x4d42)/ 判断是否是BMreturn false;/ 不是BMP文件,抛出异常详细代码参看工程文件。2.2.2 信息头的读入而同样的,可以从信息头我们可以记录该位图的宽度biWidth、位图的高度biHeight以及位图的大小和其他信息。这些信息主要在“BITMAPINFOHEADER”结构体里。首先,我们先获取BITMAPFILEHEADER的大小,存入数组中:nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);m_lpBMIH = (LPBITMAPINFOHEADER) new charnSize;再读取信息头结构体:nCount = pFile-Read(m_lpBMIH, nSize); ComputeMetrics();详细代码参看工程文件。2.2.3 调色板的构建调色板(color table)是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引。先计算调色板大小:ComputePaletteSize(m_lpBMIH-biBitCount);构建调色板:MakePalette();m_lpImage = (LPBYTE) new charm_dwSizeImage;详细代码参看工程文件。2.2.4 读取图像数据读取图像数据是我们后期主要处理的对象,我们可以用前面添加的CDib类中的Read函数将数据读进来。最后通过Ondraw将图像绘出。读入数据:nCount = pFile-Read(m_lpImage, m_dwSizeImage);或者通过指针的形式将图像数据记录:CProjectDoc *pDoc=GetDocument();CDib * pDib = pDoc-m_pDib;LPBITMAPINFOHEADER lpBMIH=pDib-m_lpBMIH;LPBYTE lpImage = pDib-m_lpImage;详细代码参看工程文件。2.3 本章小结图2-2 图像数据读取流程图本章主要图像数据结构,分别对图像文件头,图像信息头,调色板和图像数据进行操作。这些操作主要是判断图像是否为BMP格式,图像信息如何获取,调色板如何建立以及图像数据如何读入等。图像数据读取流程图如图2-2所示,可按列读取图像像素点的RGB值依次存入像素数据。第3章 图像的灰度化二值化3.1 图像灰度化3.1.1 图像灰度化介绍颜色可分为黑白色和彩色。黑白色指颜色中不包含任何的色彩成分,仅由黑色和白色组成。在RGB颜色模型中,如果R=G=B,则颜色(R, G, B)表示一种黑白颜色;其中R=G=B的值叫做灰度值,所以黑白色又叫做灰度颜色。彩色和灰度之间可以互相转化,由彩色转化为灰度的过程叫做灰度化处理。43.1.2 灰度化方法灰度化一般有四种方法:分量法、最大值法、平均值法、加权平均法。本次采用加权平均法。加权平均法: 根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像,所以灰度化公式如(3-1)所示Y(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j) (3-1)3.1.3 如何实现像素灰度转换要实现像素的灰度转化必须先获取各颜色的RGB分量:unsigned char R = *(unsigned char *)lpImage + lLineBytes * i + j);unsigned char G = *(unsigned char *)lpImage + lLineBytes * i + j);unsigned char B = *(unsigned char *)lpImage + lLineBytes * i + j);再由灰度值加权公式unsigned char Y =(9798 * R + 19235 * G + 3735 * B) / 32768;可以得到一个Y值,这个Y值就是灰度。3.2 图像二值化3.2.1 图像二值化介绍就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。53.2.2 如何实现二值化本次图像二值化是在图像灰度化的前提下,设定阀值T,当YT时,设定Y=255,当0YT时,设定Y=0。本次阀值T取30。编程代码如下:if (Y=30)Y=255;elseY=0;其程序方框图如图3-2所示:图3-1灰度二值化程序流程图值得一提的是,在对数据进行二值化后还要回写灰度值,这是为了覆盖原本的数据值,以便下次直接在此之上进行处理。其代码如下:*(unsigned char *)pDib-m_lpImage + lLineBytes * i + j - 2) = Y;*(unsigned char *)pDib-m_lpImage + lLineBytes * i + j - 1) = Y;*(unsigned char *)pDib-m_lpImage + lLineBytes * i + j ) = Y;3.3 实现效果灰度二值化后的效果如图3-2所示。 处理前 处理后图3-2 灰度二值化的对比效果3.4 本章小结本章主要介绍灰度化和二值化的原理和实现方法,是先通过灰度化得到每个像素的灰度值,然后设定一个阀值对其进行二值化,实现的方法简单,但是效果出现的锯齿却不是我们想得到的。第4章 提取边缘点及计算4.1 提取边缘点的相关介绍4.1.1 什么是边缘边缘提取时确定图像中边缘特征点,形成连续完整边界的图像处理方法。图像最基本的特征是边缘,边缘是图像性区域和另一个属性区域的交接处,是区域属性发生突变的地方,是图像中不确定性最大的地方。4.1.2 边缘提取的方法现有的图像边缘提取方法可以分为三大类:一类是基于某种固定的局部运算方法,如:微分法,拟合法等,它们属于经典的边缘提取方法;第二类则是以能量最小化为准则的全局提取方法,其特征是运用严格的数学方法对此问题进行分析,给出一维值代价函数作为最优提取依据,从全局最优的观点提取边缘,如松驰法,神经网络分析法等;第三类是以小波变换、数学形态学、分形理论等近年来发展起来的高新技术为代表的图像边缘提取方法。64.1.3 本文使用的方法由于本文系统设定读入的图片是白底黑字的图片,不再使用这些算子和边缘提取方法,但是又由于后面的描述子与矩函数要用到某些数据如图像轮廓长度L,边缘像素点之间距离V(i),像素点坐标W(x,y)。要记录这些数据就得寻找到边缘点,这就是本节要重点分析的边缘点确定和轮廓周长计算方法。4.2 如何提取边缘点由于都是微观像素点搜索,边缘提取时会遇到各种各样的特殊情况,如:会遇到单排像素点、死循环、如何让坐标像素点向一个方向搜索,解决这些的关键是如何剔除这些特殊点和提出可行可实施的方法措施。4.2.1 确定第一个边缘点为了便于边缘点搜索,首先先确定第一个边缘点,因为边缘是连续闭合的相邻边缘点组成,以第一个点可以搜索第二个点,最后以此作为闭合点完成全部边缘点的搜索。由于之前已经将图像数据存储在一个二维矩阵的内存空间,且图像已经灰度化、二值化,只有两个数值,0为黑色像素点,255为白色像素点。只要图像从左到右一行一行搜索,搜索到第一个黑色像素点就说明找到第一个边缘点,记录该点,跳出搜索循环。LPBYTE lpImage = pDib-m_lpImage;for(y=0; ynHeight & flag=1 ; y+ )for(x=0; xnWidth ; x+ )if(*( lpImage+y*nWidth+x)=0)flag=0;break;y-;详细代码参看工程文件。4.2.2 确认边缘点的一般方法1) 定义九宫格序号先定义像素点周边的八个点编号分为为如图3-5的像素点1至8,中间位当前像素点,如图4-1:图4-1 当前像素点周边领域编号编程的方法是先定义两个数组,各自存放相对于当前像素点的位置坐标,则可以写出如下代码int x18=-1,0,1,1,1,0,-1,-1;int y18=-1,-1,-1,0,1,1,1,0;2) 判断编号1像素点是否为边缘点若编号1周边的八个点全为黑色,则可确定当前像素点不是边缘点,若编号1周边的八个点不全为黑色,则确定该点为边缘点。如图4-2、4-3所示: 图4-2 先判断像素点1 图4-3 判断像素点1周边的八个点若此时编号1周边的八个点全为黑色,则将指针再次指向2,如图3-8,继续判断编号2周边的八个点是否全为黑色点,以此类推。直到找到不全为黑色点的伤害,记录当前点。图4-4 返回前一点编程代码如下:if(*( lpImage+(*y+y10)*nWidth+*x+x10)=0&*( lpImage+(*y+y11)*nWidth+*x+x11)=0&*( lpImage+(*y+y12)*nWidth+*x+x12)=0&*( lpImage+(*y+y13)*nWidth+*x+x13)=0&*( lpImage+(*y+y14)*nWidth+*x+x14)=0&*( lpImage+(*y+y15)*nWidth+*x+x15)=0&*( lpImage+(*y+y16)*nWidth+*x+x16)=0&*( lpImage+(*y+y17)*nWidth+*x+x17)=0)/*相应代码*/4.2.3 五种特殊非边缘点剔除1) 特殊情况1前一点剔除前一点的目的是为了让边缘点搜索沿着一个方向进行,也避免了边缘点搜索出现往返循环。剔除的方法很简单,只要当搜索指针指向前一点的时候,即当当前点的坐标值和前一点的坐标值相等,则越过此点。先定义前一点:int a;/a、b代表前一点坐标int b;编程代码如下:if(x=a & y=b) /*相应代码,若相等,剔除该点*/详细代码见工程文件。2) 特殊情况2前前一点为了避免如下如图4-5所示的死循环,此时还应该将前前一点的像素点剔除掉。图示中边缘点1为前前一点,边缘点2为前一点,边缘点3为当前点。图4-5 特殊情况2剔除的方法跟特殊情况1相似,也定义前前一点: int c;/c、d代表前前一点 int d;编程代码如下:if(x=a & y=b |(x=c&y=d) /*相应代码,若若等式成立,剔除该点*/详细代码见工程文件。3) 特殊情况3但是将前前一点剔除掉还会衍生出另一种特殊情况,如图4-6:图4-6 特殊情况3此时边缘点3既不能回到前边缘点2又不能返回前前边缘点1,边缘点3将成为死点,为了剔除这样的特殊点,我们采用了如下的方法:当边缘点1和边缘点2如图所示方向的对角时即 且 (为定义像素周边编号减1)时,只要当搜索指针指向该点的时候,则越过此点。编程代码如下:if(*x-x1i-*a=-1 & *y-y1i-*b=1 & i=1) /*相应代码,若等式成立,剔除该点*/详细代码参见工程文件。4) 特殊情况4解决了特殊情况3,我们还要考虑它出现的一个衍生问题,如图3-11:图4-7 特殊情况4出现这种情况要解决的方法就是要记录点4,从而在边缘搜索的时候剔除该点。而记录特殊点必须在特殊情况3当中的代码后的else if添加,即:if(*x-x1i-*a=-1 & *y-y1i-*b=1 & i=1) /*相应代码,若等式成立,剔除该点*/else if(*x-x1i-*a=-1 & *y-y1i-*b=1 & i=1)*e=*x;*f=*y;/记录特殊点 /*相应代码*/而剔除该种情况的编程代码如下:if(*x=*e & *y=*f & i=4) /*相应代码,若等式成立,剔除该点*/详细代码参见工程文件。5) 特殊情况5这几种情况解决完后还有一种情况我们不可忽视,就是单排单像素点:图4-8 特殊情况5解决这个问题主要是判断该点的左右方向是否为白色像素点,若是,则放弃该点,继续搜索。图4-9 特殊情况5的判断 编程代码如下:if(*(lpImage+(*y+1)*nWidth+*x)=255& *( lpImage+(*y-1)*nWidth+*x)=255)/*相应代码,若等式成立,剔除该点*/详细代码参见工程文件。4.3 边缘周长计算及相关数据的存储4.3.1 像素点之间的距离计算两像素点之间距离是设定相邻像素点距离1,对角像素点为。即像素点1、3、5、7返回值为,像素点2、4、6、8返回值为1。图3-13 编程代码如下:if(i+2)%2=0)/判断是否是对角,是就赋值,否则赋值1 return sqrt(2); /*相应代码*/else return 1; 详细代码参见工程文件。4.3.2 相关数据的存储在边缘搜索的时候同时也计算相应的数据,包括x的坐标点,y的坐标点,累加周长L,两点之间距离V。这些数据都毁在后面几章的计算将会用到。bianyuan为定义在两像素之间的距离,也就是在4.3.1当中所计算的返回值,通过for循环将周长L依次累加,同时依次记录x的坐标点、y的坐标点,以及每次L累加的即时周长等。编写代码如下:for(i=0;i8;i+)if(bianyuan!=0)/不等于0就说明是边缘点,记录该点L=L+bianyuan;j+;Xj=x;Yj=y;Wj=L;Vj=bianyuan;sum+;break;else;详细代码参见工程文件。4.4 本章小结本章主要介绍了数字识别系统如何提取边缘点,以及如何记录相关边缘点数据。详细地介绍了五种提取边缘点的特殊情况以及相应的解决方法,同时也详细介绍了存储相关数据的有效方法。第5章 U系统和U描述子5.1 分段线性U系统71983 年前后, 齐东旭与冯玉瑜建立了一类正交完备函数系 , 它由一系列k 次的分段多项式组成, 命名为k 次U 系统, k= 0, 1, 2,.它的组成既有光滑函数又有各个层次的间断函数, 而Walsh 函数就是U 系统在k = 0 时的特例.下面简单给出1次( 分段线性) U 系统的定义:其中,在间断点处,函数值取两侧极限平均值。如此定义的一次(分段线性)U系统8个函数的图像如图5-1所示:图5-1 一次U 系统的前8 个基函数图上述的分段线性U系统具有如下性质:(1) 标准正交性其中(2) Fourier-U级数收敛性若给定函数F的Fourier-U级数为。其中是将式(1)中定义的函数一次排序,即记及则 则这表明Fourier-U级数的收敛性及完备性;式(5)和式(6)表明Fourier-U级数的“分组”一致收敛性。(3) Fourier-U级数的再生性若函数F为分段线性函数,且期间断点仅出现在处,其中和为整数,那么F可以用有限项Fourier-U级数来精确表达。5.2 U描述子简介经采样的某一多边形曲线可以表示为:,i为虚数单位,为了叙述方便,我们以一次U系统为例来说明。为方便记法,表示一次U系统的第k个基,利用(7)式来计算这N个点的U变换系数,称为U描述子。5.3 U描述子的性质8基于U-系统的描述子都是来自Fourier描述子的思想。等分区间0,1,记其中。对给定的分段函数为N的平面曲线图组,整体上的表示为,其中,均为k次分段多项式。将分别分段映射到各个子区间,表达成 其中如果k次U-系统的前组基函数简记为由Fourier-U级数的再生性,并注意到k次多项式有k+1个自由度,有(1)其中 (2)若记则称为P(t)的第j个U-描述子,即 (3)进一步定义这个图组的“能量”为 (4) 由U-系统的正交性及再生性,“能量”E是一个正交变换下的不变量再令 (5)称为P(t)的第j个归一化描述子。假若两个对象A,B的归一化U-描述子分别为和,那么定义两个对象间的“距离”为 (6)归一化的U-描述子具有平移、缩放、旋转不变性。5.4 U描述子的应用算法中的为程序中数组Xi,为程序中数组Yi,t为,将式(1)拆分成式(2)的两个式子,分别算x、y两个坐标值和U-系统基函数。得到的数值在代入式(5),可以得到,最后用式(6)与模板值的进行计算比对,可以得到最小的Distance值。若以第一组U-系统的基函数为例,则编程如下:第一组基函数公式:,先分别计算 ,两个数值,分别赋给xzhi、yzhi两个变量。for(k=0;ksum-1;k+)xzhi1=xzhi1+Xk*Vk/L;yzhi1=yzhi1+Yk*Vk/L;再计算 ,即,得到的值赋给变量d1代码如下:d1=sqrt(xzhi1*xzhi1+yzhi1*yzhi1);用同样的方法分别计算八个不同的基函数,可得到八个不同的值d1、d2d8,从八个值选出最大值,赋值给MAX7,代码如下:MAX1=max(d1,d2);MAX2=max(d3,d4);MAX3=max(d5,d6);MAX4=max(d7,d8);MAX5=max(MAX1,MAX2);MAX6=max(MAX3,MAX4);MAX7=max(MAX5,MAX6);再计算公式,即:D1=d1/MAX7;其中D1就是式子的。5.5 本章小结本章是数字识别系统的核心,是提供如何识别数字的重要思想和理论依据。通过用U-系统的详细解析,解释为何归一化U描述子具有具有平移、缩放、旋转不变性。最后通过利用第4章的数据进行应用。第6章 数字的识别6.1 数字模板6.1.1 为何要建立数字模板由于识别系统是通过模板匹配进行对数字字符的识别,也就是通过最后二者误差最小值识别出数字,那么我们就必须建立数字模板作为数字识别的标准。6.1.2 如何建立数字模板由第五章5.4我们可以得到D1到D8的值,我们可以通过对系统的调试算出数字0-9每张模板图片的D1到D8的值,步骤如下:在计算D1的代码后面添加如下一段代码:CString stv;stv.Format(%f,D1);AfxMessageBox(stv);运行程序后可得到如下图6-1所示的数值:图6-1 调试出的D1值这段代码是将基函数D1值算出来,改变D1为D2可相应算出D2值,记录这些数值,就可以将同一张图片的八个不同基函数计算的D值显示出来。选择不同的模板图片,依次算出模板值。可得到10组数据,如图6-2:图6-2 模板数字将模板值输入在如下代码之中:double Muban0=/*输入模板值,共9个*/;double Muban1=/*输入模板值,共9个*/;double Muban9=/*输入模板值,共9个*/;模板建立完成。6.2 数字识别6.2.1 系统如何识别对用户从本地磁盘中选择的待识别图像进行预处理,将提取出的待识别数字的10组特征向量与模板中的每一个样本的10组特征量进行比较,计算它们之间的相关量,其中相关量最大的一个就表示其相似程度最高,表示待识别数字与该数字样本匹配地最好,则该样本的值即是数字识别的结果。6.2.2 识别方法由于数字集合比较小,本文采用简单,实事性较好的模板匹配算法对数字进行识别。在本系统将0至9十个数字样本的10位特征向量事先保存在物理文件里,当进行数字识别时,可以选择打开原先保存在文件中的模板,也可以当即进行样本训练,建立模板,然后把待识别的数字图像送入图像预处理模块,经过二值化等预处理,计算出10组特征向量,送入数字识别模块,计算待识别数字的10组特征向量与模板中的每一个样本的10组特征向量的差值,差值最小的那个样本的值即是数字识别的结果。6.2.3 实现结果数字识别的效果如图6-3、图6-4所示:图3-15 读取数字图3-16 数字识别效果6.3 本章小结本章主要对如何建立数字模板库和如何用模板匹配法进行对数字的识别进行了详细地论述。通过简单的调试得出的模板值,再将模板值嵌入进代码中,再进行匹配得出的结果就输出数字值。识别效果能够准确读出图像数字,但是想要测试该系统的准确率还需要对数据进行更多的测试,第七章将对系统多样板多模板进行多次测试。第7章 系统测试与评价7.1 测试总要求软件测试过程中应该故意地去促使错误的发生,也就是事情在不该出现的时候出现或者在应该出现的时候没有出现。从本质上说,软件测试是“探测”,在“探测”中发现软件的毛病。包括对系统的功能测试和性能测试,其中功能测试覆盖图像预处理和数字识别两个模块进行测试,测试功能有图像数据读取、图像灰度化、图像二值化、字符归一化、字符细化、特征提取、和数字识别等等;性能测试包括对模板建立和数字识别进行测试。7.2 测试过程不分数字图像测试结果:图4-1 测试1图4-2 测试2图4-3 测试3图4-4 测试47.3 测试结果评析7.3.1 错误率原因猜测本章通过对10个数字进行测试,发现大部分数字图片能读出相应的数字值,但也有几个数字不能读出,如图4-3中图片数字为2,但读出的数字值却是3,说明该系统的测试效果准确率不够高。由于本系统没有进行滤波处理,也没有相关边缘光滑处理,所以灰度二值化后图像出现严重的锯齿,导致后面计算周长和相关数据的时候出现较大的误差,再者就是由U-系统的基函数得出的D值都是非常小的数值,很难分辨出何者误差更小,导致最后系统很难识别出所有的数字图片。7.3.2 如何进行改进本系统应该在此基础上增加滤波处理,也没有相关边缘光滑处理,这样才能更好的对图像边缘的数据计算的更加精确,才能保证无关误差的影响。同时还要对U-系统的基函数进行优化。模板记录方法简单,但是过于繁琐。可以再模板匹配的基础上,通过读取模板图片进行模板数值的自动添加,可以省去很多人工操作量。7.4 本章小结本章首先综述了测试策略,最后重点描述了数字字符识别系统的测试结果及评价。本测试发现了数字字符的识别在实现中出现的一些问题,并及时提出,但由于时间的仓储和本人测试技术的有限,使得测试还不能深入到程序的每一个可能存在误差的地方和发现每一个存在的隐患,希望在今后不断的改进。 结 束 语通过这三个月的毕业设计,收益良多。即掌握了许多数字图像处理的技术,又理解了许多数字字符识别的算法,还锻炼了动手实践的能力,最重要的是增长了分析和思考问题,并带着问题去学习新的知识,最后能比较好的解决问题的能力。本文主要围绕

温馨提示

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

评论

0/150

提交评论