【论文阅读】An efficient and robust line segment matching approach based on LBD descriptor
一、線段的提取和描述
在LBD的論文中,線段的提取依然是使用EDLine算法,但是在此基礎上,增加了一個高斯金字塔。論文使用了一個沒有內層的高斯金字塔,一般是五層,通過高斯模糊,逐層處理,之后對每一層使用EDLine算法提取線,提取出來的線利用邊上像素的梯度來確定一個方向,邊上所有像素的平均梯度所指向的方向,就是線的左側指向右側。
之后,將高斯金字塔中不同層的線整合到一起。所謂整合到一起,就是將同一條線在不同層上的表現整合在一起,為了方便敘述,將高斯金字塔最底層的一條線在其他層提取到的結果稱為子線,那么整合這一步,實際上就是將線和子線放在一起,因為提取的時候是在高斯金字塔上不同層進行的,所以相當于要將子線對齊到線上。
從代碼運行的結果來看,上面這張圖實際上是理想情況,我在運行代碼的時候,將每一層的子線數目都打印了一下,到高斯金字塔第五層的時候,由于進行了五次高斯模糊,所以圖片的清晰程度已經很低了,提取出的線的數目大概是第一層的五分之一,也就是說,如果第一層有100條,第五層就只有20條,那么按照上圖所示,在匹配完全成功的情況下,最多也就只有20個LineVec的大小為5,如果子線沒有匹配的情況,LineVec的數目根本就沒多少。
為了方便敘述,我們將子線分配的過程稱為層間匹配,在層間匹配的過程中,代碼的寫法也比較難理解,假設一條線l在第一層為l1在第二層為l2,代碼的寫法上認為,如果這兩線不匹配,那就是完全不相干的兩條線,就是說如果因為EDLine算法的計算誤差,導致l1和l2的偏差有些大,超過了匹配的閾值,這兩條線完全就認為是兩條線,會被分配獨自的一個ID進行后續的處理。
這一點根據和師兄的討論,覺得用特征增強的理論去解釋更好理解,使用高斯金字塔,本身是一個描述遠距離觀察的過程,增加層數,相當于增加了觀察者到圖像的距離,提取出來的特征一方面看屬于金字塔的不同層,但實際上還是圖像的一個特征,所以,即使不匹配,也依然是圖像的特征的一部分。
其實這部分按照理想的結果來看也是可以的,回到論文,完成高斯金字塔的構建和層間匹配之后,就需要計算LBD描述子,論文使用的描述子是基于條帶的。所謂條帶,實際上就是線周圍的一個區域,如下圖所示:
圖像最中間的橫向黑線就是直線本體,可以看見直線的兩側一共劃分出了五個條帶,用m表示劃分條帶的數目,用w表示每個條帶的寬,根據這種劃分方法,每個條帶的長度其實都是一樣的。規定直線的方向為dL,而與直線垂直且與直線方向夾角為順時針90°的方向為d⊥,將線的中點作為坐標系的原點,這樣就構建出了一個坐標系。
在這樣的規定下,計算每個像素點的梯度,并將梯度按照坐標系的兩個方向進行拆分:
除了梯度的拆分處理,為了增強描述子的魯棒性,LBD還引入了兩個距離有關的權值。一個是全局的權值系數fgi:
其中di表示的是到整個鄰域中心的距離,而бg是一個描述條帶寬度和數量的值:
對于這個全局的權值系數,只要條帶的數目和寬度確定了,計算權值的時候就只有di這一項,根據指數函數的圖像可以看出,距離中心越近,di越小,從而權值也就越大,對應圖中fg的那條曲線。
另一個權值是一個局部的權值,和全局權值計算類似:
其中dk表示到條帶中心的距離,而бl就是條帶的寬度,同理在一個條帶中,距離中心越近權值也就越大。
引入這兩個權值,實際上就是為了降低原理直線中心位置的重要性,同時一定程度上降低垂直方向上變化的敏感度,減小條帶之間變化。
有了權值和梯度,就可以開始描述子的計算。在計算描述子的時候,要考慮到相鄰的條帶,比如我們要計算Bj的描述子,那么我們就需要Bj
-1和Bj+1一起納入計算,當然,對于第一個和最后一個條帶來說,就只需要計算單側。
LBD描述子的結構為:
實際上就是許多個條帶的描述子的堆疊,而計算每個條帶的描述子,也就是BD的時候,需要使用到BDM這個矩陣:
其中,一列表示條帶的一行,j表示是從上到下第幾個條帶,當j為1或m的時候,n為2w,否則n為3w。對于矩陣中的一列,四個值的計算為:
其中λ為兩個權值在當前位置的乘積,計算每一行像素梯度的投影,根據投影值將對應的量做加法,一行的值求和,就可以得到當前這一行的描述信息v,也就是BDMj中的一列,將所有列都計算出來,就得到了BDMj矩陣。現在對于一個這樣的矩陣,它描述的實際上是一個條帶的信息,我們要計算這個矩陣的每一列的均值Mj和標準差Sj,之后將均值和標準差堆疊到一起,也就得到了LBD描述子:
下面再重復一下LBD的描述子的計算過程,在一開始條帶寬度和數目確定的時候,權值計算其實就已經可以計算了,遍歷每個條帶的鄰域的每一行,計算梯度并投影,結合權值求出BDM矩陣,這樣的一個矩陣描述了一個條帶,計算均值向量和標準差向量,將每個條帶的均值向量和標準差向量堆疊在一起,最后就可以得到一條線的LBD描述子。
二、利用LBD描述子進行匹配
在這篇論文中,還提出了一種匹配的方法,一般的思路是直接計算描述子距離然后找最近的,之前試過用LBD描述子直接計算描述子距離匹配,但是效果奇差無比,論文中提出的匹配方法,不僅考慮了描述子距離,還加上了線與線之間的幾何關系,從而讓匹配的結果更加準確。
現在我們已經得到了一條線的描述子,按照論文中的流程,在進行匹配之前,需要進行兩次的篩選。
第一個篩選是利用角度旋轉和長度變換來篩選。首先,用旋轉直方圖的方法來計算一個全局旋轉角,所謂旋轉直方圖,就是一個統計圖像中線的方向的統計圖,分別統計兩張圖的旋轉直方圖,之后按照下面的公式確定全局旋轉角:
為了增加全局旋轉角的準確性,這里還將長度納入了統計,也就是在一個角度上的線的長度,在旋轉前后應該也要符合一定的要求。當長度和旋轉直方圖的限制都符合要求,則認為計算出了全局旋轉角,那么對于一對要匹配的線,旋轉的角度必須要滿足全局旋轉角,只有這樣則認為通過了第一步篩選。
第二個篩選就是描述子的距離,不過計算會稍微有些區別,對于兩條線,這里計算的相似度,是比較兩條線所有的子線,找出子線描述子距離的最小值,如果這個值滿足閾值,就認為通過了第二個篩選。
通過了這兩個篩選,也就是旋轉的變化符合全局旋轉角、長度變化小于閾值且描述子距離足夠小的線對,就可以認為是候選線對,當然現在的候選線對是存在誤匹配的,所以論文又在這一步之后,加了一個利用位置關系的篩選。
在位置關系的篩選中,我們要做的是取出兩對匹配線對,也就是四條線,兩張圖上各兩張,拿一張圖來示例:
對于同一張圖上的一條線,計算下面的兩個量:
可以看出,I描述的就是線的起點終點與兩條線角點的關系,而P描述的是線的起點終點到另一條線的投影距離的關系。在此基礎上,兩組線對的相似度關系可以定義為:
其中的量為:
可以看出,這一步是利用兩對候選線對之間的幾何關系,計算出了一個相似度,因為如果線對是匹配的,那么兩對線對的相對位置關系,在兩張圖中應該是存在一定的相似度的,利用這個相似度,就可以再一次進行篩選。
將所有線對的相似度計算完成后,可以構成一個矩陣,而且是一個實對稱矩陣,這里我們記作矩陣A。那么現在問題就變成了從中選擇可信度最高的線對,按照論文的說法,現在用一個向量x來表示線對的選擇與不選,最大化可信度也就變成了尋找一個向量x,讓匹配關系限制滿足的情況下,最大化矩陣A的二次型:
說實話這里我也有些拿不準,根據矩陣A元素的計算規則,里面所有元素都是正數,那么如果要最大化二次型,直接讓x為一個全1向量不就好了,想了很久,也許這個思路錯在沒有考慮匹配關系的限制,因為矩陣A是候選線對的相似度,也就是說可能存在一對多的現象,讓x全為1,表示所有的候選線對都認為是正確的,此時就會出現一對多的誤匹配,自然是不行的。
所以,在這個背景下,計算向量x是一個很麻煩的事情,論文參考了另一個人的論文,認為我們要找的向量,就是矩陣A的主特征向量,即最大的特征值對應的特征向量,所以我們要做的就是直接調用求主特征向量的函數,然后根據這個特征向量,去找出哪些線對是正確的。
算法的完整步驟為:
從兩張圖中篩選出線的向量并計算描述子,之后計算全局旋轉角,根據兩步篩選得到候選線對,利用幾何關系計算相似度并組合出矩陣A,這里著重解釋一下后面的步驟,得到矩陣A之后,通過ARPACK計算特征向量,后面初始化一個集合LM,一開始為空集,用來存儲正確匹配的線對,根據主特征向量,找出其中的最大值,如果這個最大值不為0,就將對應位置的線對加入LM,并在候選線對中刪除這一對,這里對應的是第8步,然后在第9步,又對候選線對做了篩選,如果出現沖突就從候選線對中刪除沖突線對,這一步應該是為了滿足一對一匹配的要求,防止出現一對多的誤匹配。最后篩選得到的集合LM,就是最終匹配的結果。
總結
以上是生活随笔為你收集整理的【论文阅读】An efficient and robust line segment matching approach based on LBD descriptor的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小程序源码:2022强大的修复版趣味心理
- 下一篇: 事业单位和公务员的面试方式有什么区别?