机器视觉技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

7.1 传统Hough变换的直线检测[1]

保罗·哈夫于1962年提出了Hough变换法,并申请了专利。该方法将图像空间中的检测问题转换到参数空间,通过在参数空间里进行简单的累加统计完成检测任务,并用大多数边界点满足的某种参数形式来描述图像的区域边界曲线。这种方法对于被噪声干扰或间断区域边界的图像具有良好的容错性。Hough变换最初主要应用于检测图像空间中的直线,最早的直线变换是在两个笛卡儿坐标系之间进行的,这给检测斜率无穷大的直线带来了困难。1972年,杜达(Duda)将变换形式进行了转化,将数据空间中的点变换为ρ-θ参数空间中的曲线,改善了其检测直线的性能。该方法被不断地研究和发展,在图像分析、计算机视觉、模式识别等领域得到了非常广泛的应用,已经成为模式识别的一种重要工具。

直线的方程可以用式(7.1)来表示。

y=kx+b   (7.1)

其中,kb分别是斜率和截距。过x-y平面上的某一点(x0y0)的所有直线的参数都满足方程y0=kx0+b。即过x-y平面上点(x0y0)的一族直线在参数k-b平面上对应于一条直线。

由于式(7.1)形式的直线方程无法表示x=cc为常数)形式的直线(这时候直线的斜率为无穷大),所以在实际应用中,一般采用式(7.2)的极坐标参数方程的形式。

ρ=xcosθ+ysinθ   (7.2)

其中,ρ为原点到直线的垂直距离,θρx轴的夹角(如图7.1所示)。

根据式(7.2),直线上不同的点在参数空间中被变换为一族相交于p点的正弦曲线,因此可以通过检测参数空间中的局部最大值p点,来实现x-y坐标系中直线的检测。

图7.1 Hough变换对偶关系示意图

一般Hough变换的步骤如下。

①将参数空间量化成m×nmθ的等份数,nρ的等份数)个单元,并设置累加器矩阵Qm×n];

②给参数空间中的每个单元分配一个累加器Qθipj)(0<i<m-1, 0<j<n-1),并把累加器的初始值置为零;

③将直角坐标系中的各点(xkyk)(k=1,2,…,ss为直角坐标系中的点数)代入式(7.2),然后将θ0θm-1也都代入其中,分别计算出相应的值pj

④在参数空间中,找到每一个(θipj)所对应的单元,并将该单元的累加器加1,即Qθipj)=Qθipj)+1,对该单元进行一次投票;

⑤待x-y坐标系中的所有点都进行运算之后,检查参数空间的累加器,必有一个出现最大值,这个累加器对应单元的参数值作为所求直线的参数输出。

由以上步骤看出,Hough变换的具体实现是利用表决方法,即曲线上的每一点可以表决若干参数组合,赢得多数表决的参数就是胜者。累加器阵列的峰值就是表征一条直线的参数。Hough变换的这种基本策略还可以推广到平面曲线的检测。

图7.2表示了一个二值图像经过传统Hough变换的直线检测结果。图像大小为512×480像素,运算时间为652ms(CPU速度为1GHz)。

Hough变换是一种全局性的检测方法,具有极佳的抗干扰能力,可以很好地抑制数据点集中存在的干扰,同时还可以将数据点集拟合成多条直线。但是,Hough变换的精度不容易控制,因此,不适合对拟合直线的精度要求较高的实际问题。同时,它所要求的巨大计算量使其处理速度很慢,从而限制了它在实时性要求很高的领域的应用。

图7.2 二值图像经过传统Hough变换的直线检测结果