歷史
霍夫變換(Hough Transform)是在1959年由氣泡室(Bubble Chamber)照片的機器分析而發明,發明者Paul Hough在1962年獲得美國專利,被命名為Method and Means for Recognizing Complex Patterns(用於識別復雜圖案的方法和手段)。該專利對直線采用斜截距參數化,但由於斜率可能變成無窮大,這有可能導致無限變換空間(unbounded transform space)。
現在使用的霍夫變換是1972年由Richard Duda和Peter Hart所發明,稱為“廣義霍夫變換[GHT]”(Use of the Hough Transformation to Detect Lines and Curves in Pictures,1972)。
然后1981年在Dana H. Ballard的計算機視覺社區中出現一篇文章名為 Generalizing the Hough transform to detect arbitrary shapes,從而推廣開來。
該文描述了使用模板匹配原理對霍夫變換進行修改。要知道霍夫變換最初是為了分析定義的形狀(如線、圓、橢圓等)而開發。通過了解其形狀並旨在其找出圖像中的位置和方向,這種改變使得霍夫變換能夠檢測用其模型描述的任意對象。這將圖像中查找對象(用模型描述)的問題通過查找模型在圖像中的位置來解決。利用廣義霍夫變換(GHT),找到模型位置的問題轉換為尋找將模型映射到圖像中的變換參數的問題。給定變換參數的值,就可以確定模型在圖像中的位置。
后來產生了更多霍夫變換的變體和擴展,比如KHT,3DKHT,這里不細致說明。
霍夫變換經常應用於圖像處理中的一種特征提取技術,它通過一種投票算法檢測具有特定形狀的物體。該過程在一個參數空間中通過計算累計結果的局部最大值得到一個符合該特定形狀的集合作為霍夫變換結果。經典霍夫變換用來檢測圖像中的直線,后來霍夫變換擴展到任意形狀物體的識別,多為圓和橢圓.
原理介紹:
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:但實際中θ的取值不會跨度這么大,一般是1度)。