視覺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...