線特征---EDLines原理(六)


參考文獻:EDLines: A real-time line segment detector with a false detection control ----Cuneyt Akinlar  , Cihan Topal

 1. Introduction

這種算法根本不需要參數調整,只需為所有類型的圖像運行一組默認參數即可。

傳統的直線段檢測算法開始於計算邊緣圖,通常由著名的Canny邊緣檢測器(Canny, 1986)。接下來是Hough變換(Hough, 1962; Illinworth and Kittler, 1988; Kalviainen et al., 1996),提取含有一定數量的邊緣點的所有的線。線碎成線段通過間隙和長度閾值(Duda and Hart, 1972)。這些方法通常很慢,它們通常將非連續的線段組合在一起產生大量錯誤檢測。

有許多變種的Hough變換(HT),例如,Randomized Hough transform (Xu et al., 1990), Progressive Probabilistic Hough transform (Kiryati et al., 1991; Matas et al., 2000;Galambos et al., 2001), Elliptical Gaussian kernel-based Hough transform (Fernandes and Oliveira, 2008; KHT software package),and many others (Princen et al., 1990; Gorman and Clowes, 1976;Lam et al., 1994; Kang et al., 2007; Chao et al., 2009),每一個試圖彌補標准Hough變換不同的缺點。在這些技術中,(Fernandes and Oliveira, 2008; KHT software package)提出一個有效的HT程序方案。給定一個二進制邊緣圖,KHT實現軟件實時性能而成為偽線檢測算法的魯棒性。
KHT也有默認的參數設置,可用於所有的邊緣圖。然而,所有基於Hough變換的技術都需要一個二值邊緣映射作為輸入,它們通常在(角度,半徑)表示中生成無限長的線段(而不是線段),然后必須細分為線段。對於這些技術來說,干凈的輸入邊映射是非常關鍵的,但是用於邊緣圖生成的參數不是自動的,必須由用戶決定。
圖1顯示了通過OpenCV的Hough產生的線段變換的方法,即cvhough-lines2功能。為了得到這一結果,在Canny邊緣檢測和直線提取中分別設置了不同的閾值,並給出了最佳結果。雖然在房屋上檢測到的一些長線段是准確的,但有許多不恰當的線段檢測,特別是圍繞着各向異性結構,如灌木叢、草地和樹木。Hough變換通過KHT軟件包產生結果,雖然比OpenCV的cvHoughLines2要快得多,但KHT產生無限長的線而不是線段,它必須被分解成線段的后處理步驟。根據記錄,KHT軟件包只需要16.5毫秒(5毫秒生成邊緣圖加11.5 ms線提取)在圖1的房子的圖像,並輸出360條線。

代替使用霍夫變換(Hough transform), Chan and Yip (1996) and Etemadi (1992)提出了經過邊緣圖的計算后用不同的技術來提取線段。具體來說,Etemadi’s method (Etemadi, 1992)是基於從一個給定的邊緣圖像素生成鏈,然后通過遍歷這些鏈提取直線段和弧線。雖然線段和弧線的提取過程是無參數的,但是邊緣檢測仍然是需要參數的,留給用戶添加。這種方法產生良好的局部線段和弧線,但它產生了太多的錯誤的部分,特別是在嘈雜的背景或含有復雜的結構,如樹木,草,多雲的天空,或類似的各向異性結構。圖1顯示了Etemadi’s的結果只有直線段顯示。

可選擇使用的二進制邊緣圖線段檢測,也有技術,其工作只是利用像素的梯度方向((Burns et al., 1986; Beveridge et al., 1996; Desolneux et al., 2000, 2008; Grompone von Gioi et al., 2008a,b, 2010).)。第一個這樣的建議是由Burns al(1986)and Beveridge et al. (1996)提出的,在每個像素處計算水平線方向,然后通過組合具有相同方向的像素來生成線段。從像素開始,觀察相鄰像素的水平線角,如果它們具有相同的方向,將它們結合起來。雖然這項工作對於最近的一些線探測器奠定了基礎,但它所產生的結果類似Etemadi’s method產生太多有大量錯誤的線段。

Desolneux et al. (2000, 2008)通過使用 Burn’s 像素定位的思想,提出了一個通過控制錯誤的數量的無參數線檢測。他們的想法是計算在一個特定的方向上的對齊像素(aligned pixels)的數量,如果觀察到的結構是有感知意義,接受一組像素作為一個線段。這就是所謂的從Gestalt theory 的論赫姆霍茲原則(Helmholtz principle)(Desolneux et al., 2008)並作為線的驗證方法。雖然這種方法有望不產生錯誤,但是許多有效的短線段失蹤(見Desolneux et al.’s的結果如圖1所示)。這種方法在自然界中也是非常全球性的,可以產生非常長的線,而實際上這些線應該被分解成幾個較小的線段(觀察兩個不同樓層上的窗戶被組合了)。此外,該算法計算量非常大,因此速度非常慢(在給定的圖像上需要超過10秒)。

通過擴展Burns’s工作為線段的生成,並結合他們通過 Desolneux’s線驗證方法定於亥姆霍茲原理Helmholtz principle (Desolneux et al., 2008), Grompone von Gioi et al. (2008a,b, 2010)最近提出了一個無參數的線檢測算法,稱為線段檢測器(LSD),可產生精確的線段,並控制錯誤檢測的數量。雖然LSD對大多數類型的圖像產生良好的效果(見圖1中的LSD結果),但它在背景含有一些白噪聲的圖像中失敗,而且它的運行時間仍然是令人望而卻步的,這使得它不適合實時應用。

在本文中,我們提出了一個快速、無參數的線段檢測器,命名為EDLines (Akinlar and Topal, 2011),它產生強大的和准確的結果,比最快的已知線段檢測器速度更快,達到11倍;換句話說,the LSD by Grompone von Gioi et al. (2008a,b, 2010). 我們的探測器還包括一個線的驗證步驟定於亥姆霍茲原理Helmholtz principle (Desolneux et al., 2008),這讓它控制錯誤檢測的數量。 EDLines得到的結果,我們看到的是,LSD非常相似,有所有主要的線段檢測,並有極少數誤報。此外, EDLines運行實時以炫目的速度為9.45毫秒,約10倍的速度比LSD對給定的圖像。

EDLines包括三個步驟: (1)給定一個灰度圖像,we first run our fast,新的邊緣檢測、邊緣繪制(ED)算法,產生一套干凈的,像素相鄰的鏈,我們稱之為邊緣。邊緣線段直觀地反應對象的邊界。 (2)然后,利用直線度准則,即最小二乘直線擬合法,從生成的像素鏈中提取線段。 (3)最后,線的驗證步驟定於亥姆霍茲原理Helmholtz principle (Desolneux et al., 2008; Grompone von Gioi et al.,2008a)是用來消除虛假線段的檢測。

 

本文的其余部分組織如下:
2節簡要地描述了我們的邊緣檢測、邊緣繪制(ED)算法(Topal et al., 2010; Topal and Akinlar, submitted for publication;Edge Drawing Web Site)。
3節介紹了如何由ED產生的像素鏈來擬合線段。
4節描述了線的驗證步驟。
5節討論了算法的內部默認參數,這些參數是固定的,對於不同的圖像從不改變。
6節比較EDLines 的現象在文中通過實驗,7節總結全文。

2. Edge detection by Edge Drawing

邊緣繪制Edge Drawing (ED)是我們最近提出的新的、快速的邊緣檢測算法。是什么使ED脫穎而出,是以下:而其他邊緣檢測器則輸出一個二值邊緣圖像作為輸出,其中檢測到的邊緣像素通常是獨立的、不相交的、不連續的實體;

ED產生一組邊緣段,這些段是干凈的、連續的,即連接的邊緣像素鏈。因此,雖然其他邊緣檢測器的輸出需要進一步處理,以產生潛在的對象邊界,這可能甚至不可能或導致不准確;

ED不僅產生完美的連接對象的邊界,默認情況下,但它也實現了這一驚人的速度相比其他邊緣檢測器。

給定一個灰度圖像,Edge Drawing檢測的四個步驟:

(1)圖像先通過一個過濾器,例如,高斯,抑制噪聲和輸出平滑圖像---用一個5×5高斯核(默認)。
(2)計算梯度的幅值和在平滑圖像的每個像素的方向。任何已知的梯度算子,e.g., Prewitt, Sobel, Scharr, etc.可在這一步。
(3)我們計算一組像素,稱為錨(anchors),這是一個邊緣像素有非常高的概率(edgels)。錨對應於梯度算子產生最大值的像素,即梯度圖的峰值。
(4)最后,我們連接第三步計算的錨,繪制它們之間的邊。整個過程類似於孩子的邊界完成拼圖,在那里孩子被賦予一個物體的虛線邊界,並要求他通過連接點完成邊界。

從一個錨(點),ED利用相鄰像素的梯度幅值和方向,通過梯度極值(gradient maximas)走到下一個錨。如果你把漸變圖想象成一座3D的山,這很像是從山頂爬到山頂。

圖2顯示了ED在128×128像素的灰度圖像的動作。圖2(b)顯示的梯度圖,其中白色像素對應於高梯度值(山頂)。圖2(c)示出了一組與梯度圖的峰值相對應的錨點,並清楚地描述了圖像中矩形的邊界。

最終的邊緣圖,如圖2(d),是通過連接的錨(點)獲得。正如前面提到的,ED不僅產生類似於其他邊緣檢測器的二進制邊緣圖,而且它還產生一組邊緣段,這些段是由對象邊界相對應的像素鏈連接而成。

在給出的例子中,ED產生四個邊,為每個矩形的邊界。給定這些邊緣段,線段提取的剩余部分是重溫這些像素鏈,並將像素擬合成線。下一節描述如何完成。

3. Line segment extraction

最小二乘擬合_直線原理:https://wenku.baidu.com/view/93b7e2b65f0e7cd185253642.html

給定一個由連續的邊緣像素鏈組成的邊緣段,這個步驟的目標是將這個鏈分割成一個或多個直線段。其基本思想是依次跟蹤像素,然后用最小二乘線擬合法對像素線進行擬合,直到誤差超過某個閾值,例如,1個像素誤差。

當誤差超過這個門檻,我們生成一個新的線段。然后,該算法遞歸處理鏈的剩余像素,直到處理所有像素。

表1顯示該算法從一個像素鏈中提取的線段。思想是用最小二乘線擬合法(第一次圈)生成最小長度的初始線段,再通過增加像素點來擴大線段(第二次圈)。

最小線長度的值取決於線驗證參數,並在第5.4節中進行說明。在檢測到最小長度的初始線段之后,我們只需瀏覽鏈的剩余像素並計算每個像素到當前擬合線的距離。

我們將像素添加到當前線,只要像素在當前線的一定距離內,例如1個像素的誤差。直觀地說,我們將繼續添加像素到當前線段,直到我們轉向一個角落和線的方向改變。

在這一點上,我們輸出當前線段。然后對鏈的剩余像素進行遞歸處理,以提取更多的線段。

4. Line validation

類似Desolneux et al. (2000)和LSD (Grompone von Gioi et al., 2008b, 2010),我們的驗證方法是基於亥姆霍茲原理 Helmholtz principle,其主要的狀態是一個感知有意義的結構,這種結構的期望(分組或完全形態)的偶然性必須很低(Desolneux et al., 2008)。這是一個“矛盾”的方法,其目標被檢測作為背景模型的極端值。如Desolneux et al.(2000),一個合適的背景模型是所有像素(梯度角)是獨立的。他們發現,最簡單的模型是高斯白噪聲。

      這里用NFANumber of False Alarms)來評判observe img中某個候選R小於contrario model中相同位置R里同性點(aligned  points)的數量的概率用如果NFA的值很大,認為在觀測圖像中aligned points比contrario model中aligned points小的概率很大,將其認為是common,平常的,背景中的一部分。如果NFA的值很小,認為目標是相對突出(rare)的,是一個合適的“直線”。
用亥姆霍茲原理進行驗證,Desolneux定義什么是所謂的“假警報的數”(Number of False Alarms,NFA)的線段如下(Desolneux et al.,2000):設A是這樣一段,長度為“n”有至少“k”點的方向與A的方向對齊在像素大小為N × N的圖像中。定義一個作為NFA:

其中代表潛在的線段數在N×N圖像中。這是因為線段具有兩個端點,並且每個端點可以位於像素中的任何一個點,因此總的個線段。概率“P”在二項分布(binomial tail的計算中,精確線的方向,其價值將在5節討論。

如果其 ,一個事件(a line segment in this case)稱為。  Desolneux et al. (2000)建議設置為1,相當於對每個圖像的一個虛假的檢測。根據這些定義,我們驗證提取的線段:對於線段的長度為n,我們計算沿線段每個像素的梯度角並且計算對齊像素 “k”的數量。然后我們計算NFA(n,k),如果為有效,接受線段,否則該線被拒絕。It is important to point out that we perform the gradient computation in the validation step over the original non-filtered image as required by the ‘‘a contrario’’ framework.我們也要注意線的驗證是EDLines可選的最后一步,如果認為不必要,可以省略的選項。我們觀察到線的驗證只拒絕短的線段。長的線從背景有明顯的顯現,並且永不被拒絕。因此,一個只使用長線(如立體匹配)的應用程序可以完全跳過亥姆霍茲原理的線路驗證,並使用一個基於某原理的線驗證方法可以快速測試,例如,選擇比某個閾值更長的線。這將進一步加快EDLines

 5. Internal parameters---內部參數

5.1. Gradient magnitude and direction computation---梯度幅度和方向計算

Recall from Section 2 that the first step in our Edge Drawing(ED) algorithm is the computation of the image gradient. To compute the gradient magnitude and the level line angle at pixel (x, y),
we follow Burns et al. (1986) and Desolneux et al. (2008), and LSD(Grompone von Gioi et al., 2010; LSD), and use a 2 × 2 mask asfollows:

是像素值,是梯度幅值,是水平線角度。

在Grompone von Gioi et al. (2010)指出,用這樣一個簡單的梯度算子的原因是為了減少計算梯度的依賴從而保持像素盡可能獨立;因為,像素獨立是亥姆霍茲原理的“矛盾”驗證所要求的。

5.2. Line validation parameters

Recall from Section 4,我們的線驗證是基於線段的長度和線上的對齊像素(aligned pixels)數。應用這個定義,我們需要定義什么'aligned”。我們借Desolneux et al. (2000)的定義:兩個點(或線段)P和Q具有相同的方向,即對齊,如果P的角度和Q的之間角度有pi /n度,則有1/n精度。Desolneux還指出,“in agreement with Pyschophysics and numerical experimentation, ‘n’ should not exceed 8”。Burns et al. (1986) and LSD (Grompone von Gioi et al.,2010) 也得出了同樣的結論。因此,如果它們的角度在pi/822.5°(實驗發現,角度公差22.5是一個較好的參數)我們假設兩個點(或一個點和一個線段)是對齊的。這對應於8個不同的角度取向精度為P = 1/8=0.125,用在NFA計算的概率。

5.3.Gradient threshold, anchor threshold and scan interval---梯度閾值,閾值和掃描間隔

[1]梯度閾值

在ED中梯度計算完后,像素的梯度值小於一個確定的閾值則被忽略在錨點的計算和連接中。這讓我們消除的像素絕對不能包含邊緣元素(edgels),因此沒有線段。Following the discussion in Grompone von Gioi et al. (2010),我們設置以便去掉角度誤差大於角度公差的點。兩個連續像素的最大的量化誤差等於2(在相鄰像素得到+ 1和-1誤差),和22.5°角度公差(參見5.2節),我們計算梯度閾值由以下公式在Grompone von Gioi et al.(2010)給出:

遍歷梯度圖並且消除梯度值小於閾值(=5.22)的像素,我們得到了我們所說的“邊緣地區”的圖像。這些像素可能位於一個邊緣。

[2]閾值和掃描間隔

       ED還有兩個參數:錨定閾值和掃描間隔(called Detail Ratio in Topal et al. (2010)).As explained in Section 2,閾值梯度群計算后,被稱為邊緣區域(圖2(b)),ED計算一組錨(圖2(c)),這是連接使用智能搜尋程序,得到最終的邊緣(圖2(d))Topal et al., 2010)。目前,ED進行錨計算通過非極大值抑制有個閾值,稱為錨閾值。而經典的非極大值抑制,如果在梯度方向上像素的梯度值大於或等於相鄰像素的值,考慮一個像素是一個邊緣像素的候選人,如果在梯度方向上它的梯度值大於其相鄰的鄰居 by an amount of Anchor Threshold,ED認為一個像素是錨。錨計算需要閾值的原因是選擇質量錨,因為這將有高質量的邊緣段。錨定閾值的最佳值沒有理論依據;其選擇純粹是經驗性的。因此,在對EDLines許多不同類型的圖像實驗,我們的結論是,錨閾值為3會有高質量的邊緣段。
       ED的另一個參數,掃描間隔,用於在不同的行/列間隔中選擇錨點。此參數的目標是調整錨的數量,從而,在最終邊緣圖中的細節量。用掃描間隔“k”,ED掃描每第 kth行/列為錨。因此,掃描間隔為1,ED掃描每行/列,即每一個像素;掃描間隔為4,ED掃描每第四行/列。當錨的數量減少時,最終邊界圖中的細節也減少了,反之亦然。如果我們想要檢測給定圖像中的所有線段,想要制作一個圖像中所有細節的邊緣地圖;因此,我們設定掃描間隔為1

5.4. Line fit parameters---直線擬合參數

      像素鏈擬合成線相關的兩個參數:(1)最小直線長度;(2)最大均方線擬合誤差。

       Recall from Section 4,一個線段的長度為“n”,“k”個對齊點,如果被驗證。對於最小長度線是有效的,k”必須等於“n”。所以,我們得到。提取的最小直線長度“n”從這個公式,我們得到:,其中p = 0.125。e.g.一個512×512圖像的最小直線長度是12像素。在直線擬合步驟開始時,使用該公式計算最小線長度,並且我們不會檢測到比最短有效線更短的線段。

       最大均方線擬合誤差是由EDLines直線擬合步驟使用的另一個參數(指的是表1的算法)。在擴展線段時,我們不斷地計算像素到當前擬合直線的距離。如果錯誤超過某個閾值,我們輸出當前的線段,並開始一個新的線段。在我們的算法中,在不同的圖像集上進行了大量的實驗,我們將此參數為1像素誤差

 

 6. Experiments

 

 

 

 

 

Originall ---full resolution:全分辨率;依次是:一半分辨率;四分之一分辨率。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM