【視覺算法】霍夫變換(Hough Transform)

在進入正題之前,首先思考一個問題,在下圖中,我們如何從散亂的點中尋找到直線?
在這裏插入圖片描述
有多少直線?哪些點屬於哪些直線?
如果是找圓形呢?
霍夫變換(Hough Transform)能很好的解決這些問題,要理解霍夫變換,首先要知道霍夫空間,看下圖:
在這裏插入圖片描述

可以看到,霍夫空間實際上是參數空間,在上圖的變換中,圖像空間中的直線的斜率和截距是未知參數,由這兩個未知參數構造的空間就是對應的霍夫空間。圖像空間中的一條直線,對應霍夫空間中的一點;霍夫空間中的一條直線,對應圖像空間中的一點,這就是對偶性,很容易理解。
那麼如果圖像空間中有兩個點呢?看下圖:
在這裏插入圖片描述
現在思考一個問題:什麼樣的直線經過圖像空間中的兩這個點呢?顯然,它是霍夫空間中對應兩條線的交點,即具有同樣斜率和截距的直線。
在這裏插入圖片描述
這就是我們找到直線的方法,是不是顯得有些多餘?問題複雜些,極其好用!重新思考文章開頭的問題,我們把這些點變換到霍夫空間,看下圖(這裏只是演示):
在這裏插入圖片描述
並用一些網格來劃分霍夫空間:
在這裏插入圖片描述

對於每一個網格,我們對經過該網格的直線數目進行計數(投票),設定一個閾值,票數大於該閾值的網格,我們就認爲該網格代表圖像空間中的一條直線(閾值大一些,由數目較少的點構成的直線被忽略),見下圖:

在這裏插入圖片描述
上圖霍夫空間中畫圈的網格與圖像空間中的直線是對應的。
至此,我們已經對霍夫變換有了一定的認識,現在考慮一個特殊情況:如果直線是垂直於x軸的,即斜率爲無限,怎麼辦?
爲了避免出現這個問題,改用極座標形式:
在這裏插入圖片描述
由直線的斜截式,很容易推出:
在這裏插入圖片描述

於是,有:
在這裏插入圖片描述
x,y是已知的,r和θ的關係顯而易見;再根據r和θ構建霍夫參數空間即可。
下面簡單分析一下經典霍夫變換的複雜度,霍夫空間的維數是由未知參數的個數確定的,一般來講,空間複雜度爲O(Kn),其中K是網格個數,n是未知參數的個數。
經典的霍夫變換能夠解決可解析圖形(直線、圓、橢圓,球,等)的識別問題,那麼對於不可解析的不規則圖形呢?廣義霍夫變換能夠解決這個問題。
下一篇文章學習廣義霍夫變換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章