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. 计算出特征点在相机坐标系下的三维坐标
  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
在这里插入图片描述

当我们由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)

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值