EPnP在ORB-SLAM中主要用於Tracking線程中的重定位Relocalization模塊,需要通過當前關鍵幀Bow與候選幀匹配上的3D地圖點,迅速建立當前相機的初始姿態。
PnP問題解決了已知世界參考系下地圖點以及相機參考系下投影點位置時3D-2D相機位姿估計問題,不需要使用對極約束(存在初始化,純旋轉和尺度問題,且一般需要8對點),可以在較少的匹配點(最少3對點,P3P方法)中獲得較好的運動估計,是最重要的一種姿態估計方法。最后,如果知道世界參考系下的地圖點,同時知道相機參考系下的地圖點,可以通過ICP的方法去求解姿態。
這樣就構成了立體視覺中最重要的對極幾何,PnP和ICP三種最常用的姿態估計方法。
求解PnP問題目前主要有直接線性變換(DLT),P3P,EPnP,UPnP以及非線性優化方法。
DLT
直接構建一個12個未知數的[R|t]增廣矩陣(先不考慮旋轉矩陣的自由度只有3),取六個點對,去求解12個未知數(每一個3D點到歸一化平面的映射給出兩個約束),最后將[R|t]左側3*3矩陣塊進行QR分解,用一個旋轉矩陣去近似(將3*3矩陣空間投影到SE(3)流形上)。
P3P
P3P方法是通過3對3D/2D匹配點,求解出四種可能的姿態,在OpenCV calib3d模塊中有實現,但是對於相機遠離3D平面(low parallax)或者視角垂直於3D平面的情況下效果不佳,不知道最近有沒有更新過。論文Complete Solution Classification for the Perspective-Three-Point Problem中提到了一種改進的方法,可以消除這種退化的情況。
將世界坐標系下的ABC三點和圖像坐標系下的abc三點匹配,其中AB,BC,AC的長度已知,<a,b>,<b,c>,<a,c>也是已知,通過余弦定理可以求出A,B,C在相機參考系中的坐標,然后使用類似ICP的坐標系對齊,就可以求得當前相機薇姿。
通過余弦定理構建二元二次方程組【2】可以求解出OA,OB,OC之間的長度比例,從而確定世界坐標系下的相機位姿。可以想象一下為什么會出現四個解,在空間中的位置是什么樣的,以及為什么在遠離3D點平面或者視角垂直3D點平面時,會出現退化情況。
EPnP
需要4對不共面的(對於共面的情況只需要3對)3D-2D匹配點,是目前最有效的PnP求解方法。
The aim of the Perspective-n-Point problem—PnP in short—is to determine the position and orientation of a camera given its intrinsic parameters and a set of n correspondences between 3D points and their 2D projections. It has many applications in Computer Vision, Robotics, Augmented Re- ality and has receivedmuch attention in both the Photogrammetry and Computer Vision communities. In particular, applications such as feature point-based camera tracking require dealing with hundreds of noisy feature points in real-time, which requires computationally efficient methods.
空間中任意3D點的坐標可以用4個不共面的3D點坐標的權重表示
通常選取世界坐標下的四個控制點坐標為Cw=[0,0,0,1]T, [1,0,0,1]T,[0,1,0,1]T,[0,0,1,1]T;通過n個3D點在相機平面的投影關系,以及與這四個控制點的權重關系,構建一個12*12方陣,求得其零空間特征向量,可以得到虛擬控制點的相機平面坐標,然后使用POSIT算法即可求出相機位姿。
通常在用EPnP求得四對點下的封閉解后,可以將該解作為非線性優化的初值,優化提高精度。
主要參考:
1. EPnP:An Accurate O(n) Solution to the PnP problem
2. 高翔,視覺SLAM十四講