PnP问题
- PnP为
Perspective-n-Point
的简称,是求解3D到2D点对的运动的方法:即给出n个3D空间点时,如何求解相机的位姿。 - 典型的PnP问题求解方式有很多种,例如P3P,
直接线性变换
(DLT),EPnP
(Efficient PnP), UPnP。还有非线性的Bundle Adjustment
.
DLT, 直接线性变换
高空间点
P
P
的齐次方程为,投影到特征点
x⃗ 1=(u1,v1,1)
x
→
1
=
(
u
1
,
v
1
,
1
)
,为求解
R
R
和
t⃗
t
→
,定义增广矩阵
[R|t⃗ ]
[
R
|
t
→
]
:
展开等式后可得到:
消去 s s 后可得到约束:
假设:
则有:
上式中 t⃗ t → 是待求的变量。易知一个特征点可提供两个关于 t⃗ t → 的约束,假若存在 N N 个特征点,则有如下方程成立:
观察到 t⃗ t → 有12个变量,通过方程形式可知最少可以通过6对匹配点即可得到 T T 的解。所以本方法又可称为直接线性变换法;当匹配点大于六对时,可以使用SVD等方法对超定方程求最小二乘解。
注意到DLT解出的T是由R和t两部分构成的,因而 R R 满足 R=SO(3) R = S O ( 3 ) ,所以对于T矩阵需要寻找一个最好的旋转矩阵,这可以由QR分解完成,相当于把结果从矩阵空间重影到 SE(3) S E ( 3 ) 流形上,转成旋转和平移两部分。
P3P问题
首先设标记符号定义如上图所示。其中A,B,C为世界坐标系。图中为3D到3D的对应点,所以是把PnP问题转化为ICP问题。
先利用三解形近似关系有以下三解形相似:
考虑余弦关系:
左右两边同时除以 OC2 O C 2 , 令 x=OA/OC x = O A / O C , y=OB/OC y = O B / O C 有:
再令 v=AB2/OC2 v = A B 2 / O C 2 , v=BC2/OC2OC2/AB2 v = B C 2 / O C 2 O C 2 / A B 2 , w=AC2/OC2OC2/AB2 w = A C 2 / O C 2 O C 2 / A B 2 ,有
从上式中先解出 v v ,代入第二和第三个式子,有
上式中由于 A,B,C A , B , C 已知, x,y x , y 未知。是一个二元二次方程,最多可得到4个解。需要一个验证点来获得最优解。
可以看到, 利用三角形的相似性质,PnP问题转为了一个3D到3D的位姿估计问题
。
P3P的问题:
1. 只利用三个点的信息,当给定的配对点多于3组时,难以利用更多的信息;
2. 如果数据点存在噪声时,或者匹配是误匹配的情况下,算法失败。
PnP在SLAM问题中的角色:进行相机位姿估计,然后构建最小二乘优化问题对估计值进行调整(Bundle Adjustment, BA)