hough 变换原理
Hough 变换是图像处理中从图像中识别几何形状的基本方法之一。Hough 变换
的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线
表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转
化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。
比如直线、椭圆、圆、弧线等。
Hough 变换的基本思想
设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,
直线的方程可以用 y=k*x+b 来表示,其中 k 和 b 是参数,分别是斜率和截距。
过某一点(x0,y0)的所有直线的参数都会满足方程 y0=kx0+b。即点(x0,y0)确定了
一族直线。方程 y0=kx0+b 在参数 k--b 平面上是一条直线,(你也可以是方程 b=-
x0*k+y0 对应的直线)。这样,图像 x--y 平面上的一个前景像素点就对应到参数
平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的
直线是 y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(22)。可以求出,过 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 变换思想为:在原始图像坐标系下的一个点对应了参数坐
标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,
然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它
们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参
数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始
坐标系下的直线。
首先,初始化一块缓冲区,对应于参数平面,将其所有数据置为 0.对于图像
上每一前景点,求出参数平面对应的直线,把这直线上的所有点的值都加1。
最后,找到参数平面上最大点的位置,这个位置就是原图像上直线的参数。
在实际应用中,y=k*x+b 形式的直线方程没有办法表示 x=c 形式的直线(这时
候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程 p=x*cos(theta)
+y*sin(theta)。这样,图像平面上的一个点就对应到参数 p---theta 平面上的一条
曲线上,其它的还是一样。