霍夫變換原理及OpenCV實現

2021-09-24 00:10:57 字數 1296 閱讀 6262

霍夫變換(hough transform)是影象處理中的一種特徵提取技術,它通過一種投票演算法檢測具有特定形狀的物體。該過程在乙個引數空間中通過計算累計結果的區域性最大值得到乙個符合該特定形狀的集合作為霍夫變換結果。霍夫變換於2023年由paul hough 首次提出[53],後於2023年由richard duda和peter hart推廣使用[54],經典霍夫變換用來檢測影象中的直線,後來霍夫變換擴充套件到任意形狀物體的識別,多為圓和橢圓.

經過幾天的學習,發現各位大牛的理解方式之前都是有一些區別的,但是核心的思想沒有變化,因此記錄一下自己對霍夫變換直線檢測的認識。

一、原理介紹:

1、對於直角座標系中的任意一點a(x0,y0),經過點a的直線滿足y0=k*x0+b.(k是斜率,b是截距)

2、那麼在x-y平面過點a(x0,y0)的直線簇可以用y0=k*x0+b表示,但對於垂直於x軸的直線斜率是無窮大的則無法表示。因此將直角座標系轉換到極座標系就能解決該特殊情況。

3、在極座標系中表示直線的方程為ρ=xcosθ+ysinθ(ρ為原點到直線的距離),如圖所示:

4、如上圖,假定在乙個8*8的平面畫素中有一條直線,並且從左上角(1,8)畫素點開始分別計算θ為0°、45°、90°、135°、180°時的ρ,圖中可以看出ρ分別為1、(9√2)/2、8、(7√2)/2、-1,並給這5個值分別記一票,同理計算畫素點(3,6)點θ為0°、45°、90°、135°、180°時的ρ,再給計算出來的5個ρ值分別記一票,此時就會發現ρ = (9√2)/2的這個值已經記了兩票了,以此類推,遍歷完整個8*8的畫素空間的時候ρ = (9√2)/2就記了5票, 別的ρ值的票數均小於5票,所以得到該直線在這個8*8的畫素座標中的極座標方程為 (9√2)/2=x*cos45°+y*sin45°,到此該直線方程就求出來了。(ps:但實際中θ的取值不會跨度這麼大,一般是pi/180)。

霍夫變換原理及實現

霍夫變換是影象處理必然接觸到的乙個演算法,為了檢測出來直線和圓,橢圓之類的形狀。比較好的教程霍夫變換原理 霍夫變換實現步驟 import cv2 import numpy as np def hough detectline img thetas np.deg2rad np.arange 0,180...

OpenCV 霍夫線變換 霍夫圓變換

關於霍夫變換在官方文件opencv249裡的描述如下 api如下 void houghlines inputarray image,outputarray lines,double rho,double theta,int threshold,double srn 0,double stn 0 vo...

openCV 霍夫變換原理(直白易懂)

霍夫變換 hough transform 霍夫變換是影象處理中從影象中識別幾何形狀的基本方法之一,應用很廣泛,也有很多改進演算法。最基本的霍夫變換是從黑白影象中檢測直線 線段 我們先看這樣乙個問題 設已知一黑白影象上畫了一條直線,要求出這條直線所在的位置。我們知道,直線的方程可以用y k x b 來...