霍夫变换Hough

霍夫变换Hough

霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法。它通过将图像坐标空间变换到参数空间,来实现直线与曲线的拟合

1.直线检测

1.1 直线坐标参数空间

在图像坐标空间中,经过点的直线表示为:


通过的直线有无数条,且对应于不同的值。

如果将和视为常数,而将原本的参数a和b看作变量,则式子(1)可以表示为:

这样就变换到了参数平面。这个变换就是直角坐标中对于点的Hough变换。

该直线是图像坐标空间中的点(在参数空间的唯一方程。考虑到图像坐标空间中的另一袋奶,它在参数空间中也有相应的一条直线,表示为:

这条直线与点在参数空间的直线相交于一点,如图所示:

图像坐标空间中过点和点的直线上的每一点在参数空间上各自对应一条直线,这些直线都相交于点,而就是图像坐标空间中点和点所确定的直线的参数。
反之,在参数空间相交于同一点的所有直线,在图像坐标空间都有共线的点与之对应。根据这个特性,给定图像坐标空间的一些边缘点,就可以通过Hough变换确定连接这些点的直线方程。

具体计算时,可以将参数空间视为离散的。建立一个二维累加数组,第一维的范围是图像坐标空间中直线斜率的可能范围,第二维的范围是图像坐标空间中直线截矩的可能范围。开始时初始化为0,然后对图像坐标空间的每一个前景点,将参数空间中每一个的离散值代入式子(2)中,从而计算出对应的值。每计算出一对,都将对应的数组元素加1,即。所有的计算结束之后,在参数计算表决结果中找到的最大峰值,所对应的就是源图像中共线点数目最多(共个共线点)的直线方程的参数;接下来可以继续寻找次峰值和第3峰值和第4峰值等等,它们对应于原图中共线点略少一些的直线。

1.2 极坐标参数空间

极坐标中用如下参数方程表示一条直线。

其中,代表直线到原点的垂直距离,代表x轴到直线垂线的角度,取值范围为,如图所示。

与直角坐标类似,极坐标中的Hough变换也将图像坐标空间中的点变换到参数空间中。
在极坐标表示下,图像坐标空间中共线的点变换到参数空间中后,在参数空间都相交于同一点,此时所得到的即为所求的直线的极坐标参数。与直角坐标不同的是,用极坐标表示时,图像坐标空间的共线的两点映射到参数空间是两条正弦曲线,相交于点,如上图所示。

具体计算时,与直角坐标类似,也要在参数空间中建立一个二维数组累加器A,只是取值范围不同。对于一副大小为的图像,通常的取值范围为,的取值范围为。计算方法与直角坐标系中累加器的计算方法相同,最后得到最大的A所对应的。

2.曲线检测

Hough变换同样适用于方程已知的曲线检测。

图像坐标空间中的一条已知的曲线方程也可以建立其相应的参数空间。由此,图像坐标空间中的一点,在参数空间中就可以映射为相应的轨迹曲线或者曲面。

若参数空间中对应各个间断点的曲线或者曲面能够相交,就能找到参数空间的极大值以及对应的参数;若参数空间中对应各个间断点的曲线或者曲面不能相交,则说明间断点不符合某已知曲线。

Hough变换做曲线检测时,最重要的是写出图像坐标空间到参数空间的变换公式。

例如,对于已知的圆方程,其直角坐标的一般方程为:


其中,(a,b)为圆心坐标,r为圆的半径。
那么,参数空间可以表示为(a,b,r),图像坐标空间中的一个圆对应参数空间中的一个点。

具体计算时,与前面讨论的方法相同,只是数组累加器为三维A(a,b,r)。
计算过程是让a,b在取值范围内增加,解出满足上式的r值,每计算出一个(a,b,r)值,就对相应的数组元素A(a,b,r)加1.计算结束后,找到的最大的A(a,b,r)所对应的a,b,r就是所求的圆的参数。

与直线检测一样,曲线检测也可以通过极坐标形式计算。
注意:通过Hough变换做曲线检测,参数空间的大小将随着参数个数的增加呈指数增长的趋势。所以在实际使用时,要尽量减少描述曲线的参数数目。因此,这种曲线检测的方法只对检测参数较少的曲线有意义。

3.任意形状的检测

这里所说的任意形状的检测,是指应用广义Hough变换去检测某一任意形状边界的图形。它首先选取该形状中的任意点(a,b)为参考点,然后从该任意形状图形的边缘每一点上,计算其切线方向和到参考点(a,b)位置的偏移矢量r,以及r与x轴的夹角。

参考点(a,b)的位置可由下式算出:

2.Hough变换直线检测的Matlab实现

通过Hough在二值图像中检测直线需要以下3个步骤。
·>(1)利用hough()函数执行霍夫变换,得到霍夫矩阵。
·>(2)利用houghpeaks()函数在霍夫矩阵中寻找峰值点。
·>(3)利用houghlines()函数在之前2步结果的基础上得到原二值图像中的直线信息。

2.1 霍夫变换–Hough

调用形式:
[H,theta,rho]=hough(BW,param1,value1,param2,value2)

参数说明:
·BW是边缘检测后的二值图像;
·可选参数对param1,value1和param2,value2的合法取值如下:

param取值含义
ThetaResolutionHough矩阵中轴方向上单位区间的长度(以“度”为单位),可取(0,90)区间上的实数,默认为1
RhoResolutionHough矩阵中\rho轴方向上单位区间的长度,可取(0,norm(size(BW)))区间上的实数,默认为1

返回值:
·H是变换得到的霍夫矩阵
·theta,rho分别对应于Hough矩阵每一列和每一行的\theta和\rho值组成的向量。

 

补充:[m,n] = size(X)
 
补充:norm的用法,matlab  help norm 
NORM   Matrix or vector norm.
For matrices...
对于矩阵...
NORM(X) is the largest singular value of X, max(svd(X)).
NORM(X)是X的最大奇异值
NORM(X,2) is the same as NORM(X).
NORM(X,1) is the 1-norm of X, the largest column sum,
          = max(sum(abs(X))).
NORM(X,inf) is the infinity norm of X, the largest row sum,
          = max(sum(abs(X'))).
NORM(X,'fro') is the Frobenius norm, sqrt(sum(diag(X'*X))).
NORM(X,P) is available for matrix X only if P is 1, 2, inf or 'fro'.
 
For vectors...
对于向量...
NORM(V,P) = sum(abs(V).^P)^(1/P).
返回向量A的p范数
NORM(V) = norm(V,2).
返回向量A的2范数,即欧几里德范数。二范数等价于平方和开平方,Sqrt(X1^2+X2^2+...+Xn^2) 

总结:霍夫变换是一个特征提取技术。其可用于隔离图像中特定形状的特征的技术,应用在图像分析、计算机视觉和数字图像处理领域。霍夫变换的大部分效率取决于输入数据的质量:为了使霍夫变换高效,必须检测边缘。在噪声图像上使用Hough变换是一个非常棘手的问题,一般而言,之前必须使用降噪阶段。在图像被斑点破坏的情况下(如雷达图像中的情况),Radon变换有时更适合检测线,因为它通过求和来衰减噪声。一开始实验中的图形界面设计与功能无法更好的结合起来,为此耗费了不少精力,查阅了不少资料,各种百度,B站进行学习,最终才可以完成界面交互。其次也让我了解到了不动手实践,等到真正动手实践才发现理论与实践的差距。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值