PnP问题的DLT解法
欢迎关注知乎@司南牧
已知:上一帧相机坐标系下的点的三维齐次坐标 Q Q Q,和,那 n n n个点在当前帧中的二维齐次坐标 q q q, 和相机内参矩阵 K K K。
待求解变量 :当前帧相对上一帧的位姿变换矩阵 [ R ∣ t ] [R|t] [R∣t] 。
约束方程:
K [ R ∣ t ] Q = λ q K[R|t]Q = \lambda q K[R∣t]Q=λq
我们记
[ R ∣ t ] = [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 ] [R|t]= \begin{bmatrix} a_{11}&a_{12}&a_{13}&a_{14}\\ a_{21}&a_{22}&a_{23}&a_{24}\\ a_{31}&a_{32}&a_{33}&a_{34} \end{bmatrix} [R∣t]=⎣⎡a11a21a31a12a22a32a13a23a33a14a24a34⎦⎤
DLT的思路就是把 a i j a_{ij} aij代入式 ( 1 ) (1) (1),然后求出 a i j a_{ij} aij就可以求出 [ R ∣ t ] [R|t] [R∣t]。可以看到]现在我们有12个未知数一对点只能提供两个方程,所以需要6对点。
目前已知相机内参矩阵
K = [ f x 0 c x 0 f y c y 0 0 1 ] K= \begin{bmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1 \end{bmatrix} K=⎣⎡fx000fy0cxcy1⎦⎤
还已知在上一帧相机坐标系下的三维齐次坐标
Q = [ x y z 1 ] Q=\begin{bmatrix}x\\y\\z\\ 1\end{bmatrix} Q=⎣⎢⎢⎡xyz1⎦⎥⎥⎤
还已知对应点在当前帧的二维坐标
q = [ u v 1 ] q=\begin{bmatrix}u\\v\\1\end{bmatrix} q=⎣⎡uv1⎦⎤
将式子 ( 2 ) , ( 3 ) , ( 4 ) , ( 5 ) (2),(3),(4),(5) (2),(3),(4),(5)代入到式 ( 1 ) (1) (1)中得到:
K [ R ∣ t ] Q = [ f x 0 c x 0 f y c y 0 0 1 ] [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 ] [ x y z 1 ] = λ [ u v 1 ] K[R|t]Q = \begin{bmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} a_{11}&a_{12}&a_{13}&a_{14}\\ a_{21}&a_{22}&a_{23}&a_{24}\\ a_{31}&a_{32}&a_{33}&a_{34} \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix} =\lambda \begin{bmatrix}u\\ v\\1\end{bmatrix} K[R∣t]Q=⎣⎡fx000fy0cxcy1⎦⎤⎣⎡a11a21a31a12a22a32a13a23a33a14a