1. 程式人生 > >霍夫變換(hough transform)原理

霍夫變換(hough transform)原理

      廣義霍夫變換之所以能處理任意形狀的圖形並不是找到了可以表示任意圖形的方程(這是不可能的),而是使用表的形式描述一種圖形,把圖形邊緣點座標儲存在一張表中,那麼該圖形就確定下來了,所以其實無論是直線(其實是線段)、圓、橢圓還是其他形狀的幾何圖形,都可以使用同一方法處理,所不同的是這時候的圖形是自定義的,是實在的,而代數方程表示的模式是連續的、抽象的,圓的方程只有一種,但自定義的圓卻是無窮的,只要你認為它足夠圓了就可以。當然兩種表示都會有各自的優勢和侷限。有了表之後就需要找到一種可以把圖形點集投射到引數空間的一點的轉換演算法,例如直線和圓霍夫變換通過方程(函式)及遍歷把點集進行投射,使得屬於某直線或圓的點集中到一個點;那麼僅有一張描述圖形邊緣座標點的表如何進行投射呢?我們可以把這張表看作是模板,進行模板匹配,大部分的點匹配成功也就可以理解為這些點都投射到一個點上,不過這時候不需要再搜尋引數空間峰值了,這種模式可以認為是引數間沒有任何關聯,所以是完全的遍歷。但有旋轉加上縮放的情況模板匹配型的霍夫變換是十分耗時的,也可以想象成因為引數不相關所以增加遍歷搜尋時間。Ballard (1981)的廣義霍夫變換最精妙之處在於為引數增加了兩個關聯,使得有平移和旋轉(無縮放)的情況只需要遍歷一個引數,三個引數分別是圖形的中心座標(橫縱),旋轉角度(相對參考圖形),Ballard的演算法預先把參考圖形邊緣點對中心的徑向量儲存起來,利用待搜尋圖形邊緣點的梯度方向(用相對座標軸的角度表示)作為索引找到相應的徑向量,加上該量後就完成了投射,所以要遍歷的引數只有旋轉角度,所以說有兩個關聯。當然如果加上縮放就要遍歷兩個引數,這也只是和霍夫檢測圓的規模一樣而已。這種廣義霍夫變換的圖形表不再是直接儲存座標,而是邊緣點的梯度加上徑向量,給出了這些量同樣的也就能夠表示出一種圖形了。然而這種廣義霍夫變換也是有缺陷的,不少後來者提出了改進方法,這不在本文討論範圍。