2010-11-02 43 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