您的当前位置:首页基于Hough变换的检测系统设计

基于Hough变换的检测系统设计

来源:小侦探旅游网
丝路视野

基于Hough变换的检测系统设计吴 峰 缪治康 吴 涛 冯励耘(常州工学院电气与光电工程学院,江苏 常州 213032)【摘要】Hough变换原理是数字图像处理类课程教学中的难点,本文利用Matlab软件GUI功能,设计一种基于Hough变换的系统,实现对图像中包含的直线和圆进行检测,用于教学辅助,提高教学效果。

【关键词】Hough变换;Matlab;GUI设计Hough变换是数字图像处理类课程教学的重点内容,在传统课堂教学中,教师通常通过讲授的方法介绍其基本原理,采用软件演示Hough变换在检测直线和圆中的应用,但学生往往对Hough变换的实现机理和应用的原因一知半解。

本文利用Matlab软件GUI设计功能,依据Hough变换原理,开发设计实现检测图片中圆和直线的教学辅助软件,界面美观,操作方便,交互性强。软件能够通过展示每个步骤的效果,清晰体现Hough变换过程,帮助学生理解Hough变换基本原理和实现步骤。

一、基本原理

(一)Hough变换检测直线的原理

Hough变换通常用式(1)来表示,直角坐标系上的一个点(x,y)转化为极坐标系中的一条曲线。

侧为显示区,右侧为操作区,左下角为数据输出区。在操作区中,设置了“选择图像”选择框,提供了典型包含直线和圆的图片,以方便初学者入门,同时也允许学习者选择“查找图片”自选图片,开展深入探索。“选择检测方式”提供包含检测直线、检测圆的单选按钮。“参数设置”部分,用于输入检测中的必要参数,默认检测的直线个数为5条。数据输出区通过表格形式输出检测到的直线或者圆的信息。此外,界面上提供了“上一步”“下一步”按钮,学习者通过“上一步”按钮返回之前的操作,观察和对比执行效果。

ρ=xcosθ+ysinθ (1)

对于一幅数字图像,直角坐标系中一条直线上的每一个点,根据式(1),都映射为极坐标中相应的点。为此,建立一个二维数组来记录每一个点被映射的次数,通过比较极坐标中每一点对应的映射次数,选取其中最大的几个值所在的位置,即确定直角坐标系中数据点最多的直线,可实现对直线的提取。

(二)Hough变换检测圆

假设(x0,y0)表示是待检测图片上的数据点,C(x0,y0)是以(x0,y0)为圆心,r为半径的圆。从该圆上任取三个点,分别以它们为圆心, r为半径作圆,三个圆存在共同交点,显然该交点也就是(x0,y0)。进一步,若有n个在C(x0,y0)圆上的点(x1,y1),(x2,y2),……(xn,yn),那么,以这些点为圆心,r为半径,可以做出n个圆,这n个圆的轨迹必然会在C(x0,y0)的圆心处重叠n次。因此,在原图中一个确定半径的圆的轨迹上的数据点越多,经过Hough变换后,在这个圆的圆心上被重叠的次数就越多。据此,找到Hough变换后的图像在每一点处重叠次数最大的几个值,就能确定原图中,轨迹包含最多数据点的几个圆。与检测直线的方法相同,定义一个二维数组Accumulator,用于记录变换后平面上每一个点处的叠加次数n了。之后通过比较n,找到最大的几个值,这几个最大值的二维数组下标就是所提取的圆的圆心。

二、设计过程

MathsWorks公司开发的Matlab软件具有强大的界面设计功能和图象处理功能,本文利用其图形用户界面(Graphical User Interface, GUI)功能,开发设计基于Hough变换的检测系统。

(一)界面设计

基于Hough变换的检测系统的界面如图1所示。界面左

图1 界面布局(二)程序设计

图2 Hough变换检测直线的流程图2为Hough变换检测直线的流程,该过程定义为forHoughline函数, 具体流程描述如下。

首先,设置全局变量AH和flag。AH取0~3,代表了4个步骤,记录程序执行哪一步操作。在程序执行过程中,当点击“上一步”或“下一步”按钮时,AH将作相应改变。全局变量flag取为1或2,如果flag为1,程序执行“上一步”,为逆进程。否则,程序执行“下一步”,为正进程。当程序执

基金项目:常州工学院教改课题(编号:A3-4403-16-006);

 · 158 ·

  常州工学院网络课程建设项目(编号:A3-4406-15-064)。

行“上一步”操作时,须把之前所得到的结果信息存储下来,从而恢复“上一步”的显示效果。这里程序采用定义appdata类型的数据来存储信息的方法。

第0步为程序运行的初始状态,读取原图,并以一个全局变量存储。采用编写的myshow函数,实现在指定的带有刻度的坐标系中显示图片。

当执行第1步时,采用canny算子对预处理后的图片进行了边缘化。由于Hough变换必须在提取图像边缘后才能进行,canny算子较其它算子而言,锐化效果较好。

当执行第2步时,用myHough函数对图片做Hough变换,并给出极坐标中的峰值位置,处理结果显示在图像显示区。myHough函数的输入参数是二值图像和对象句柄,输出参数是极坐标上的峰值在直角坐标上对应的数据点位置矩阵P,和极坐标系中被影射的点的位置(theta,rho)。该函数实现把直角坐标上的数据点映射到极坐标系上,并找到极坐标系中相应位置被映射次数最多的几个峰值的作用。

当执行第3步时,通过运用Matlab自带的Houghlines函数,实现将检测到的直线上的数据点用醒目的颜色在原图上标注出来,并把检测到的直线的倾斜角和截距参数输出到GUI界面上数据输出区的表格中。

图3 Hough变换检测圆的流程图3为Hough变换检测圆的流程,该过程定义为forHoughcircle函数,其中第0步和第1步与检测直线的流程相同。当执行第2步时,通过编写的函数,找到边缘轨迹为圆处,并在相应位置作圆,输出检测到的圆心的标志,并在原图上标注检测到的圆。当执行第3步时,程序采用imregionalmax函数,找到累加器中最大的几个值,并把圆心的坐标输出到数据输出区的表格中。其余步骤和检测直线相同。

三、设计结果

本节给出基于Hough变换的检测系统的设计结果,通过处理包含四条平形线的图片,得到检测直线的结果如图4所示。从显示区的图片可以看出,在极坐标下检测到的峰值用白色小框标出。在这个例子中,原图有4条直线,而设置的“直线个数”为5,在这种情况下不可能检测出5个峰值,所以“Hough变换”图中只有4个方框。列表中显示了检测到的直线参数,“原图”区标注了检测到的线段。在这个例子中,列表中显示的倾斜角,截距的参数虽然有多组值,但只有四组相同的值。这就说明了Hough变换中只检测到了4个峰值,这与“Hough变换”图中观察的白框的个数是一致的。而且,在“原图”中,

经验交流

虽然检测到了多条线段,但它们最终都可以归结到4条直线之上。也就是说如果图片上不连贯的线段在同一条直线上,也只能算作检测到了一条直线,而不能根据线段的个数来判断“直线个数”。

图4 检测直线的实例图5 圆检测的实例当“选择图像”目录下选中“圆形”,“选择检测方式”选中“检测圆”时,开展圆检测。当处理包含一个圆的图片时,检测结果如图5所示。“圆半径”,“所检测圆的最小像素”可以通过滑动条的箭头键确定,或在编辑框中直接输入数值。两个参数的默认值分别是90个像素和105个像素。在“Hough变换”区的图片中,检测到的圆(蓝色)基本上是与原图重合的。从这个例子可以看出,“半径”是与参数设置区中自己设置的“圆半径”值相同的。而“圆心x”,“圆心y”表示检测到圆的圆心横纵坐标。在本例中,检测到了四个半径为90的圆。

四、结语

数字图像处理中,Hough变换通常是检测直线和圆的有效工具。本文采用Matlab软件GUI功能设计的检测系统,能分解执行步骤,便于使学生清楚理解Hough变换的基本原理,明确在直线和圆检测过程中的使用方法,提高教学质量。参考文献1]杨帆.数字图像处理与分析[M].北京:北京航空航天大学

出版社,2015.2]Marks S.Nixon,Albert S.Aguado.特征提取与图像处理[M].

李实英,等,译.北京:电子工业出版社,2010.

作者简介:吴峰(1978.10—),男,汉族,江苏武进人,

博士,副教授,研究方向:数字图像处理、光信息处理;缪治康(1997.10—),男,汉族,江苏扬州人,本科,常州工学院,研究方向:光电信息;吴涛(1996.06—),男,汉族,江苏镇江人,本科,常州工学院,研究方向:光电信息;冯励耘(1997.06—),女,汉族,江苏南通人,本科,常州工学院,研究方向:光电信息。

· 159 ·

[[

因篇幅问题不能全部显示,请点此查看更多更全内容