視覺 SLAM 十四講 - 7 (下)
7.7 3D-2D: PnP
PnP(Perspective-n-Point)是求解 3D 到 2D 點對運動的方法。它描述了當我們知道 n 個 3D 空間點以及它們的投影位置時,如何估計相機所在的位姿。前面已經說了, 2D-2D 的對極幾何方法需要八個或八個以上的點對(以八點法為例),且存在著初始化、純旋轉和尺度的問題。然而,如果兩張影象中,其中一張特徵點的 3D 位置已知,那麼最少只需三個點對(需要至少一個額外點驗證結果)就可以估計相機運動。特徵點的 3D 位置可以由三角化,或者由 RGB-D 相機的深度圖確定。因此,在雙目或 RGB-D 的視覺里程計中,我們可以直接使用 PnP 估計相機運動。而在單目視覺里程計中,必須先進行初始化,然後才能使用 PnP。 3D-2D 方法不需要使用對極約束,又可以在很少的匹配點中獲得較好的運動估計,是最重要的一種姿態估計方法。
PnP 問題有很多種求解方法,例如用三對點估計位姿的 P3P[45],直接線性變換(DLT),EPnP(Efcient PnP) [46], UPnP[47] 等等)。此外,還能用非線性優化的方式,構建最小二乘問題並迭代求解,也就是萬金油式的 Bundle Adjustment。我們先來看 DLT,然後再講 Bundle Adjustment。
7.7.1 直接線性變換
考慮某個空間點 P,它的齊次座標為
。在影象
中,投影到特徵點
(以歸一化平面齊次座標表示)。此時相機的位姿
是未知的。與單應矩陣的求解類似,我們定義增廣矩陣
為一個 3 × 4 的矩陣,包含了旋轉與平移資訊。我們把它的展開形式列寫如下:
用最後一行把 s 消去,得到兩個約束:
為了簡化表示,定義
的行向量: