21 霍夫變換(Hough)

2021-10-02 18:55:44 字數 2922 閱讀 8542

1、霍夫變換直線檢測(還有圓檢測,統一幾何形狀檢測);

2、相關api;

3、**演示;

1、hough line transform用來做直線檢測;

2、前提條件-邊緣檢測已經完成(canny運算);

3、將平面直角座標轉換到極座標系中,霍夫空間–極座標空間,平面直角座標–空域,將影象從空域轉換到霍夫域;

4、霍夫直線變換的原理:通過將影象上的畫素點全部變換到極座標空間形成很多曲線,如果其中有曲線相交於1點,則這些畫素點屬於同一條直線,其中交點的θ表示直線的角度,再根據交點的r、θ值反算出平面座標中對應的畫素點,即可得到對應的直線;

注:平面畫素點到極座標下曲線轉換公式:

極座標下交點到平面畫素座標轉換公式:

5、直線相交點的確定方法:轉換後的曲線經過的點都對應+1,則曲線經過次數最多的點值最大,亮度最大;(訊號越強,點越白)

1、標準霍夫變換 :cv::houghlines(),從平面座標轉換到霍夫空間,最終輸出(theta,r)表示極座標空間;只是輸出找到的霍夫空間中的交點,反算需要自己完成;

2、霍夫變換直線概率cv::houghlinesp(),最終輸出直線的平面座標中兩個點座標(x0,y0,x1,y1);

引數說明:

rho --掃瞄步長,一般取1,最大取值是影象寬度高度平方的開根號;

theta–角度步長,一般取 cv_pi/180; 最大值是π;

threshold–閾值,只有獲得足夠交點的極座標點才被看成直線,可以設10(10個畫素長)

srn --是否設定多尺度霍夫變換(影象金字塔),不需要設定0;

注:minlinelength: 最小直線長度,直線多少畫素才認為是直線;

maxlinegap : 間隔多少畫素以內仍然認為是直線;

說明:1、canny運算後影象為二值影象,不能畫彩色線,需要呼叫cvtcolor(edge_image, dst, cv_gray2bgr);轉換到單通道彩色顏色空間,後面才能畫彩色線;

2、建立vectorpline儲存任意數量的hough計算結果;

3、houghlinesp()中調整 --最小直線長度,最大間隔可以有效改進影象顯示結果;

;//extract image 提取的彩色影象

canny

(gaus, edge_image,50,

100,3,

false);

//邊緣檢測

cvtcolor

(edge_image, dst, cv_gray2bgr)

;//轉換為彩色影象

imshow

("edge_image"

, edge_image)

;//建立乙個包含4個float元素的陣列

vector plines;

//hough直變換

houghlinesp

(edge_image, plines,

1, cv_pi /

180,20,

0,20)

;//一般不用捨棄,大於0的保留

//將檢測到的直線畫出來

霍夫變換 hough

hough 變換的基本原理在於利用點與線的對偶性,將原始影象空間的給定的曲線通過曲線表達形式變為引數空間的乙個點。這樣就把原始影象中給定曲線的檢測問題轉化為尋找引數空間中的峰值問題。也即把檢測整體特性轉化為檢測區域性特性。比如直線 橢圓 圓 弧線等。二 hough 變換的基本思想 設已知一黑白影象上...

hough變換直線檢測 霍夫圓變換

霍夫圓變換的基本原理和霍夫線變換的原理類似,直線檢測中對應極座標點被三維的圓心點 x,y 以及半徑r即 x,y,r 所代替。對於圓來說,圓心點和半徑就可以確定乙個圓。三維空間中曲線相交於一點的邊緣點集越多,那麼它們經過的共同圓上的畫素點越多,那麼它們經過的共同圓上的畫素點就許多,設定相應的閾值相應的...

hough變換直線檢測 霍夫變換是怎麼發明的

原創 範 純真學者出神入化 2月24日 本文由純真學者出神入化編譯自 講述霍夫 hough 變換如何被發明的故事。hough變換用於檢測數字影象中的直線等幾何特徵,可能是計算機視覺中使用最廣泛的程式之一 1 3 雖然沒有人列出計算機視覺中使用任何特定演算法或技術的頻率,但我們可以通過注意在googl...