2010-11-02 42 views
0

在OpenCV中可以执行级联Hough变换吗?我理解它只是一个HT,然后是另一个。我面临的问题是,返回的值始终是rho和theta,绝不会以y截距的形式出现。在OpenCV中级联Hough变换

是否可以将这些值转换回y截距并将它们拆分成子空间,以便我可以检测到消失点?

还是只是更好地编程一个HT自己的实现,例如,Python?

回答

1

你可以尝试填充M和C参数霍夫域代替,使表达式y = mx + C可以重新写为C = Y - MX所以不是通常rho = x cos(theta)+ y sin(theta),你有c = y - mx

通常,你会通过theta并计算rho,然后你增加accumulator的值一对rho和theta。在这里,你将通过m的值并计算c的值,然后在累加器中累加m,c元素。得票最多的集装箱会是正确的M,C

// going through the image looking for edge pixels 
for (i = 0;i<numrows;i++) 
    { 
     for (j = 0;j<numcols;j++) 
     { 
      if (img[i*numcols + j] > 1) 
      { 
       for (n = first_m;n<last_m;n++) 
       { 
        index = i - n * j; 
        accum[n][index]++; 
       } 
      } 
     } 
    } 

我想这个地方变得无效是,它难以定义的步长要通过兼并,因为他们应该从技术上负无穷大到无穷大,从而你会遇到麻烦。对于Hough变换来说,m,c很重要。大声笑

我想你可以走另一条路,并隔离m,所以它会是m =(yc)/ x,所以现在,你循环了一堆有意义的y值,尽管它仍然是可管理的很难定义你的累加器矩阵,因为m仍然没有限制。我想你可以限制你有兴趣寻找的m的值。

是的,用rho和theta去把它们转换成y = mx + c,然后制作一个全新的图像并重新运行hough变换就更有意义了。

1

我不认为OpenCV可以执行级联hough变换。你应该把它们自己转换成xy空间。这篇文章可以帮助你:

http://aishack.in/tutorials/converting-lines-from-normal-to-slopeintercept-form/

+0

谢谢。但我认为我需要直接解析y截距形式的HT,而不是转换。你知道把Hough空间分成3个子空间是什么意思,就像他们为Cascaded Hough变换做的那样? – saad 2010-11-03 20:56:25