经过几天的学习研究,终于完成了广义霍夫变换(Generalised Hough transform)对特征点的筛选。此法不仅仅针对sift特征点,surf,Harris等特征点均可适用。
这几天我发现关于广义霍夫变换的资料少之又少,不过经过仔细研读各方的资料,我对Generalised Hough transform也有了一点认识,如果有理解的不对的地方,还请指正。
在介绍Generalised Hough transform之前,先简要介绍一下霍夫变换。我们都知道,用霍夫变换可以检测直线,圆,椭圆等,或者说只要该形状是可解析的,都可以用霍夫变换来进行识别。我认为,霍夫变换的关键点有两点:
1、投票机制的引入。
2、参数空间的转换。
举个例子,好比一条线段,在x-y坐标系下,一条直线的特征并不是那么明显的,但在转换到p,theta参数空间后,一条线段的特征就很明显,再加上投票机制,如果一个累加单元中有较大值,则可以判定存在一条线段。圆也一样。但直线、圆、椭圆等这些形状其实都是可解析的,也就是可以用一个方程式来表达,如果现在有一个不规则形状,他就没办法了。因此,D.H. Ballard在1981年将霍夫变换进行推广,提出了广义霍夫变换(Generalised Hough transform)。好了,下面进入本文的关键,广义霍夫变换(Generalised Hough transform)。
本文的主要参考资料如下:
%referrence:
% David G. Lowe,Distinctive Image Features from Scale-Invariant Keypoints
% David G. Lowe,Object Recognition from Local Scale-Invariant Features
% D.H. Ballard, "Generalizing the Hough Transform to Detect Arbitrary Shapes"
% wiki:http://en.wikipedia.org/wiki/Generalised_Hough_transform#cite_note-1
转载请注明出处:http://blog.csdn.net/u010278305
广义霍夫变换的目的是要在一个具体场景中寻找一个不规则已知物体的位置,我们把这个不规则已知物体叫做模板,这个已知物体的模板由一系列点组成。通过参数空间转换,我们把目标转换为寻找一个转换矩阵,通过该矩阵,可以使得模板与场景中模板出现的位置相匹配。只要我们确定了这个转换矩阵的参数,那么模板在场景中的位置也就确定了。
那么这个转换矩阵的参数如何确定呢?这就要通过投票机制,如果一个参数获得的投票最多,那么就认为这个参数是正确的。
一般情况下,要进行Generalised Hough transform,先要选取一个参考点,然后将普通的坐标转换为(r,, ɸ)这种形式,r为边界点到选取参考点的长度,ɸ为参考点到边界点的连线与边界点切线的夹角。如下图所示:
之后建立一个R-table,列出边界点上所有点的角度与其长度的对应关系,这样便能完整的表述我们的模板物体。R-table的建立过程如下: