在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 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...