霍夫直線檢測原理

2021-10-02 17:22:29 字數 1358 閱讀 6181

在cv中,經常需要檢測直線,用到霍夫變換演算法。(感覺自己的語言表達能力有所欠缺,所以寫下來)

*在影象空間中,可以用y=mx+b表示一條直線。其中,x、y為變數,m、b為引數

*對其進行變換,b=-mx+y。這樣,就完成了影象空間到引數空間的轉換

*從影象空間到引數空間,一條直線變成了乙個點(m,b)

*對於影象空間中的乙個點,影象空間中的每條經過該點的直線都對應著引數空間中的乙個點(m,b),這些點在引數空間中構成一條直線

* 當影象空間中有多個點時,引數空間中相應的會有多條直線;當影象空間中的點在一條直線上時,引數空間中的多條直線會相交於同一點(m,b),即為影象空間中直線的斜率和截距。霍夫直線檢測演算法就是基於該原理。

*  因此,霍夫直線檢測演算法總結如下:

1)引數空間量化

2)建立引數空間累加器a(m,b),並初始化為0

3)對於影象空間直線上的每個點:

對應著引數空間中的乙個直線,若引數空間的點(m,b)在該直線上,那麼a(m,b)加1

4)找到a(m,b)的最大值,即為直線的斜率和截距

for point in image_lines:    #影象空間中的point對應引數空間的parameters_line(b=-xm+y)

for m,b in a:

if m,b in parameters_line:

a[m,b]+=1

res=max(a(m,b))

* 然而,引數空間的範圍太大了,因此使用極座標:

此時,影象空間和引數空間的對應關係如下:

從圖中可以看出,霍夫直線檢測即為在引數空間中對rho和theta投票的過程,得票最高者為最終的直線引數。

霍夫直線檢測

使用python做霍夫直線檢測,直接詳細 注釋清晰 import cv2 import matplotlib.pyplot as plt import numpy as np if name main pic path c users echo desktop python file hough p...

霍夫直線檢測

霍夫直線檢測的原理 略 直接上 一 首先匯入,並進行高斯濾波降噪 我用的是這幅圖 二 獲取影象的輪廓 獲取邊緣 edges cv.canny src,150,300,aperturesize 3 cv.imshow edges edges 獲取邊緣後如下 接下來有兩種方法可以提取直線 方法一 lin...

霍夫變換檢測直線

對於結構化道路的檢測,常用的方法是採用霍夫變換檢測道路中的直線段。一條直線可以看做是影象上的若干個畫素點組成,也可以用一條直線方程來表示,如 y kx b,那麼霍夫變換檢測直線段其實是將影象畫素點空間變換到引數空間,對於直線來說就是引數 k,b 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...