SLAM十四講 後端(1)

2021-09-29 20:50:31 字數 2610 閱讀 3147

視覺slam主要分為視覺前端和優化後端。前端也稱為視覺里程計(vo),根據相鄰影象的資訊估計處粗略的相機運動,給夠後端提供較好的初始值。vo的實現方法,按是否需要提取特徵,可分為特徵點的前端和不提特徵點的直接法前端。

vo的主要問題是如何根據影象估計相機的運動:從影象選取有代表性的點(路標),在相機發生微小變化時會保持不變,接著從各個找到相同的點,進而討論相機位姿估計問題。其中,一種直觀的提取特徵方式就是在不同影象間辨認角點,確定其關係。

特徵點由關鍵點和描述子倆部分組成。其核心思想為:「提取關鍵點,計算描述子」。關鍵點是指該特徵點在影象裡的位置,有些具有朝向、大小等。描述子為向量,描述了該關鍵點周圍畫素的資訊,「外觀相似的特徵應有相似的描述子」。

特徵提取:sift,考慮了影象變換過程**現的光照等變化,但是計算量大,需要經過gpu加速後才能滿足實時要求。fast關鍵點,沒有描述子。orb特徵提取,改進了fast不具方向的問題,運用了brief描述子,較好的選擇。

orb特徵提取分為兩個步驟:

1.fast角點提取:找出角點,計算特徵點主方向,為後面的描述子增加了旋轉不變性。

2.得到描述子,進而對前一步提出特徵點的周圍影象區域進行描述。

a. 原始fast關鍵點:

主要檢測區域性畫素灰度變化明顯的地方,速度快。主要思想是:如果乙個畫素與領域畫素差別較大,則很有可能是角點。

檢測過程如下:

1.在影象中選取畫素p,假設它的亮度為 ipip 。

2.設定乙個閾值tt(比如,ipip 的30%30%)

3.以畫素為中心,選取半徑為3的圓上的16個畫素點。

4.假如圓上有連續的n個點的亮度大於ip+tip+t 或小於 ip−tip−t,那麼畫素pp可以被認為是特徵點(nn通常取12,fast-12,其他取值為9和11)

5.對每個畫素執行此操作。

優缺點:

雖然速度快,但是經常會出現角點「扎堆」,fast特徵點數量很大但是不確定,而我們往往希望提取固定數量的特徵點。

b. orb改進後的fast關鍵點(oriented fast):

在滿足上述方法的前提下,首先對角點進行harris響應值計算,然後選取前n個具有最大響應值的角點作為最終角點集合同時新增了尺度和旋轉的描述,

尺度不變性:由構建影象金字塔,並在金字塔的每一層上檢測角點來實現。

特徵的旋**由灰度質心法實現。

c. brief描述子(steer brief)

brief是一種二進位制描述子,有許多0,1組成,這裡的0,1編碼了關鍵點附近倆個畫素(比如p和q的大小)關係:如果p比q大,那麼取1,反之取0。pp和qq是按照某種概率分布隨機選點的比較。如果個我們選擇了128個這樣的p,qp,q,最 後就得到128維由0,1組成的向量。

計算兩個特徵點的描述子在向量空間上的漢明距離,距離相近,就可以認為他們是同樣的特徵點。

顧名思義,即確定當前看到路標和之前看到的路標之間的對應關係,簡而言之,就是希望不同影象之間的特徵之間的資料關聯問題通過影象與影象或影象與地圖之間的描述子進行準確匹配,可以為後續的姿態估計減輕負擔,但是誤匹配廣泛存在,是限制slam的一大瓶頸。

若:

影象影象

匹配方法:

暴力匹配:

但是!!當特徵點較多時,暴力匹配的運算量會很大,不符合slam的實時性要求。

快速近似最近鄰(flann)演算法更適合匹配數量多的情況。

假如從倆張中得到了一對配對好的特徵點,如果有若干對這樣的匹配點,那麼可以通過這些二維影象點的對應關係,恢復倆幀之間攝像機的運動。

步驟:1 根據匹配好的點的畫素位置求出e或者f

2 根據e或者f求出r,t

三角測量的用途是獲得地圖上點的深度z.

pnp是一種求解3d到2d點對運動的方法。描述了當知道n個3d空間點及其投影位置時,如何估計相機的位姿。pnp有很多種求解方法,但是需要掌握的是bundle ajustment方法(非線性優化)。簡單來說就是乙個最小二乘法問題,誤差項就是將3d點的投影位置與觀測位置作差,即乙個重投影誤差。詳細推到過程見書本。

至此,我們討論了orb特徵匹配(fast關鍵點和breif描述子),通過漢明距離來進行判斷匹配,然後討論了2d-2d(通過匹配畫素值求出本質矩陣,進而求出r和t,同時也可通過三角測量來進行深度估計,這個針對單目),3d-2d(通過直接線性變換或者pnp利用相機一座標係的點求出相機二座標系的點,然後相機二的點投影到相機然後進行ba優化)。

視覺SLAM十四講Debug

find package opencv required 失敗,找不到opencv3.1.0版本 find package opencv 3 required 成功eigen make unaligned array assert 31 解決辦法 vectorposes 修改為下面的語句 vecto...

視覺SLAM十四講第四講

主要目標 理解李群與李代數的概念,掌握 so 3 se 3 與對應李代數的表示方式。理解 bch 近似的意義。學會在李代數上的擾動模型。使用 sophus 對李代數進行運算。旋轉矩陣自身是帶有約束的 正交且行列式為 1 它們作為優化變數時,會引入額外的約束,使優化變得困難。通過李群 李代數間的轉換關...

SLAM十四講裡的問題

系統 ubuntu18.04 lts 問題 先編譯了g2o,後來意識到libsuitesparse沒裝,於是sudo apt get install libsuitesparse 但是在ch7裡的程式make過程中出錯 undefined reference to g2o csparse exten...