特征點法視覺里程計
特征點提取與匹配
經典 SLAM 模型中以位姿 路標( Landmark )來描述 SLAM 過程
• 路標是三維空間中固定不變的點,能夠在特定位姿下觀測到
• 數量充足,以實現良好的定位
• 較好的區分性,以實現數據關聯
在視覺 SLAM 中,可利用圖像特征點作為 SLAM 中的路標
特征點是圖像中具有代表性的部分;
具有可重復性,可區別性,高效,本地的特點
特征點的信息
• 位置、大小、方向、評分等 關鍵點
• 特征點周圍的圖像信息 描述子( Descriptor)
特征描述應該在光照、視角發生少量變化時仍能保持一致
例子:SIFT/SURF/ORB(見 OpenCV features2d 模塊)
典型的特征點
ORB 特征
關鍵點: Oriented FAST
描述: BRIEF
FAST
• 連續 N 個點的灰度有明顯差異
Oriented FAST
• 在 FAST 基礎上計算旋轉
描述子
BRIEF
• BRIEF 128 :在特征點附近的 128 次像素比較
• ORB :旋轉之后的 BRIEF 描述
BRIEF 是一種二進制描述,需要用漢明距離度量
特征匹配
目的: 通過描述子的差異判斷哪些特征為同一個點
暴力匹配:比較圖 1 中每個特征和圖 2 特征的距離
加速:快速最近鄰方法(FLANN)
2D-2D 對極幾何
特征匹配之后,得到了特征點之間的對應關系
• 如果只有兩個單目圖像,得到 2D 2D 間的關系——對極幾何
• 如果匹配的是幀和地圖,得到 3D 2D 間的關系——PnP
• 如果匹配的是 RGB D 圖,得到 3D 3D 間的關系——ICP
三角化與深度估計
求E使用八點法來求
從E計算R,t則使用奇異值分解
一共會生成四個可能的解,但只有一個深度為正。
SVD 過程中:取\(E = U diag (\frac{\delta_1+\delta_2}{2},\frac{\delta_1+\delta_2}{2},0)V^T\) 因為 E 的內在性質要求它的奇異值為\(\delta,\delta,0\);
• 最少可使用五個點計算 R,t ,稱為五點法, 但需要利用 E 的非線性性質,原理較復雜
八點法的討論
八點法可用於單目 SLAM 的初始化(初始化需要相機運動)
- 尺度不確定性:歸一化 t 或特征點的平均深度(相機運動)
- 純旋轉問題: t=0 時無法求解
- 點對數多於八對時:則使用最小二乘法進行求解
- 有外點時:使用RANSAC進行過濾。
從單應矩陣恢復R,t
- 八點法在特征點共面時會共面
- 設特征點位於某平面上:\(n^TR+d=0\)或\(-\frac{n^TP}{d}=1\).
小結
2D——2D 情況下,只知道圖像坐標之間的對應關系
• 當特征點在平面上時(例如俯視或仰視),使用 H 恢復 R,t
• 否則,使用 E 或 F 恢復 R,t
• t 沒有尺度
求得 R,t 后:
• 利用三角化計算特征點的 3D 位置(即深度)
• 實際中用於單目 SLAM 的初始化部分
3D-2D PnP
目的:已經 3D 點的空間位置和相機上的投影點,求相機的旋轉和平移(外參)
解法:代數的解法/優化的解法
1. 代數解法
a. DLT(direct Linear Trace)
設空間點\(P=(X,Y,Z,1)^T\),投影點為:\(x=(u,v,1)\) 歸一化坐標,則投影關系:\(sx=[R|t]p\)
展開:
• 將它看成一個關於 t 的線性方程,求解 t
• 注意最下一行為\(s=[t_9,t_{10},t_{11},t_{12}][X,Y,Z,1]^T\)
• 用它消掉前兩行中的 s ,則一個特征點提供兩個方程:
為求解 12 個未知數,Y一般需要 12/2=6 對點。(超定時求最小二乘解)
• DLT 將 R,t 看成獨立的未知量,所以在求出結果后,需要將 t 組成的矩陣投影回 SO(3) 3)(通常用 QR 分解實現)
• 此外,也可代入內參矩陣 K ,但 SLAM 中一般假設 K 已知,所以這里沒有代入。
為求解 12 個未知數,需要 12/2=6 對點。(超定時求最小二乘解)
b. P3P:利用三對點求相機內參
c. EPnP /UPnP/...
2. 優化解法: Bundle Adjustment
線性化和雅可比
對3D點求導:
4. 3D-3D ICP
ICP 也可以從非線性優化角度求解,但:
• 已知匹配時, ICP 問題存在唯一解或無窮多解的情況。在唯一解的情況下,只要能找到極小值解,那么這個 極小值就是全局最優值 。
• 所以正常情況下, SVD 結果和優化一樣,且優化很快收斂。
注:
• 在激光情況下,匹配點未知,將指定最近點為匹配點。此時問題非凸,極小值不一定為最小值。
• 利用非線性優化可以將 ICP 與 PnP 結合在一起求解。
小結
本章介紹了與特征點相關的視覺里程計部分算法,包括:
- 特征點是如何提取並匹配的;
- 如何通過2D-2D的特征點估計相機運動;
- 三角化原理;
- 3D-2D的PnP問題,線性解法與BA解法;
- 3D-3D的ICP問題,線性解法與BA解法。
5. 三角化與深度估計