在orb-slam和kintinuous中都使用到了一種閉環檢測演算法dbow2,下面結合**對該演算法做詳細介紹。
dbow2演算法主要用於重定位或者稱作閉環檢測,英文叫loop closure或者place recognition。dbow2演算法中使用的特徵點是orb特徵,這是一種結合了fast特徵和brief描述子的特徵(值得注意的是orb-slam中使用的是orb結合dbow2回環檢測,kintinuous使用的是surf特徵結合dbow回環檢測)。作者將特徵點的描述子(description)空間離散化,構建了詞樹(vocabulary tree)。然後用這種樹為幾何驗證(geometric verification)階段快速尋找點的對應。
本文下面將分為三個部分對該演算法進行介紹:
1.二值特徵(binary feature)
orb特徵是一種結合了fast特徵和brief描述的一種特徵,fast關鍵點是一種角點,它通過在乙個半徑為3的bresenham圓中比較一些畫素的灰度來獲得,然後在每乙個fast特徵點的周圍都選取乙個方形的patch計算brief描述子。brief描述子是用乙個二值向量來表示的,向量中的每一位都是patch中灰度值進行比較的結果,patch大小和向量的長度都是事先給定好的,可以根據實際需要選擇合適的值。
上圖中的lb表示向量的長度,ai和bi表示在patch中隨機選取的兩個座標,這兩個座標的選取是服從正態分佈的。
使用brief描述子最主要的優勢是由於它的描述子是二值的,因此可以利用異或(xor)快速計算和比較。
2.影象資料的建立(image database)
image database由乙個多級的詞包(hierarchical bag of words)(實際上是一棵詞樹vocabulary tree)以及直接索引(direct index)和逆向索引(inverse index)構成。下面上圖:
bag-of-words使用視覺詞表(visual vocabulary)將影象轉化為乙個稀疏的數值向量,visual vocabulary可以離線生成,將訓練集影象(training)的描述空間(descriptor space)離散成w個視覺詞彙(visual words)。
建立這個vocabulary tree可以分為三步:
* 從訓練影象中離線提取desciptor
* 對提取到的descriptors進行聚類,聚類方法是k-means生成種子後的k-medians聚類,得到了vocabulary tree的第一層,共k個節點
* 接下來的每一層都進行與第一步相同的操作,最終得到w個葉節點。
每乙個word都會根據其在訓練集中的關聯性得到乙個權重值。但是那些出現頻率非常高的words,顯然它們的辨識度很低,因此會相應降低它們的權重。加權方法使用的是tf-idf(term frequency - inverse document frequency)。
順便說一下這tf-idf,這是一種標準的計算權重的方法,它的計算方法為t = (word在當前文件出現的次數/當前文件的總詞數)*log(整個資料集中的文件數/資料集中出現該word的文件數)
。應用在視覺領域中,將文件換成影象即可。
每一幅影象都被轉換成乙個詞包向量v(bag-of-words vector),其特徵點的描述子被從根節點到葉節點以最小化hamming距離的方式傳遞下去。
兩個bag-of-words相似性可以用score來表示,score的計算方式如下圖:
伴隨著bag-of-words,還會維持乙個inverse index,它為每乙個word儲存乙個影象列表,表明它都在哪些影象中出現過。這方便了我們對image database的訪問,只比較那些有相同word的影象即可。除此之外,這篇文章還使用了direct index,它為每一幅影象的特徵都儲存了與該特徵相關聯的第l層的節點(l的值預先給出)。這會為後面的geometric verification帶來好處。
3.閉環檢測演算法
a.database的訪問
根據上文的相似度score,計算出乙個歸一化相似度score。
從式中可以看出,使用當前幀與前一幀的相似度作為期望score,當兩幀之間的相似度非常小的時候,會錯誤地得到乙個很高的值。為了排除這種影響,作者為其設定了閾值,也就是說當前後兩幀相差很大時不做回環檢測。
b.群組匹配(match grouping)
為了避免短時間內的多幀影象訪問database,要將一定時間間隔的影象劃為一組(island),將當前幀影象與這**像相似度的和作為群組相似度,選擇相似度最高的組作為匹配,然後進行後續的暫時一致性驗證(temporal consistency)。
這樣的island也有助於正確的匹配,因為一旦當前幀與某一幀形成閉環,那麼必然與其前後幀都有很高的相似度,這樣就會形成乙個很長的island,群組相似度也會有助於匹配長island。
c.暫時一致性(temporal consistency)
如果某幀影象匹配到了乙個組,那麼一定和這個組前k個組相似度也很高,因為這k+1個組是相互覆蓋的。
d.幾何驗證(geometric verification)
驗證幾何一致性的關鍵在於利用ransac,通過在兩幀影象上的12個點對應,找到乙個基本矩陣。
建立點對應就需要尋找特徵點的最近鄰點,這時候就需要用到我們前面提到的direct index。要查詢影象上的乙個特徵點,只需要在l層上該特徵點所對應節點上尋找即可。l的值需要預先設定,l值設為零,那麼就只能去葉節點找,找到的對應點很少。如果l值設定為根節點,相當於在所有節點中尋找,沒有做任何優化。
直通BAT面試演算法精講課2
對於乙個int陣列,請編寫乙個氣泡排序演算法,對陣列元素排序。給定乙個int陣列a及陣列的大小n,請返回排序後的陣列。測試樣例 1,2,3,5,2,3 6 1,2,2,3,3,5 冒泡 依次比較相鄰,大的放後面。class bubblesort return a class bubblesort r...
Prim演算法精講
對prim演算法有了新的理解,現在此總結一下。我們現在主要講的是實現部分。我們的原點是0,那麼現在u集合中只有0,v u中和0相鄰接的頂點中,最小輕邊是0和2之間的那條,所以選擇2,現在u為0和2,之後我們繼續尋找,通過窮舉法我們找到了5,然後找到了3,然後找到了1,然後找到了4,最後程式結束。按照...
演算法精解概述
原創 演算法精解概述 摘要 本文對 演算法精解 做了簡單描述,對其中的約束和核心思想簡單介紹了一下。演算法概述 是一本比較基礎的講解演算法和資料結構的書,英文名mastering algorithms with c。對於每種資料結構和演算法,裡面都有完整的c語言實現,並沒有單純講解演算法書籍的空洞感...