PnP问题求解

  • Post author:
  • Post category:其他



PnP

算法是指已知3D点及其在相机上的投影,求相机姿态的问题。

投影方程可以表示为:





λ

[

u

v

1

]

=

K

[

R

t

]

[

x

y

z

1

]

\lambda \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K \begin{bmatrix} R & t \end{bmatrix}\begin{bmatrix} x \\ y \\ z\\1 \end{bmatrix}






λ




















































u








v








1



























































=








K






[













R





























t




















]








































































x








y








z








1
















































































这里的

K

为相机内参矩阵,是已知的。我们要做的就是从

n

对这样的对应关系中恢复出相机姿态。在SLAM应用中,系统初始化后,后面的跟踪就是基于求解

PnP

问题。

1、求解

PnP

问题的

DLT

解法

首先,将



[

R

t

]

\begin{bmatrix} R & t \end{bmatrix}








[













R





























t




















]







看作是一个包含12个未知量的

3x4

矩阵,而将投影方程消去尺度因子



λ

\lambda






λ





后,可以获得两个方程,在联立不少于6个的投影方程后,即可求出12个未知量的最小二乘解,最后恢复出



[

R

t

]

\begin{bmatrix} R & t \end{bmatrix}








[













R





























t




















]







2、求解

PnP

问题的

EPnP

解法

它的思路是先将世界坐标系下的三维点转换到相机坐标系下,再用

icp

的方式得到相机位姿。但是,如何在位姿未知的情况下转换?这里引入了控制点的概念,所有的三维点都可以由四个控制点表示,在世界坐标系和相机坐标系下只有基底的变化,系数是相同的。而这就要求获得控制点在相机坐标系下的坐标,这里同样利用的是投影方程联立求解。

以上具体推到过程参考:


https://zhuanlan.zhihu.com/p/58648937



https://zhuanlan.zhihu.com/p/59070440