Python OpenCV Hough直線檢測

2021-10-01 20:51:24 字數 2243 閱讀 7889

1.笛卡爾座標系與hough座標系

為了方便說明,我們先以笛卡爾座標系即直角座標系(與笛卡爾空間對應)為例來說明hough變換的基本原理。與笛卡爾座標系對應,我們構造乙個hough座標系(對應hough空間)。在hough座標系中,橫座標採用笛卡爾座標系中直線的斜率k,縱座標使用笛卡爾座標系中直線的截距b。

這條直線與點(xi

,yi)

(x_i,y_i)

(xi​,y

i​)在引數空間的直線相交於一點 (a0

,b0)

(a_0,b_0)

(a0​,b

0​),如圖所示:

笛卡爾空間中的點

笛卡爾空間內的關係(y=

kx+b

)(y=kx+b)

(y=kx+

b)hough空間

( xi

,yi)

(x_i,y_i)

(xi​,y

i​)yi=

axi+

by_i=ax_i+b

yi​=ax

i​+b

b =−

xik+

yib=-x_ik+y_i

b=−xi​

k+yi​(x

j,yj

)(x_j,y_j)

(xj​,y

j​)yj=

axj+

by_j=ax_j+b

yj​=ax

j​+b

b =−

xjk+

yjb=-x_jk+y_j

b=−xj​

k+yj

​由上可知:笛卡爾座標系中的一點(xi

,yi)

(x_i, y_i)

(xi​,y

i​)對應hough座標系中的一條直線b=−

axi+

yib =-ax_i+y_i

b=−axi

​+yi

​,而hough座標系中的乙個點(ai

,bi)

(a_i, b_i)

(ai​,b

i​)對應笛卡爾座標系的一條直線y=a

ix+b

iy = a_ix+b_i

y=ai​x

+bi​

,在hough空間中,經過乙個點的直線越多,說明其在笛卡爾空間內的對映的直線,是由越多的點所構成的。我們知道,兩個點就能構成一條直線,但是,如果有乙個點是因為計算錯誤產生的,那麼它和另外乙個點也會構成一條直線,此時就會憑空構造出一條實際上並不存在的直線。這種情況是要極力避免的。因此,在計算中,我們希望用更多的點構造一條直線,以提高直線的可靠性。也就是說,如果一條直線是由越多的點構成的,那麼它實際存在的可能性就越大,它的可靠性也就越高。因此,hough變換選擇直線的基本思路是:選擇盡可能多直線交匯的點。

2.極座標系與hough座標系

上面都是以我們熟悉的笛卡爾空間為例說明的。在笛卡爾空間中,可能存在諸如x=x

0x=x_0

x=x0

​的垂線lin

ealinea

line

a的形式,此時,斜率k為無窮大,截距b無法取值。因此,垂線lin

ealinea

line

a無法對映到hough空間內。為了解決上述問題,可以考慮講笛卡爾座標系對映到極座標系上。

opencv提供了函式cv2.houghlines()用來實現hough直線變換,該函式要求所操作的源圖是個二值影象,所以在進行hough變換之前要先講源影象進行二值化,或者進行canny邊緣檢測。

函式cv2.houghlines(image, rho, theta, threshold)

式中:概率hough變換對基本hough變換演算法進行了一些修正,是hough變換演算法的優化。它沒有考慮所有的點,相反,他只需要乙個足以進行線檢測的隨機點子集即可。

為了更好地判斷直線,概率hough變換演算法還對選取直線的方法作了兩點改進:

函式cv2.houghlinesp(image, rho, theta, threshold, minlinelengh, maxlinegap)

式中:

opencv學習筆記(六)霍夫直線檢測和圓檢測

1.霍夫變換直線檢測和圓檢測 霍夫變換是一種從空間域到極座標域的轉換。已知二維空間的一條直線有很多表現方式,例如截距式斜率式比如 y kx b,一旦我們知道k和b,就知道了這條直線,而k和b在座標上表示的只是乙個點而已,如果直線的k相同也就是直線平行,那麼表現在kb座標域也就是條k直線。那麼問題在於...

Reading Andrew Ng DL 目標檢測

目標檢測 1 物件定位和特徵點檢測 目標檢測的神經網路的目標標籤和損失函式為 2 基於滑動視窗的目標檢測演算法。定義 我們以某個步幅滑動這些方框視窗遍歷整張,對這些方形區域進行分類,判斷裡面有沒有汽車。缺點 計算量大 粒度 步幅 3 卷積的滑動視窗實現 基於滑動視窗的目標檢測演算法的缺點 計算量大 ...

Python Opencv Canny邊緣檢測

去噪 梯度 非極大值抑制 滯後閾值 梯度 角度 非極大值抑制 滯後閾值 梯度值 maxval 邊界 maxval 梯度值 minval 與邊界相連,保留。否則拋棄 梯度值 梯度值 ma xval maxv al 梯度 值 mi nval 梯度值nval 邊界與 邊界相連 保留。否則拋棄 拋棄 返回值...