Apr 18, 2011

hough 变换


rho = x*cos(theta) + y*sin(theta)
rho 为原点到线的距离
theta 为线的法线和 x 轴的夹角

DIPUM 中 theta 定义不同,为线和 x 轴的夹角
做法:
for each foreground point
      for each theta \in [-90,90)
            calculate rho
            increment the cell (rho, theta)

因此每一点在每一个 theta 上都落在某个 rho 中,summing out rho 得到一个 constant vector.

如何用 Hough 变换求得方向?
1. 若图中有很明显的一条线
houghpeaks 求得最大的 peak

2 图中有很多平行线,要求得平行线的方向,但是max peak却不一定对应平行线。有时候 max peak 对应的线是断断续续的,你可能没注意到
对于这种情况,比较健壮的办法是求得多个 peaks,把它们的 theta 求直方图,再平滑滤波,最后求直方图的 peak

[pr pc] = houghpeaks(H,20);
pch = hist(pc,1:180);
pch = conv(pch,[0.25 0.5 0.25]);
[tmp idx]=max(pch);

theta = -90+idx-1;

0 comments: