现在的位置: 首页 > 综合 > 正文

Hough变换

2013年06月04日 ⁄ 综合 ⁄ 共 783字 ⁄ 字号 评论关闭

看《计算机图像原理》,始终搞不明

Technorati 标签:

白,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

抱歉!评论已关闭.