1. 程式人生 > >LSD直線檢測和霍夫線變換的學習建議

LSD直線檢測和霍夫線變換的學習建議

    最近筆者學習霍夫線變換和LSD直線檢測演算法,有一些學習建議,希望可以給予大家一些幫助。

    學習霍夫變換的感想

    每個人理解的霍夫變換或許略有差異,但是最主要的是笛卡爾座標系跟極座標系的相互轉換。

    霍夫變換分為標準霍夫變換(SHT),多尺度霍夫變換(MSHT),累積概率霍夫變換(PPHT)。

    標準霍夫變換(SHT),多尺度霍夫變換(MSHT)都由函式HoughLines呼叫,累積概率霍夫變換(PPHT)由HoughLinesP呼叫。

    笛卡爾座標和極座標

    笛卡爾座標的點 <=> 極座標的曲線

    在笛卡爾座標系:直線可由引數斜率和截距(m,b),表示。

    在極座標系:可由引數極徑和極角ρ,θ表示

 

ρ,θ就是一對霍夫空間的變量表示。直角座標系中一個點(x0, y0)可以代表360°的直線的其中一個點,我們把這個點旋轉360°的直線都用極座標ρ,θ表達出來,就是一個在霍夫空間ρ,θ的正弦曲線(大家想象一下,一個點的360°的直線的ρ,θ)都不一樣,不一樣的ρ,θ)組成了正弦曲線上的點)。同樣,直線上的其他點(Xn,Yn)也會構成一組關於ρ,θ的正弦曲線,這樣勢必存在一個關於ρ,θ相交(即垂直點(r,θ))。


於是乎, 一條直線能夠通過在極座標下尋找交於一點的曲線數量來檢測,如果越多曲線交於一點,就意味著這個交點表示的直線由更多的點組成。我們可以通過設定直線上點的閾值來定義多少條曲線交於一點我們才認為檢測到了一條直線。

     標準霍夫變換能檢測直線,但是不能夠檢測直線兩端,概率霍夫變換可以檢測到直線的兩端。如今霍夫變換可以檢測圓及其大部分的形狀。

    下圖這是筆者的總結, 如有誤,望請告知。 


標準霍夫變換本質上是把影象對映到它的引數空間(即霍夫空間)上,它需要計算所有的M個邊緣點,這樣它的運算量和所需記憶體空間都會很大。如果在輸入影象中只是處理mm<M)個邊緣點,則這m個邊緣點的選取是具有一定概率性的,因此該方法被稱為概率霍夫變換(Probabilistic Hough Transform)。該方法還有一個重要的特點就是能夠檢測出線端,即能夠檢測出影象中直線的兩個端點,確切地定點陣圖像中的直線。

   

 接下來大家學習理解霍夫變換檢測線的原始碼。     

 學習思考:1.檢測直線過程中一條比較粗的直線會被檢測成兩條分割的直線? 

                  2.霍夫線變換有什麼缺點?如何優化?

                   答案自行百度思考。

    學習LSD直線檢測的感想

LSD是一種區域性提取的演算法,執行速度比霍夫線變換Hough要快。

 但是有區域性演算法的缺點:

  1.對於直線相交情況,因為設定了每個點是否USED,因此每個點只能屬於一條直線,若有相交必有至少一條直線被割裂為兩條。又因為其基於梯度,直線交點梯度值往往又較小(不被檢測為邊緣點),因此很有可能相交的兩條直線在交點處被割裂為四條線段。

  2.由於區域性檢測演算法自增長的特點,對於長線段被遮擋、區域性模糊等原因經常割裂為多條直線。這些缺點在Hough變換中不存在。

以上是筆者的學習建議。

                                                                                                                                        侵刪。