1、南 京 师 范 大 学毕 业 设 计(论 文)( 2010 届 )题 目: 基于霍夫变换的简单图形识别 学 院: 中北学院 专 业: 计算机科学与技术 姓 名: 张丹 学 号: 18063619 指导教师: 胡勇 南京师范大学教务处 1摘要计算机视觉中经常需要识别或者定位某些几何图形,比如直线,圆等,还有其他一些图形。检测这些几何图形的霍夫变换提供了在图像中寻找图形的一种算法。本论文就是主要讲述了霍夫变换的基本原理和实现方法,并在此基础上,实现基于霍夫变换的图像文件(bmp)文件格式下简单图形的识别,主要是对直线和圆的识别。采用标准霍夫变换实现对直线的识别,能够较快速并准确的定位图形中的直线,
2、基于简单易懂的原则,采用经典霍夫变换实现对圆的识别,需要大量内存且运行速度慢,但也能大致定位图形中的圆。这在提取交通标志图像中的直线,航空、卫星图像中道路检测,虹膜检测,油罐车罐口定位等实际问题和领域中都有很多的应用。关键词:图形识别 霍夫变换 直线检测 圆检测2AbstractComputer vision are often necessary to identify or locate some of the geometry,such as lines,circles and other graphics.Hough transform to detect these geometry
3、 provides a graphic image to find an algorithm.This thesis mainly describes the basic principle of Hough transform and realization,and on this basis, implement the Simple Graph Recognition in Image of .bmp based on the Hough Transform, the line recognition and the circle recognition. Use the Standar
4、d Hough transform on the line identification, it was able to more quickly and accurately locate the line graph, Based on the principles easy to understand,Use the classical Hough transform on the circle of identification, needs a lot of memory and slow, but also can positioning of the circle graph.T
5、he field of pratical problems have many applications on the extraction of traffic signs in the image line,aviation,satellite image of road detection,the iris detection,tank Guankou positioning.Key Words:Graph Recognition Hough Transform Straight line detection Circle detection3目录第一章 概述 41.1 引 言 41.2
6、 在工程图的识别中常用的方法 41.2.1 霍夫 变换直线检测算法 41.2.2 霍夫变换圆检测算法 4第二章 相关理论和算法及实现技术 62.1 图像格式 BMP 格式 62.2 算法及数学基础 62.2.1 霍夫变换(Hough Transform) 62.2.2 基于霍夫变换的直线和圆的识别算法 62.3 主要技术 9第三章 直线和圆的识别的实现 103.1 软件的简单结构图示 103.2 数据结构及类的设计 103.2.1 主要类的结构 103.2.2 图形类 113.2.3 霍夫变换识别直线函数 113.2.4 霍夫变换识别圆函数 113.3 具体实现 113.4 实验结果及存在的不
7、足 133.5 总结及展望 13致谢词 15参考文献 16附录 174第一章 概述1.1 引言计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随着计算机的发展得到了迅速的发展。特别是图形图像的计算机处理技术更是有了前所未有的进步和应用。计算机识别也逐渐的从图形图像处理的大环境下分离出来作为一门新的高科技研究领域出现。图形图像的识别涉及到的学科很多,包括数字信号处理、工程数学、信息论、运筹学等,它与计算机、自动化、生物学、关学、视觉心里和生理学、人工智能、智能信息处理等众多领域交叉、综合集成,有广泛的应用。本论文实现的是图像文件(bmp)文件格式下简单图形的识别,识别基本的图形
8、是直线和圆。直线和圆是二值图像中最基本的组成元素,也是最常见的图形元素。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。霍夫变换(Hough Transform)是进行简单图形检测的一个可靠方法,它由 P.V.Hough 在 1959 年提出,霍夫变换具有优异的鲁棒性和极佳的抗干扰能力,对图像中的噪音不敏感,能够较好地处理局部遮挡,覆盖等情况。关于理想情况的几点说明:(1). 所识别的 bmp 图像文件是经过处理的,没有“
9、噪音”等,在本论文中直接采用的是单色图像(二值图像)。(2). 本论文中图像中的图形都是单一的线性。1.2 在工程图的识别中常用的方法1.2.1 霍夫变换直线检测算法霍夫变换是数字图象技术中一种有效的发现直线的算法。它是先把直角坐标系的目标点映射到极坐标系上进行累积, 即对 于 图 像 上 每 一 前 景 点 , 求 出参 数 平 面 对 应 的 直 线 , 把 这 直 线 上 的 所 有 点 的 值 都 加 1。 最 后 , 找 到 参 数 平面 上 最 大 点 的 位 置 , 这 个 位 置 就 是 原 图 像 上 直 线 的 参 数 。 由于这种点集是通过累积统计得到的,因而能够容忍直线
10、的间断。51.2.2 霍夫变换圆检测算法(1) 经典 Hough 变换已知圆的一般方程为(x-a) 2+(y-b)2=r2。式中(a,b)-圆心,r- 半径。把 x-y 平面上的圆转换到 a-b-r 参数空间,则图像空间中过任意一点的圆对应于参数空间中的一个三维锥面,图像空间中同一圆上的点对应与参数空间中的所有三维锥面必然交于一点,这样通过检测这一点可以得到圆的参数,相应的圆也可求得了。(2) 随机 Hough 变换所谓随机 Hough 变换就是指随机的在图像上采样几个点来确定一个圆。由于噪声和复杂背景的干扰,应用随机 Hough 变换检测圆时会产生随机采样的大量无效累积。(3) 广义的 Ho
11、ugh 变换广义的 Hough 变换是 Ballard 提出的可以检测不必知道曲线或区域边界的参数方程的任意形状的图形的算法。它之所以能处理任意形状的图形并不是找到了可以表示任意图形的方程(这是不可能的),而是使用表的形式描述一种图形,把图形边缘点坐标保存在一张表中,那么该图形就确定下来了。基于以上三种霍夫变换,我选择了第一种经典 Hough 变换,相比于其他两种算法而言,它比较简单,易于理解,并且容易实现。但缺点是耗时。6第二章 相关理论和算法及实现技术2.1 图像格式BMP 格式BMP(Bitmap-File)图像文件是 Windows 采用的图形文件格式,在 Windows环境下运行的所
12、有图像处理软件都支持 BMP 图像文件格式。 Windows 系统内部各图像绘制操作都是以 BMP 为基础的。Windows 3.0 以前的 BMP 图文件格式与显示设备有关,因此把这种 BMP 图形学文件格式称为设备相关位图 DDB(device-dependent bitmap)文件格式。windows 3.0 以后的 BMP 图像文件与显示设备无关,因此把这种 BMP 图像文件格式称为设备无关位图 DIB(device-independent bitmap)格式,目的是为了让 windows 能够在任何类型的显示设备上显示所存储的图像。BMP 位图文件默认的文件扩展名是 BMP 或者 b
13、mp(有时它也会以 DIB 或.RLE 作扩展名)。位图文件可看成由 4 个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、位图颜色列表(color table)和图像数据(image data)。2.2 算法及数学基础2.2.1 霍夫变换(Hough Transform)霍夫变换是图像处理中从图像中识别几何形状的基本方法之一。其基本思想就是把图像平面上的点对应到参数平面上的曲线,最后通过统计特性来解决问题。自 1962 年 Hough 公布了该算法以来,由于其良好的抗噪声性能和对部分遮盖的不敏感等特性,霍夫变换在
14、模式识别领域得到广泛的应用,如直线、圆、椭圆、矩形等几何图形检测,任意形状区域的边界提取,二维或三维运动的参数估计等。下面就与本论文相关的直线和圆的识别进行简单的介绍。2.2.2 基于霍夫变换的直线和圆的识别算法2.2.2.1 霍夫变换识别直线霍夫变换是一种线描述方法,它可以将平面直角坐标系的空间的线变换为极坐标空间中的点。图(a) 是直角坐标系中的一条直线,如果用 代表直线距原点的法线距离, 为该法线与 x 轴的夹角,则可用如下参数方程来表示该直线。7这一直线的 Hough 变换为:=xcos+ysin。在极坐标中便是图(b) 所示的点(,),在极坐标里,横坐标为直线的法向角 ,纵坐标为直角
15、坐标原点到直线的法向距离 。在直角坐标系中通过公共点的一簇直线(图(c),映射到极坐标中便是一个点集,这些点集构成一条曲线,其实这是正弦曲线(图(d)。因此直角坐标系中的一个点对应于极坐标中就是一条正弦曲线。在直角坐标系中共直线的点(图(e)中的(x 1,y 1)(x2,y 2)(x3,y 3) 三点共线)映射到极坐标系便是共点的一簇曲线(图(f)。在图(f) 中还可以看到这三条曲线有两个交点,其实这两个交点的所对应的横坐标值即法向角数值相差 180,对应到直角坐标系里是同一条直线。如果令直线的法向角的取值范围为-/20 MaxValue1.Dist = iDist;MaxValue1.Ang
16、leNumber = iAngleNumber;/将第一个最大值点附近清零for (iDist = -9;iDist =0 MaxValue2.Dist = iDist;MaxValue2.AngleNumber = iAngleNumber;24/寻找两条直线for(j=0;j0 maxvalue1.a = ia;maxvalue1.b = ib;maxvalue1.Dist = iDist;/寻找圆for(j=0;jlHeight;j+)for(i=0;ilWidth;i+)lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;/ia = i-
17、(int)fabs(iDist*cos(maxvalue1.AngleNumber*2*PI/180.0);/ib = j-(int)fabs(iDist*sin(maxvalue1.AngleNumber*2*PI/180.0);iDist=(int)sqrt(i-maxvalue1.a)*(i-maxvalue1.a)+(j-maxvalue1.b)*(j-maxvalue1.b);if(iDist=maxvalue1.Dist)*lpDst=(unsigned char)0;/ 复制腐蚀后的图像memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);/ 释放内存LocalUnlock(hNewDIBBits);LocalFree(hNewDIBBits);/ 释放内存LocalUnlock(hTransArea);29LocalFree(hTransArea);/ 返回return TRUE;