PnP是一類問題的統稱,是指通過多對點的3D位置及2D投影座標,來估計相機位姿R、t。
場景一:視覺slam中在初始化後可以知道空間中一些點在世界座標系下的座標,在下一幀圖像進行特徵點匹配後,利用這些特徵點的3D座標及2D像素座標,PnP可以計算出當前幀圖像的R、t,即在世界座標系下的R、t。
場景二:輸入匹配特徵點在上一幀的2D像素座標、在上一幀相機座標系下的3D座標、在當前幀的2D像素座標,求兩幀之間的位姿R、t。
PnP是一大類問題,根據問題不同解法有P3P、DLS、EPnP、UPnP等。
1 P3P
對於場景一問題可以用P3P問題求解,需要三個點即可完成。需要條件:三個點的世界座標、當前幀下的2D像素座標。求解思路是首先求解三個點在相機座標系下的座標,再通過世界座標系到像素座標系的轉換公式計算相機在世界座標系下的R、t。
場景如上圖所示,三個空間點ABC、圖像投影點abc、相機光心O。計算過程如下:
首先根據餘弦定理可得:
等式兩邊同時除以,並令得到:
令得到:
方程中已知量爲,未知量爲x,y,兩個未知量將上述方程化簡得到:
求解cos<a,b>:
得到角度爲:
同理可以得到:cos<a,c>,cos<b,c>
2 DLS(直接線性變換)
設空間中某點P的世界座標爲,在圖像中的2D座標爲,現在求解R、t。
首先定義曾廣矩陣,由世界座標系轉像素座標系有:
消去s得到:
令等式右邊爲0得到:
每個特徵點提供兩個方程,求解需要6個點。