1、沈阳理工大学数字图像处理课程设计I摘 要为能够有效解决实时直线图形提取问题,提出了一种基于 Hough 变换(HT)的直线提取算法。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质,它引起了许多国内外学者和工程技术人员的普遍关注。由于其根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或被其他目标遮盖而引起边界发生某些间断的情况,具有很好的容错性和鲁棒性。多年来,专家们对 Hough 变换的理论性质和应用方法进行了深入而广泛的研究,目前应用于生物医学、自动化和机器人视觉、空间技术和军事防御、办公自动化等各个方面。本次课称设计首先分析了数字图像中直线边缘的三
2、种结构特征,提出采用基元结构表示目标边缘点,并在约束条件下计算基元结构的基元倾角。在此基础上,结合传统的HT 的思想对基元结构进行极角约束 HT,以获得最终的直线参数。最后,再用 MATLAB 软件对该算法进行编程仿真。实验结果表明,对合成图像和自然图像,该算法能够有效的识别图像中的直线段。关键词:直线提取;Hough变换;MATLAB 沈阳理工大学数字图像处理课程设计II目 录1. 课程设计的 目的 .12. MATLAB 简介及应 用 .12.1 MATLAB 简介 12.2 MATLAB 应用 12.3 MATLAB 特点 23. Hough变换原理 23.1 Hough变换的基本 原理
3、 23.2 Hough变换的不足 之处 43.3 Hough变换的应用 44. Hough变换检测直 线设计 54.1 Hough变换检测直线基本原理 54.2 Hough变换的几种 基本算法 64.3 Hough变换算法的比较与选择 74.4 Hough变换检测直线的算法流 程图 94.5 Hough变换检测直线算法的实 现 95. 仿真结果及 分析 115.1 仿真结果 115.2 结果分析 14结论 .15参考文献 .16沈阳理工大学数字图像处理课程设计0数字图像中的 Hough 变换应用直线的检测1.课程设计的目的本次课程设计的目的在于提高发现问题、分析问题、解决问题的能力,进一步巩固
4、数字图像处理系统中的基本原理与方法。熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。综合运用 MATLAB软件实现图像高通滤波程序设计最终达到以下目的:1) 通过课程设计把自己在大学中所学的知识应用到实践当中。2) 深入了解利用 Matlab 设计 FIR 数字滤波器的基本方法。3) 在课程设计的过程中掌握程序编译及软件设计的基本方法。4) 提高自己对于新知识的学习能力及进行实际操作的能力。锻炼自己通过网络及各种资料解决实际问题的能力。2.MATLAB 简介及应用2.1 MATLAB 简介MATLAB 是美国 MathWorks 公司出品的商业数学软件,用于算法开发、数据可视化、
5、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和 Simulink 两大部分。MATLAB 是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。2.2 MATLAB 应用MATLAB 产品族可以用来进行以下各种工作:沈阳理工大学数字图像处理课程设计11) 数值分析2) 数值
6、和符号计算3) 工程与科学绘图4) 控制系统的设计与仿真5) 数字图像处理 技术6) 数字信号处理 技术7) 通讯系统设计与仿真8) 财务与金融工程MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。2.3 MATLAB 特点此高级语言可用于技术计算1) 此开发环境可对代码、文件和数据进行管理2) 交互式工具可以按迭代的方式探查、设计及求解问题3) 数学函数可用于线性代数、统计、傅立叶分析、筛选、优化以及
7、数值积分等4) 二维和三维图形函数可用于可视化数据5) 各种工具可用于构建自定义的图形用户界面6) 各种函数可将基于 MATLAB 的算法与外部应用程序和语言(如 C、C+、Fortran、Java、COM 以及 Microsoft Excel)集成7) 不支持大写输入,内核仅仅支持小写。3.Hough变换原理3.1 Hough变换的基本原理Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间沈阳理工大学数字图像处理课程设计2和 Hough 参数空间的点线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在 Hough 参数空间寻找累加器峰值
8、的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下,这种变换有着理想的效果。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下, 这种变换有着理想的效果。但是,一旦参数空间增大,计算量便会急剧上升,同时耗费巨大的存储空间,耗时也随之猛增。就此,多年来国内外众多学者针对具体情况对常规 Hough 变换进行了多方面的探索,并提出了许多有价值的改进方法:1) 扩展应用范围,提出多种参数化
9、的方法在早期的研究中,Hough变换由只检测图像中的直线扩展到检测圆弧、二次曲线和任意曲线构成的形状;线条的参数化方法也由最初的截距型参数发展到斜率倾角和截距型参数、双 Hough 空间型参数、以及检测圆的圆心坐标、半径型参数和检测物体复杂形状的基于模板的多维关键点参数等。2) 提高实用性,提出多种减少计算量的算法针对 Hough 变换计算量大的不足,相继提出了四分树结构的 Hough 变换、以梯度信息为引导的 Hough 变换、分层 Hough 变换、自适应 Hough 变换、快速自适应Hough变换、随机 Hough 变换(RHT)等;对于高维 Hough 变换采用降维处理,数据结构多采用
10、动态量化空间等。3) 增强抗干扰能力,提高检测精度Hough变换提取精度问题始终受到普遍关注,例如 Hough 变换的离散化误差、混叠干扰、抗噪声干扰性能等。就此类问题的研究例如,Kiryati、Buckstein 提出采用最佳Kaider 窗函数对参数域进行平滑滤波以减少混叠误差;Hunt、Nolte等人应用信号检测理论对 Hough 变换的抗干扰性能和基于最大后验概率的最佳算法进行了抗干扰性能比较,并指出了影响 Hough 变换抗干扰性能的原因。4) 多种峰值检测方法Hough变换中参数空间的峰值检测是一个聚类检测问题,阈值的选取是成功与否的关键所在。其中,一种方法是对图像空间进行加权,以
11、改变参数空间的峰值沈阳理工大学数字图像处理课程设计3分布;一种方法是直接对参数空间进行极大值的搜索。3.2 Hough变换的不足之处本课题的研究内容,如上所述,常规 Hough 变换虽然具有显著的优势,但其不足也不容忽视,如不加改进,有时将会令人无所适从,例如检测速度太慢,无法做到实时控制;精度不够高,期望的信息检测不到反而做出错误判断,进而产生大量的冗余数据。就圆检测而言,常规 Hough 变换的不足主要有以下几点:(1)参数由直线的两个参数,即截距和斜率,上升到三个,即圆心坐标和半径,每个点映射成参数空间的一个曲面,是一到多映射,因而计算量急剧增大;(2)需要占用大量内存空间,耗时久、实时
12、性差;(3)现实中的图像一般都受到外界噪声的干扰,信噪比较低,此时常规 Hough变换的性能将急剧下降,进行参数空间极大值的搜索时由于合适的阈值难以确定,往往出现“虚峰”和“漏检”的问题。3.3 Hough变换的应用理论与实践向来是形影不离,相辅相成,Hough变换之所以有如此长足的发展,主要原因还是在于实践应用上的广泛需求;而在实践中所暴露出的不足又进而促进了它的发展,循环往复,就如同生命的演化。现枚举其主要应用领域如下:1) 生物医学: Hough变换已被成功应用于基于人工智能的专家诊断系统;X 射线人体照片和 CT图像的处理和判读;光学显微镜和电子显微镜中的细胞核自动分析系统;从超声波诊
13、断中提取三维动脉特征,等等。2) 自动化和机器人视觉: Hough变换已被用于产品部件的自动监视、缺陷诊断、生产过程的自动监控、计算机辅助制造(CAM)等。例如基于 Hough 变换的机械零件检测和定位系统;基于 Hough 变换采用直线、圆弧等作为基本特征的工业产品检查系统;沈阳理工大学数字图像处理课程设计43) 空间技术和军事防御: Hough变换已被用于运动目标轨迹的检测与识别,高空侦察机、间谍卫星和军事雷达等目标自动识别系统的特征提取。例如应用Hough 变换对战斗机的外形特征进行提取和自动识别;应用 Hough 变换辅以信号检测理论解决并行多运动目标的跟踪问题。4) 办公自动化: H
14、ough变换在许多应用系统中得到了很好的应用。例如采用Hough 变换进行英文字符特征提取并自动识别,其对印刷体字符识别率为99.6%,对手写体字符的平均识别率也达到了 86.9%,并已成功应用于邮政信件的自动分拣、文件处理等。由以上分析可见,Hough变换有着广泛的关注程度以及良好的应用前景。在计算机视觉和自动目标识别系统中,Hough变换是一个用于边缘线条特征提取的强有力工具。4.Hough变换检测直线设计4.1 Hough变换检测直线基本原理Hough变换检测直线就是选取图像空间中一条直线 L的某些特征,作为参数空间的一个点M,并且该直线L 上所有点,通过某种算法,都能够对应着这些特征
15、,从而在图像空间和参数空间之间建立起“线 点”的对偶性。Hough变换就是根据这种对偶性,将图像空间中直线的检测问题,转化为参数空间中点的检 测问题,而后者的处理比前者要简单得多,进行累加统计即可。下图 4.1 给出了数字图像中三类直线的结构分布情况,图中一个小方格代表一个像素,黑方格代表边缘像素点,白方格代表背景像素点。可以看出,近水平直线段由相距很近的行基元集合组成;近垂直直线段由相距很近的列基元集合组成;近 45直线依据其斜率分别由45或 135扫描线上的斜基元集合组成。综上可知,任何直线段都可以表示为总体走向趋势基本一致且缝隙很小、相距很近的相应基元的集合。以此结构特点为基础建立本文的
16、直线提取方法。沈阳理工大学数字图像处理课程设计5图 4.1 数字图像中直线的分布4.2 Hough变换的几种基本算法常用的 Hough 变换检测直线的方法,是运用下式在图像空间和参数空间之间,建立对偶变换。 = x cos + y sin (4.1)(a)直角坐标系 (b)参数空间图 4.2 Hough变换示意图在式(4.1)中, 为极径; 为极角, 取 0 180 ;x 为像素点相对图像原点的行坐标;y 为像素点相对图像原点 的列坐标。对偶变换示意图如图 4.2 所示。为了检测出直角坐标系中,由非零点所构成的直线,需要根据检测分辨率的要求,将 离散化为 N 个参数区间,将 离散化为 N 个参
17、数区间,也就是说将极坐标系量化成许多小格,建立参数空间。这种方法被称为标准 Hough变换方法 ( standard hough transform,SHT) 。 其优点是:无论直线怎样变化,参数空间中 和 的取值范围是有限的。所以,目前的直线检测大多数都是基于这种方法。 但是,这种方法在N 值较大的情况下,存在以下两个缺陷:沈阳理工大学数字图像处理课程设计6( 1 ) 计算量大 N 越大, 的步长越小,计算量就越大。在要求检测精度很高的场合,N 的值往往非常大,这样会使计算量大增。 ( 2 ) 需要大的存 储空间 如果 和 都占 4 个字节,参数空间所需要的存储空间的字节数 S 可由下式求出
18、 :S = 4 NN (4.2)图 4.3 Hough变换从图像空间到参数空间的转换在式(4.2)中,N 为 在 0,) 间取的离散值的个数;N 为 的采样个数。对较大的图像,S 将大于数兆字节 ( G B ),单靠物理内存,难以满足这样的要求。为了减少这种 Hough 变换的计算 量,减小所需要的存储空间,在此基础上出现了很多改进的 Hough 变换算法,例如分块检测法、两次检测法、全整数 Hough变换等,为讨论方便,将其统称为 正弦 Hough 变换方法。但这些方法由于受 的步长限制,有时候检测结果不尽人意,难以实现对任意斜率直线 的快速、精确检测,尤其是对超大型图像(例如像素在2048
19、2048 以上) 。如果能够建立一个不受 步长限制的参数空间,就有可能实现对任意斜率直线的快速、精 确检测。其中,Hough变换从图像空间到参数空间的转换如图 4.3所示。4.3 Hough变换算法的比较与选择图像空间中,直线 L0 : y=k0x+b0 上每一个点,在参数空间中都代表一条直线,这些直线都相当于一点 M ( k0,b0)。与用极坐标建立参数空间的方法相比,这种方法不受 的步长限制,检测了所有的可能出现的直线,不会有任何遗漏,在像素允许的情况下,能精确地检测出图像中的任意直线。这种 优点沈阳理工大学数字图像处理课程设计7决定了它非常适合用来对直线进行精确检测。为便于讨论,将其称为
20、 kb Hough变换方法。虽然这种方法在原理上非常明确,但在具体实现过程中,如 果简单地用浮点数进行斜率和截距的计算,还有以下 3 个问题需要解决:( 1 ) 如果同时计 算斜率和截 距,参数空间结构数组可能异常庞大,而且计算量非常大。一幅像素为mn 的图像,假设图像中可能出现的不重复的斜率有 u种( u 大于图像的像素总数 )。若这些数据都占 4 个字节,那么要求的计算机内存为:W=8umn (4.3)对较大的图像,要求的计算机内存超过上千兆字节(GB),这显然是不现实的。如何解决这个问题?很多时候,如果将一个2 维问题分解为两个 1维问题来解决,往往非常方便。参数空间数组之所以异常庞大,
21、是因为同时包含了待测的斜率和截距,而斜率和截距的组合,决定了其数组的元素个数必然非常多。如果将斜率 k 和截距 b分步进行检测,先检测斜率 ,找出出现次数最多的斜率 k0,然后再检测截距,找出斜率为k0 的,出现次数最多的直线的截 b0,也就是说,将一个 2 维问题分解为两个 1 维问题。 由于斜率为k0 的二点对的数量往往非常有限,这样就能有效地减小参数空间。但是,即使将斜率k 和截距 b分步进行检测,如果用浮点数进行计算斜率,并采用普通的 Hough 变换的投票方式,即先计算完由非零点组成的所有的二点对的斜率,再对斜率进行统计,也可能需要很大的参数空间。1 幅 800600 的图像,如果非
22、零点非常多,需要的参数空间仍然可能超过数千兆字节( GB )。所以,用浮点数计算斜率,要减小参数空间,只能一边计算斜率,一边统计斜率相同的情况( 与前面的斜率进行比较 )。即边投票,边计票。但是,这样计算量非常大。( 2 ) 程序的复杂程度高 根据定量度量程序的复杂程度的 McCabe方法,流图 (也称为程序图) 的环形复杂度可由下式求出 :V(G) = R + 1 (4.4)在式(4.4)中,V ( G)为环形复杂度;R 为流图中的判定节点数目。通常V ( G)10 为宜。根据 McCabe 方法求出该方法 的流图的判定节点数 R为 10, 沈阳理工大学数字图像处理课程设计8由式( 3 )可
23、知,其环形复杂度为 11,显然复杂程度太高。 ( 3 ) 如果直接采 用浮点数计 算斜率,无法处理斜率为无穷大的垂直直线斜率为无穷大,给计算带来不便,这正是极少有人采用这种方法的原因。 综上所述,除了需要分步检测斜率和截距外,还不能简单地采用浮点数计算斜率。 因此采用了斜率分式查表方法来解决这些问题。4.4 Hough变换检测直线的算法流程图原始输入的彩色图像变换得到灰度图像提取灰度图像边缘Hough变换得到变换矩阵图像计算检测图像中的直线计算标注出最长直线沈阳理工大学数字图像处理课程设计9图 4.4 算法流程图4.5 Hough变换检测直线算法的实现clearI = imread(abc.j
24、pg);%输入原图像I = rgb2gray(I);%将输入的彩色图像转换成灰度图像输出%I = imrotate(I,33,crop);% figure% imshow(rotI);figureimshow(I);BW = edge(I,canny);%提取图像边缘figureimshow(BW);H,T,R = hough(BW);% 计算二值图像的标准霍夫变换,H为霍夫变换矩阵,theta,rho为计算霍夫变换的角度和半径值 figureimshow(H,XData,T,YData,R, InitialMagnification,fit);xlabel(theta), ylabel(rh
25、o);axis onaxis normalhold onP = houghpeaks(H,5,threshold,ceil(0.3*max(H(:);%在Hough矩阵图像中寻找前5个大于最大值0.3倍的峰值x = T(P(:,2); y = R(P(:,1);plot(x,y,s,color,white);% Find lines and plot themlines = houghlines(BW,T,R,P,FillGap,5,MinLength,7); %找出图中的直线figure,imshow(rotI),hold on 沈阳理工大学数字图像处理课程设计10figure, imsho
26、w(I),hold onmax_len = 0;for k = 1:length(lines)xy = lines(k).point1; lines(k).point2;plot(xy(:,1),xy(:,2),LineWidth,2,Color,green);% % 绘制线的起点(黄色)、终点(红色)plot(xy(1,1),xy(1,2),x,LineWidth,2,Color,yellow);plot(xy(2,1),xy(2,2),x,LineWidth,2,Color,red);% 计算线的长度,找最长线段len = norm(lines(k).point1 - lines(k).p
27、oint2);if ( len max_len)max_len = len;xy_long = xy;endendplot(xy_long(:,1),xy_long(:,2),LineWidth,2,Color,blue); 5.仿真结果及 分析在MATL AB7.1环境运行 程序源代码 ,对输入彩色 图像通过变 换得到灰度图像,并进行边界 提取、Hough 变换和直线 检测,得到如下结 果。5.1 仿真结果如图 5.1,输入图像为一幅后缀为jpg 格式的彩色图像,在 matlab 程序代码中首先使用 imread()函数将图像读入,以便于后续的处理和操作。沈阳理工大学数字图像处理课程设计11
28、图5.1原图像由图5.2可知,输入图像为一幅彩色图像时,可以使用rgb2gray()函数,先将彩色图像转换为灰度图像(RGB不发生变化),使图像适合于边界提取,为下一步做准备。图 5.2 灰度图像由图 5.3 可知,采用 edge()函数,对灰度图像进一步进行处理,将图像的边缘地方的像素值设为 1,其余地方的像素设为 0,可以得到图像的边界,且提取出的图像边界清晰完整。沈阳理工大学数字图像处理课程设计12图 5.3 边界图像由图 5.4 可知,可以采用 hough()函数对边界图像进行 Hough 变换,并绘制出 Hough 变换得到的变换矩阵坐标图,其中在峰值为 520 时,标注出的 5个点
29、为前 5个大于最大值 0.3 倍峰值的点。图 5.4 Hough变换图像由图 5.5 可知,在 Hough 变换后的矩阵中选出前 5 个大于最大值 0.3 倍峰值的点,并将这些点用“x”标出后,便可简单地 绘制线的起 点(用黄色表示 ) 、终点(用红色表示 )并检测出直 线;最后通过计 算,使用蓝色线 段标注出最 长的线.沈阳理工大学数字图像处理课程设计13图 5.5 直线检测图像5.2 结果分析本次课程设计原始的输入图像为一幅彩色图像,并采用了如下算法:首先,在 matlab 代码中可用 imread()函数将其读入;然后,为了便于处理,需要采用 rgb2gray()函数,将其从彩色图像变换
30、为灰度图像,使其适合于边界的提取;得到灰度图像后,采用 Canny 边缘检测算子进行边界提取,在代码中输入 BW = edge(I,canny);即可实现,其中 I为变换得到的灰度图像;对于提取边缘后的图像,应对其进行Hough变换,得到 Hough 变换矩阵,直接采用 hough()函数即可实现;最后,计算检测图像中的直线,将图像中的直线以及直线的起始点一一标出,对于最长的直线可用不同于其他颜色的直线标出,这里普通直线采用绿色直线标注,最长的直线采用蓝色直线标注。通过对图 5.1 至图 5.5 的分析可知,本次课程设计所采用的算法流程为切实可行、可靠正确的算法。沈阳理工大学数字图像处理课程设
31、计14结论本文只是一个很简单的Hough变化检测直线算法的实现,需要改进的地方还有很多,主要有下面两方面:(1)程序上的改进:可以给程序增加二值化和边缘检测的代码,使其可以处理一般位图。(2)算法上的改进:可以利用待检测图像的统计特性来自适应调整清零阈值和清零邻域值的大小;或者可以利用待检测图像边缘像素点的位置信息,先将共线的边缘点检测出来,然后再对结果进行后处理,主要是去掉噪声点和连接由于边缘检测而产生的不连续像素,这样就可以检测图像中的线段,更好的表达了图像的形状信息;或者使用更复杂和更完善的算法。(3)运用 Hough 变换,将笛卡尔坐标空间转换成极坐标空间(,) ,找出若干峰值点,检测
32、出图像中的直线。(4)由于在采集时图像会受到光照、大气紊流等自然因素的影响,当一幅遥感图像中的所有直线被检测出来后,一条直线会被分割成若干个小段。为了复原这种直线,可以设定阈值 T2,计算同一直线上相邻两条直线段的距离,如果这个值小于阈值 T2,将两道路段进行连接,否则不作处理。(5)检测出各个直线段的起止点。(6)在复原所有的直线段后,根据桥梁的特点,设定大阈值T3,用来检测出较长的直线段(即桥体的其中一边) ;并利用直线段端点坐标值,计算所有有用直线段的斜率 K。沈阳理工大学数字图像处理课程设计15参考文献1 刘刚等. MATLAB 数字图像处理M.机械工业出版社,2010:135-150
33、.2 龚声蓉等.数字图像处理与分析M.清华大学出版社,2006: 1-15,258-269.3 葛哲学.精通 MATLABM.电子工业出版社,2008: 2-8.4 张圣勤. MATLAB7.0 实用教程M.机器工业出版社,2006: 90-118.5 孙仲康,沈振康.数字图像处理的应用M.国防工业出版社,2008:132-158.6 贾永红.计算机图像处理与分析M.武汉大学出版社,2005:35-47.7 姚敏. 数字图像处理M.机械工业出版社,2006: 52-60. 8 阮沈勇.MATLAB 程序设计M.电子工业出版社,2004: 70-85.9 陈桂明.应用 MATLAB 语言处理数字信号与图像处理M. 科学出版社,2000: 50-65.10 赵荣椿.数字图像处理导论M.西北工业大学出版社,2003: 65-72.沈阳理工大学数字图像处理课程设计16