图像处理————霍夫(HOUGH)变换

霍夫(HOUGH)变换

        霍夫变换是图像处理中用来从图像中分离出具有某种相同特征的几何形状(通常,直线,圆等)的常用方法。经典的霍夫变换常用来检测直线,圆,椭圆等。

为什么要进行霍夫变换,当然是为了实现某种目的,比如检测,(废话)。它是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用霍夫变换可以方便地得到边界曲线而将不连续的边缘像素点连接起来。

霍夫变换的主要优点是受噪声和曲线间断的影响小。利用霍夫变换还可以直接检测某些已知形状的目标

霍夫变换的基本思想是点 —— 线的对偶性(duality),当然这只不过是所有人都这样说了,所谓线的对偶性就是线与线的某种变换之后的对应或者映射关系,实际上霍夫变换是直角坐标系空间线与变换域空间的线的映射关系,考虑傅里叶变换?当然就是说变换的目的就是便于分析。具体原理如下:

     在图像空间XY里,所有过点(x,y)的直线都满足方程:

                         y = px + q    

它也可写成:q = -px + y可以认为是参数空间PQ中过点(p’, q’)的一条直线。在图像空间中共线的点对应在参数空间里相交的线。

图像处理————霍夫(HOUGH)变换_第1张图片

图像处理————霍夫(HOUGH)变换_第2张图片

在图像空间中共线的点对应在参数空间里相交的线.反过来,在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。这就是点——线的对偶性。当然一般选取变换空间是时用的是极坐标空间(为什么?因为图像空间中垂直的直线p趋近于无穷!),霍夫变换根据这些关系把在图像空间中的检测问题转换到参数空间里,通过在参数空间里进行简单的累加统计完成检测任务在具体计算时,需要在参数空间PQ里建一个2-D的累加数组。设这个累加数组为A(p, q),如图所示,其中[pmin, pmax]和[qmin, qmax] 分别为预期的斜率和截距的取值范围。开始时置数组A为零,然后对每一个图像空间中的给定点,让p取遍P轴上所有可能的值,并根据式q = -px + y算出对应的q。再根据p和q的值(设都已经取整)对A累加:A(p, q)=A(p, q)+1。  累加结束后,根据A(p,q)的值就可知道有多少点是共线的,即A(p, q) 的值就是在(p, q) 处共线点的个数。同时(p, q) 值也给出了直线方程的参数,使我们得到了点所在的线。

图像处理————霍夫(HOUGH)变换_第3张图片

具体实现步骤:

1)、构造一个P、Q空间的二维累加数组A(p,q)

2)、从f(x,y)的指定区域中取(xi,yi),按方程q=-pxi+yi在[pmin,pmax]中遍取可能的p值计算得到可能的q值。

3)、在对应的位置计算A(p,q) =A(p,q)+1

4)、重复2)、3)直到将从f(x,y)的指定区域中的所有点取完。此时,A(p,q)数组中最大值所对应的p,q就是方程y=px+q中的p、q值。

5)、根据y=px+q绘出f(x,y)中的直线

区域的选择:来自确认存在直线的区域。

坐标的选择:来自对存在的直线参数的估测。

霍夫变换不仅可用来检测直线和连接处在同一条直线上的点,也可以用来检测满足解析式f(x, c)=0形式的各类曲线,并把曲线上的点连接起来,这里x是一个坐标矢量,在2-D图像中是一个2-D矢量,c是一个系数矢量,它可以根据曲线的不同从2-D到3-D,4-D,…。换句话说,对写得出方程的图形都可利用霍夫变换检测

        例如圆周的检测。圆的一般方程是:

               (x - a)^2 + (y - b) ^2 = r^2

       式中有3个参数a,b, r,所以需要在参数空间里建立一个3-D的累加数组A,其元素可写为A(a, b, r) 。我们可让a和b依次变化而根据上式算出r,并对A累加:A(a, b, r) = A(a, b, r) + 1。所以其原理与检测直线上的点相同,只是复杂性增加了。

       从理论上来说,计算量和累加器尺寸随参数个数的增加是指数增加的,所以实际中霍夫变换最适合于检测较简单(即其解析表达式只含有较少参数)曲线上的点。

       设圆的半径r为已知,问题转化到2-D参数空间,如下图。原来参数的轨迹为整个圆锥部分表面,如果r已知,则参数的轨迹是半径为r的圆周。这里图像空间中的边界和参数空间里的轨迹都是圆周,所以这里是圆周——圆周对偶性。

图像处理————霍夫(HOUGH)变换_第4张图片

至于代码,在MATLAB工具箱中本身集成了hough变换的函数,SO。。。。就不贴了

你可能感兴趣的:(图像处理)