論文閱讀——橢圓檢測演算法 2018 使用梯度分析利用錯誤檢測控制的精確橢圓檢測
本文是2018年《Pattern Recognition》期刊(2區SCI)上的一篇文章,是最新的橢圓檢測,論文題目為《Accurate detection of ellipses with false detection control at video rates using a gradient analysis》,從標題來看,梯度分析是常用的,其中比較吸引我的地方是false detection control,在閱讀的時候我會詳細進行分析。Prasad文章對我在初期研究橢圓檢測時提供了巨大的幫助。
〇 摘要部分
視訊序列下的橢圓檢測是一個開放的挑戰。作者提供的額方法採用弧段選擇、智慧組合、梯度資訊的重複利用過來顯著的在不影響檢測效能的前提下減少計算複雜度。因此使用了較少計算量的幾何性質,比如圓弧平滑度、曲線的相對位置和橢圓中心的置信區域。作者進行了引數敏感度分析,模擬資料集分析,實際資料集測試,效果良好
一 介紹部分
橢圓檢測應用:工業檢驗、醫學診斷、交通標誌識別、安全性、人臉識別、機器人平臺的目標跟蹤。
橢圓檢測有三種問題需要解決:遮擋橢圓、不完全橢圓、重疊橢圓。提高精度就會浪費大量時間,提高時間往往導致精度下降,本文在精度和時間上均有提升。
1.1 相關工作2
基於霍夫變換(HT) HT和其他幾何方法組合的混合方法可以克服HT方法的缺點。例如,Cakir等人基於特徵模型的HT變換提高了檢測精度。Chen等人使得HT和邊緣分割檢測的優點結合在一起,使其可以在工業場景上得以實現。
基於邊緣連線的(論文中說是邊緣分割檢測方法,方法上是一樣的)
還有很多文章提出了代數函式和幾何特徵用於橢圓弧段的選擇來提升橢圓檢測精度。比如,弧段的對稱性用於分解引數空間,減少聚類引數。距離度量用於實現一組弧段的配準。Mulleti等人依賴finite-rate-of-innovation signals的取樣結構來從部分資料估計橢圓的引數。Chang Liu等人使用給定的相機內參矩陣擬合一個旋轉曲面的橫截面的橢圓投影。Jia等人使用一個投影不變運算元來顯著檢出不希望候選並挑選橢圓。
1.2 提出的方法
弧段提取與分類。目的是提取出橢圓弧段,拋除無用資訊。
橢圓檢測。 每個畫素的梯度資訊用於將橢圓候選弧段分類到4個象限3。然後利用一個事實,同一個橢圓的弧段具有相同的橢圓中心。作者定義了兩個幾何約束,來識別可能屬於同一個橢圓的弧段幾何。我們使用mean-shift來找到這樣一組弧段的中心,並在分解的引數空間中獲得其他引數4。基於投票或者累計的方法會在噪聲的情況下有損失,所以mean-shift方法可以緩解這個問題。
橢圓驗證。橢圓驗證的目的是為了剔除虛假橢圓。作者提出了一個幾何的控制策略。
1.3 方法的創新性
作者的演算法在上述的幾個步驟都有自己獨特的創新點,對提升結果起到了良好的作用。而且提出演算法的新穎特徵是以最少的計算來實現當前任務,有效的提升了檢測速度。關於作者給出的創新性,我將完全的翻譯出來放在下面。
1 本文提出了一種結合弧段提取與弧段組合的橢圓檢測方法。弧段檢測設計重要的弧段分割步驟,我們在2,3中給出的創新點有助於在低的計算消耗上進行精確的弧段檢測。使用幾何約束進行弧段分組,在4,5點中有更多的討論,保證橢圓檢測的有效性並優化計算損耗。
2 在平滑弧段檢測(smooth arc detection)的步驟中,作者提出了一種新的方法來識別精確的分裂點(突然變化的部分),來更好的從曲線中分割出平滑的可能屬於橢圓的弧段。首先在大範圍進行粗略的突變搜尋,然後用更細的範圍確定這些點。
3 作者僅僅使用一個不等式與角度向量來確認分裂點,相比於其他方法所使用的不等式。這提供了計算速度快的優點5。
4 包圍盒包圍一個弧所形成的向量方向用於精確的確定一個弧的凹凸性,在後面可以進行弧段分類。這加快的弧段組合的效率。
5 我們使用包圍一個弧段的包圍盒周長的一半和半軸長度的比率還衡量橢圓的完整性,來提高檢測精度,這比其他更復雜的測量橢圓完整性的方法要快得多。
6 提出了一種基於由一個數學模型表達的橢圓的內在幾何屬性的錯誤檢測控制的方法來決定檢測結果,這種方法有效的避免了錯誤檢測。
二 弧段的分割與分類
在這裡我先列出文章出現的引數,免得後期閱讀麻煩。
符號 | 描述 |
---|---|
最小區域包圍盒,是一個包圍盒,資料型別是RotateRect(openCV) | |
包圍盒長邊與短邊的比值閾值 | |
包圍盒的面積閾值 | |
曲率閾值,用於識別turning corner | |
距離約束閾值 | |
橢圓幾何中心確定閾值 |
2.1 預處理階段
使用自適應Canny邊緣檢測來得到邊緣圖。每個邊緣點的表達形式為:,其中就是邊緣點座標,為每個邊緣點對應的梯度方向。
隨後,為了獲得沒有分支的邊緣線,曲線按照邊緣方向被分為兩類。由於影象的離散性,無法計算出畫素處曲線的精確梯度方向。但是,作者感興趣的是梯度的大致方向而非精確方向,因此使用一個正負性來表示方向。在論文中,如果方向落在1,3象限則認為是正方向,在2,4象限則為負方向。對於那些垂直或水平的方向的畫素點,就直接拋棄。
在同一方向上的兩個連續邊緣點的8連通性用於提取連通邊緣曲線。對於那些短邊緣線,直接剔除。然後計算出曲線的包圍盒,如果包圍盒長邊與短邊的比值大於設定閾值,則認為這個曲線近似為直線段或其直徑非常大,表明這個橢圓的中心點不在影象中。如果這個包圍盒的面積小於閾值,說明這個直線段非常小,不足以提供有效的資訊。這些情況的曲線會被拋棄。剩下的這些曲線會被認為是可能構成橢圓的曲線候選。
這個小節的目的就是提取出候選曲線,這些曲線可能是橢圓的一部分。
2.2 弧段提取
橢圓的邊緣段是平滑且連續的,這是常識。在這個論文中,曲率的變化量和曲率的方向變化被稱為轉角和拐點。
首先使用一系列直線段對曲線進行逼近,目的就是方便估計曲線的曲率資訊。作者提出了一種弧段分割演算法。一個弧段用直線段逼近後,得到一組直線段,表示之間的夾角,也就是直線段方向的變化角度。如果很小,表示這個點的曲率很小。如果很大,則說明點附近曲率變化大,被認為是一個turning corner。如果,則是一個turning corner。
橢圓的弧段變化方向應該具有相同的符號,如果符號不同,則這裡存在拐點,作者使用來識別拐點,其實這個公式就是三角不等式,如果這個式子兩邊相等,則說明是同一個方向,否則就說明方向不同,存在拐點。
下圖A表示的就是角度變化過大的點,圖B表示是方向不同的拐點,在這兩個點都將會將一個曲線分割為兩個平滑曲線。
在進行弧段分割時候,會有一些突變點導致弧段一分為二,並且產生小的弧段,論文的處理方式沒看明白,給出的演算法流程,個別符號有點混淆,我等原始碼下來之後更新這個突變點的處理問題。
2.3 基於凹凸性的弧段分類
前面,作者根據梯度方向將弧段分為正負兩個方向,在這裡又根據弧段的凹凸性得到新的兩個方向。然後將每個平滑弧段分類到4個象限中。分類方法很簡單,這裡不列公式說明。
下圖表示的是分類流程,原圖檢測到邊緣之後,根據方向和弧段提取得到一組平滑曲線(圖C),然後根據曲線的凹凸性,再次進行分類得到圖(D)
三 橢圓檢測
我們從分佈在4個象限的弧中選擇兩個弧段