霍夫(Hough)变换

-w497

在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在。在许多应用场合中需要快速准确地检测出直线或者圆。其中一种非常有效的解决问题的方法是霍夫(Hough)变换,其为图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。

1 简单介绍

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。

霍夫变换于1962年由PaulHough首次提出,最初的Hough变换是设计用来检测直线和曲线,起初的方法要求知道物体边界线的解析方程,但不需要有关区域位置的先验知识。这种方法的一个突出优点是分割结果的Robustness,即对数据的不完全或噪声不是非常敏感。然而,要获得描述边界的解析表达常常是不可能的。 后于1972年由Richard Duda & Peter Hart推广使用,经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题。

2 Hough变换的基本思想

设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。
我们知道,直线的方程可以用

\[y=k\cdot x+b\]

来表示,其中 k 和 b 是参数,分别是斜率和截距。

过某一点 \((x_0, y_0)\) 的所有直线的参数都会满足方程 \(y_0 = k\cdot x_0+b\) (由于 \(y=k\cdot x+b\) 过点 \((x_0, y_0)\), 所以将\((x_0, y_0)\) 代入就好), 即点 \((x_0,y_0)\) 确定了一簇直线。

方程 \(y_0=k\cdot x_0+b\) (写成 \(b=-x_0 \cdot k+y_0\) 更好理解) 在 k-b 坐标系下是一条直线, 这样,图像在x-y坐标系中的一个前景像素点就对应到 k-b参数空间上的一条直线。

我们举个例子说明解决前面那个问题的原理。设图像上的直线是 y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(2,2)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。 同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。这个性质就为我们解决问题提供了方法,就是把图像平面上的点对应到参数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最终在参数平面上就会看到两个峰值点,依此类推。

简而言之,Hough变换思想为:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。

在实际应用中,\(y=k\cdot x+b\)形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程\(p=x\cdot cos(\theta)+y \cdot sin(\theta)\)。这样,图像平面上的一个点就对应到参数p---theta平面上的一条曲线上,其它的还是一样。

三 算法流程

在实际操作时,步骤如下:

1、得到图像的边缘信息;
2、对边缘图像中的每一个点,在k-b空间中画出一条直线;
3、对各直线上的点,我们采取“投票”(vote)的方法,即累加:有直线经过这一点,这一点的值加1;
4、遍历k-b空间,找出局部极大值点,这些点的坐标(k,b)就是原图像中可能的直线的斜率和截距。

霍夫变换的计算量和存储都是很大的。

四 Hough变换推广

1、已知半径的圆

其实Hough变换可以检测任意的已知表达形式的曲线,关键是看其参数空间的选择,参数空间的选择可以根据它的表达形式而定。比如圆的表达形式为,所以当检测某一半径的圆的时候,可以选择与原图像空间同样的空间作为参数空间。那么圆图像空间中的一个圆对应了参数空间中的一个点,参数空间中的一个点对应了图像空间中的一个圆,圆图像空间中在同一个圆上的点,它们的参数相同即a,b相同,那么它们在参数空间中的对应的圆就会过同一个点(a,b),所以,将原图像空间中的所有点变换到参数空间后,根据参数空间中点的聚集程度就可以判断出图像空间中有没有近似于圆的图形。如果有的话,这个参数就是圆的参数。

2、未知半径的圆

对于圆的半径未知的情况下,可以看作是有三个参数的圆的检测,中心和半径。这个时候原理仍然相同,只是参数空间的维数升高,计算量增大。图像空间中的任意一个点都对应了参数空间中的一簇圆曲线。 ,其实是一个圆锥型。参数空间中的任意一个点对应了图像空间中的一个圆。

3、椭圆

椭圆有5个自由参数,所以它的参数空间是5维的,因此他的计算量非常大,所以提出了许多的改进算法。

五 总结

图像空间中的在同一个圆,直线,椭圆上的点,每一个点都对应了参数空间中的一个图形,在图像空间中这些点都满足它们的方程这一个条件,所以这些点,每个投影后得到的图像都会经过这个参数空间中的点。也就是在参数空间中它们会相交于一点。所以,当参数空间中的这个相交点的越大的话,那么说明元图像空间中满足这个参数的图形越饱满。越象我们要检测的东西。

Hough变换能够查找任意的曲线,只要你给定它的方程。Hough变换在检验已知形状的目标方面具有受曲线间断影响小和不受图形旋转的影响的优点,即使目标有稍许缺损或污染也能被正确识别。

More Info

霍夫变换原理详细介绍

OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑

猜你喜欢

转载自www.cnblogs.com/nowgood/p/houghtransfrom.html