SLAM前端:PnP(一)DLS、P3P

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。

 

SLAM前端:PnP(一)DLS、P3P_第1张图片

 

场景如上图所示,三个空间点ABC、图像投影点abc、相机光心O。计算过程如下:

首先根据余弦定理可得:

                                                \\ OA^2 + OB ^2-2OA\cdot OB\cdot cos<a,b> = AB^2\\ OB^2 + OC ^2-2OB\cdot OC\cdot cos<b,c> = BC^2\\ OA^2 + OC ^2-2OA\cdot OC\cdot cos<a,c> = AC^2\\

等式两边同时除以OC^2,并令x = \frac{OA}{OC},y=\frac{OB}{OC}得到:

                                                           SLAM前端:PnP(一)DLS、P3P_第2张图片

u = \frac{AB^2}{OC^2},v = \frac{BC^2}{AB^2},w = \frac{AC^2}{AB^2}得到:

                                                             \\ x^2 + y^2-2xycos<a,b>=u\\ y^2 + 1-2ycos<c,b>=uv\\x^2 + 1-2xcos<a,c>=uw \\

方程中已知量为u,v,w,cos<a,b>,cos<a,c>,cos<b,c>,未知量为x,y,两个未知量将上述方程化简得到:

求解cos:

SLAM前端:PnP(一)DLS、P3P_第3张图片

 

 

得到角度为:

同理可以得到:cos,cos

2 DLS(直接线性变换)

设空间中某点P的世界坐标为[X,Y,Z,1],在图像I_1中的2D坐标为[u,v,1],现在求解R、t。

首先定义曾广矩阵[R|t],由世界坐标系转像素坐标系有:

                                                          s $\left[ \begin{matrix} u \\ v \\ 1 \end{matrix} \right] $= $\left[ \begin{matrix} t_1 & t_2 &t_3 &t_4\\ t_5 & t_6 &t_7&t_8\\ t_9 & t_{10} & t_{11}&t_{12} \end{matrix} \right] $\cdot $\left[ \begin{matrix} X \\ Y \\ Z \\1 \end{matrix} \right] $

消去s得到:

                                  u = \frac{t_1 X + t_2Y+t_3Z+t_4}{t_9X+t_{10}Y+t_{11}Z+t_{12}},v = \frac{t_5 X + t_6Y+t_7Z+t_8}{t_9X+t_{10}Y+t_{11}Z+t_{12}}

令等式右边为0得到:

                                                $\\$ [t_1 t_2 t_3 t_4]\left[ \begin{matrix} X \\ Y \\ Z \\1 \end{matrix} \right] -[t_9 t_{10} t_{11} t_{12}]\left[ \begin{matrix} X \\ Y \\ Z \\1 \end{matrix} \right]\cdot u =0 $\\$ $\\$[t_5 t_6 t_7 t_8]\left[ \begin{matrix} X \\ Y \\ Z \\1 \end{matrix} \right] - [t_9 t_{10} t_{11} t_{12}]$\left[ \begin{matrix} X \\ Y \\ Z \\1 \end{matrix} \right]\cdot v =0

每个特征点提供两个方程,求解t_1-t_{12}需要6个点。

 

 

你可能感兴趣的:(SLAM)