PNP问题学习笔记

整理自浙江大学谭平老师的课堂内容

问题引出

PNP问题是指在已知相机内参的前提下,通过N对匹配的图像坐标以及它们的世界坐标计算相机的位姿。是一个3D-2D问题。

关于n的探讨

图像上一个点会对相机位姿产生两个约束,如下图所示,点 x i x_i xi的存在会使得相机平面不能沿垂直 X i x i X_ix_i Xixi的平面做平移运动,损失2个自由度。 相机位姿变化T含有6个自由度,所以至少需要在两幅图像中有3对点对,才能进行计算。即 n ≥ 3 n \ge 3 n3
PNP问题学习笔记_第1张图片

PNP问题的求解思路

  1. 计算出特征点在相机坐标系下的三维坐标
  2. 通过特征点在世界坐标系和相机坐标系里面的位置关系求解相机姿态

P3P

通过图像坐标求解在相机坐标系下的三维坐标

对于两对点对 X i x i X_ix_i Xixi X j x j X_jx_j Xjxj利用余弦定理,有
d i j 2 = d i 2 + d j 2 − 2 d i d j cos ⁡ θ i j d_{i j}^{2}=d_{i}^{2}+d_{j}^{2}-2 d_{i} d_{j} \cos \theta_{i j} dij2=di2+dj22didjcosθij

f i j ( d i , d j ) = d i 2 + d j 2 − 2 d i d j cos ⁡ θ i j − d i j 2 f_{i j}\left(d_{i}, d_{j}\right)=d_{i}^{2}+d_{j}^{2}-2 d_{i} d_{j} \cos \theta_{i j}-d_{i j}^{2} fij(di,dj)=di2+dj22didjcosθijdij2
其中 d i j , θ i j d_{ij},\theta_{ij} dij,θij为已知量, d j , d j d_j,d_j dj,dj为未知量。其中两点与图像上两点与相机光心夹角的余弦值可以借助相机内参矩阵得出:

cos ⁡ θ = y 1 T y 2 ( y 1 T y 1 ) ( y 2 T y 2 ) = x 1 T ( K − T K − 1 ) x 2 ( x 1 T ( K − T K − 1 ) x 1 ) ( x 2 T ( K − T K − 1 ) x 2 ) \cos \theta=\frac{ y _{1}^{T} y_{2}}{\sqrt{\left( y _{1} T y _{1}\right)\left( y _{2} T y _{2}\right)}}=\frac{ x _{1} T \left( K ^{- T } K ^{-1}\right) x _{2}}{\sqrt{\left( x _{1} T \left( K ^{- T } K ^{-1}\right) x _{1}\right)\left( x _{2} T \left( K ^{- T } K ^{-1}\right) x _{2}\right)}} cosθ=(y1Ty1)(y2Ty2) y1Ty2=(x1T(KTK1)x1)(x2T(KTK1)x2) x1T(KTK1)x2
PNP问题学习笔记_第2张图片

当我们由3个点时,可以构造3个方程
{ f 12 ( d 1 , d 2 ) = 0 f 23 ( d 2 , d 3 ) = 0 f 13 ( d 1 , d 3 ) = 0 \left\{\begin{array}{l} f_{12}\left(d_{1}, d_{2}\right)=0 \\ f_{23}\left(d_{2}, d_{3}\right)=0 \\ f_{13}\left(d_{1}, d_{3}\right)=0 \end{array}\right. f12(d1,d2)=0f23(d2,d3)=0f13(d1,d3)=0
通过消元,可以将方程组变为一元四次方程,令 x = d 1 2 x=d_1^2 x=d12
g ( x ) = a 5 x 4 + a 4 x 3 + a 3 x 2 + a 2 x + a 1 = 0 g(x)=a_{5} x^{4}+a_{4} x^{3}+a_{3} x^{2}+a_{2} x+a_{1}=0 g(x)=a5x4+a4x3+a3x2+a2x+a1=0
求解这个方程,我们会得到4个解,这其中只有一个是我们需要的解。也就是说对于P3P问题,虽然只要3个点就可以进行求解,但是通常需要第四个点对结果进行检验。
求解出 d 1 , d 2 , d 3 d_1,d_2,d_3 d1,d2,d3,相当于获得了点在图像中的深度信息,也就求出了点在相机坐标系下的坐标。

线性PNP算法

对于 n ≥ 5 n\ge 5 n5的情况,对于任意一个点和两个其它点,可以构建一个方程
g ( x ) = a 5 x 4 + a 4 x 3 + a 3 x 2 + a 2 x + a 1 = 0 g(x)=a_{5} x^{4}+a_{4} x^{3}+a_{3} x^{2}+a_{2} x+a_{1}=0 g(x)=a5x4+a4x3+a3x2+a2x+a1=0
一系列这样的方程可以构建一个线性方程组,
( . . . a 5 i a 4 i a 3 i a 2 i a 1 i . . . ) ( x 4 x 3 x 2 x 1 ) = 0 \left(\begin{array}{ccccc} ... \\a_{5}^{i} & a_{4}^{i} & a_{3}^{i} & a_{2}^{i} & a_{1}^{i}\\ ... \end{array}\right)\left(\begin{array}{c} x^{4} \\ x^{3} \\ x^{2} \\ x \\ 1 \end{array}\right)=0 ...a5i...a4ia3ia2ia1ix4x3x2x1=0

EPNP

Linear PNP算法的复杂度是 O ( n 5 ) O(n^5) O(n5),EPNP算法复杂度是 O ( n ) O(n) O(n)

你可能感兴趣的:(SLAM,机器人学,slam,计算机视觉)