看《计算机图像原理》,始终搞不明
白,Hough变换是怎么进行的。
后来看了
http://www1.qcxy.hb.cn/dxx/blog/u/zhangtao/archives/2008/520.html 和 http://slash-directx.blogspot.com/2009/04/huff-transformation.html
之后,终于明白Hough变换方式。
直线方程
y = ax + k
在已经知道点xi,yi的情况下,需要求解的是a和k的值,在n个点下,可以列出n个
yi=axi+k
xi和yi是已知点。
如果xi与yi之间有直线关系,那么就有m个点计算出来的a和k是一个值(直线上有m个离散点)。这个m就是Hough进行统计的值。
由于水平线y=ax+k是没有办法表示出来,用极坐标可以表示平面上任意直线,上面方程就可以转换为
p = xcos(theta) + ysin(theta)
上面的描述就可以修改为下面的方式:xi,yi之间有直线关系,那么就有m个点计算出来的theta和p是一个值。
由于theta值是在0~2pi之间,于是,又可以在角度0~2pi之间规划离散点,使得每隔1°就计算p的值,这样就可以通过每一度上p的个数,来得到具体直线的个数
大致的伪代码如下:
max-distance = sqrt( x-last*x-last + y-last*y-last )
p-theta-face = new int[max-distance][360]
for yi in y:
for xi in x:
for theta in xrange(0,360):
p = xi*cos(theta) + yi*sin(theta)
p-theta-face[p][theta] += 1
算法复杂度为O3