Hough变换
2010-09-09 01:22 ubunoon 阅读(623) 评论(1) 编辑 收藏 举报看《计算机图像原理》,始终搞不明
白,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
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */