2.7 直線段檢測
一般直線段檢測首先采用Canny邊緣檢測算子來獲得邊緣圖,然后應(yīng)用Hough變換可以用來檢測所有直線,這些線段可以通過邊緣像素數(shù)目、長度和隔離情況來分成線段。但是其效率較低,并且容易受紋理和噪聲的影響,具有以下兩個缺陷:第一,這樣的處理忽略了邊緣點的方向性,前面圓形Hough變換中就利用曲率信息來提高效率;第二,閾值的選取非常困難。
因此,在2008年,Rafael Grompone von Gioi等人提出了一種線性時間的直線段檢測算法,稱為LSD(Linear-Time Segment Detector)。其基本原理是利用圖像的梯度信息,若存在直線,則直線附近像素的梯度方向應(yīng)該類似,進而對梯度圖像采用區(qū)域增長算法獲得直線段區(qū)域,并且可以檢測直線段的寬度和長度等信息。
首先計算圖像梯度方向值,然后根據(jù)梯度方向值計算像素值的方向場(Level-Line,與梯度方向場垂直,實際上表示這個方向上像素值沒有太大變化,相當于邊緣方向),通過迭代的方法將區(qū)域擴大,每次迭代過程中將區(qū)域內(nèi)的點的像素值的方向進行平均,然后對其周圍位置的方向進行比較,將限定閾值內(nèi)的點增加到該區(qū)域中,其過程如圖2.33所示。這樣將圖像劃分成線支撐區(qū)域,每個區(qū)域中的聯(lián)通像素具有類似的梯度角度。然后,按照直線段的特征來擬合每個線支撐區(qū)域,直線圖特征可用圖2.34表示。

圖2.33 LSD直線段檢測對齊點的增長過程

圖2.34 采用矩形區(qū)域來刻畫直線段
在LSD中,以梯度幅度作為像素質(zhì)量,計算矩形區(qū)域的中心,第一個主軸作為矩形的長,長度和寬度覆蓋直線的支撐區(qū)域。圖2.35顯示的是一個用矩形區(qū)域模擬直線段的實際例子。圖2.35的左圖為實際圖像,中間圖為支撐區(qū)域,右圖為近似結(jié)果。

圖2.35 用矩形區(qū)域模擬直線段
最后一步,驗證滿足上述要求的線是否為直線段。通過在輸入圖像梯度圖的基礎(chǔ)上,保持處于水平線方向場中,如圖2.36所示。統(tǒng)計與擬合直線段矩形方向角度的誤差在內(nèi)的點數(shù)k,圖中k=4,并對矩形的長度l進行統(tǒng)計,若數(shù)目k和長度l都大于給定的閾值,則說明這樣的矩形區(qū)域確實是直線段;否則剔除。

圖2.36 直線段檢測示例
最終的直線段檢測算法可以表示為如圖2.37所示。該算法在計算機視覺領(lǐng)域中有著廣泛的應(yīng)用,例如,可以生成類似素描的圖像,從而進行草圖檢索等。此外,也有其余基于改進的標準Hough變換的直線段檢測方法,如D.Shi等提出的基于多層分數(shù)傅里葉變換的高級Hough變換。

圖2.37 LSD直線段檢測算法
- 數(shù)據(jù)浪潮
- Python金融大數(shù)據(jù)分析(第2版)
- 計算機信息技術(shù)基礎(chǔ)實驗與習題
- App+軟件+游戲+網(wǎng)站界面設(shè)計教程
- Learn Unity ML-Agents:Fundamentals of Unity Machine Learning
- Python醫(yī)學數(shù)據(jù)分析入門
- Python金融實戰(zhàn)
- 數(shù)據(jù)庫技術(shù)及應(yīng)用
- SAS金融數(shù)據(jù)挖掘與建模:系統(tǒng)方法與案例解析
- 數(shù)據(jù)庫應(yīng)用系統(tǒng)技術(shù)
- 數(shù)據(jù)分析思維:產(chǎn)品經(jīng)理的成長筆記
- MySQL數(shù)據(jù)庫應(yīng)用與管理
- Oracle 11g數(shù)據(jù)庫管理員指南
- 量化投資:交易模型開發(fā)與數(shù)據(jù)挖掘
- 社交網(wǎng)站的數(shù)據(jù)挖掘與分析(原書第2版)