霍夫直線檢測的基本原理在於利用點與線的對偶性。
在直角座標系下,一條直線的方程可以用點斜式表示
但是這種表達方式無法表示斜率無窮大的情況(直線垂直於x軸)。
因此,轉化到極座標系下
可以變換為
其中,因此,在直角座標系下的乙個點
也就是說,直角座標系下的乙個點對應極座標系下的一條曲線。反過來也是成立的。
霍夫直線檢測就是把影象空間(直角座標系)中的直線變換到引數空間(極座標系)中的點,通過統計特性來解決檢測問題。
如果一幅影象中的畫素構成一條直線,那麼這些畫素座標值(x, y)在引數空間對應的曲線一定相交於乙個點,所以只需要將影象中的所有畫素點的座標值變換成引數空間的曲線,並在引數空間檢測曲線交點就可以確定直線了。
但是乙個點對應的曲線有無數條,在實際計算時必須是有限的值。因此將引數
opencv中有兩個霍夫直線檢測的介面。
標準霍夫線檢測
void cv::houghlines(inputarray image,
outputarray lines,
double rho,
double theta,
int threshold,
double srn = 0,
double stn = 0,
double min_theta = 0,
double max_theta = cv_pi
)
概率霍夫線檢測
void cv::houghlinesp(inputarray image,
outputarray lines,
double rho,
double theta,
int threshold,
double minlinelength = 0,
double maxlinegap = 0
)
因為這兩個函式的輸入都是二值影象,所以一般的流程都是先對原圖做邊緣輪廓提取,如canny,然後在邊緣二值分布圖上進行霍夫線檢測。
opencv 霍夫變換 直線檢測
用來做直線檢測 前提條件是邊緣檢測已經完成,一般用canny來做。cv houghlinesp inputarray src,輸入影象,必須8 bit的灰度影象 outputarray lines,輸出的極座標來表示直線 double rho,生成極座標時候的畫素掃瞄步長,一般是1 double t...
opencv之霍夫變換直線檢測
霍夫變換之直線檢測 x cos x cos theta x cos y sin y sin theta y sin 2 x2 y2 2 x 2 y 2 2 x2 y2 tan y x x 0 tan theta y x x 0 tan y x x 0 檢測原理 兩點確定一條直線,通過一點可以確定無數...
Opencv 霍夫變換 直線
注意 下面的解釋屬於bradski和kaehler 的 學習opencv 一書。hough line變換是用於檢測直線的變換。為了應用變換,首先需要邊緣檢測預處理。如你所知,影象空間中的一行可以用兩個變數表示。例如 在笛卡爾座標系中 引數 m,b 在極座標系中 引數 r,對於hough 變換,我們將...