EPnP算法学习笔记

1.Overview

1.1 算法输入:

2D-3D关联点对,具体数据结构形式如下所示:
p a i r < p 2 d , p 3 d > pair<p2d, p3d> pair<p2d,p3d>

1.2 算法输出:

旋转矩阵R(3x3),平移向量T(3x1),旋转矩阵R表示当前坐标系与目标坐标系之间的旋转,平移向量T表示当前坐标系与目标坐标系之间的平移。在下文中称当前坐标系为世界坐标系,称坐标系为相机坐标系

2. 符号说明

  • n个3D点在世界坐标系中的坐标,其坐标形式为非齐次坐标
    p i w = [ x i w y i w z i w ] , i = 1 , ⋯ n p^w_i = \begin{bmatrix} x_i^w \\ y_i^w\\ z_i^w \end{bmatrix}, i = 1, \cdots n piw=xiwyiwziw,i=1,n

  • n个3D点在相机坐标系中的坐标,其坐标形式为非齐次坐标
    p i c = [ x i c y i c z i c ] , i = 1 , ⋯ n p^c_i = \begin{bmatrix} x_i^c \\ y_i^c \\ z_i^c \end{bmatrix}, i = 1, \cdots n pic=xicyiczic,i=1,n

  • n个2D点坐标,其坐标形式为非齐次坐标
    u i = [ u i v i ] , i = 1 , ⋯ n \bf{u_i} = \begin{bmatrix} u_i \\ v_i \end{bmatrix}, i = 1, \cdots n ui=[uivi],i=1,n

  • 4个控制点在世界坐标系中的坐标,其坐标形式为非齐次坐标
    c i w = [ x i w y i w z i w ] , i = 1 , 2 , 3 , 4 c^w_i = \begin{bmatrix} x_i^w \\ y_i^w\\ z_i^w \end{bmatrix}, i = 1,2,3,4 ciw=xiwyiwziw,i=1,2,3,4

  • 4个控制点在相机坐标系中的坐标,其坐标形式为非齐次坐标
    c i c = [ x i c y i c z i c ] , i = 1 , 2 , 3 , 4 c^c_i = \begin{bmatrix} x_i^c \\ y_i^c \\ z_i^c \end{bmatrix}, i = 1,2,3,4 cic=xicyiczic,i=1,2,3,4
    我们用上标 w w w c c c来表示该坐标所在坐标系为世界坐标还是相机坐标

3. 理论推导

3.1 控制点的引入

EPnP算法中引入4个控制点,使得世界坐标系每一个3D点坐标都可以被4个控制点坐标的线性组合表示
p i w = ∑ j = 1 4 a i j c i w (1) p^w_i = \sum^4_{j=1} a_{ij}c^w_i \tag{1} piw=j=14aijciw(1)
将4个控制点看成一个坐标系的基,我们称这个坐标系为齐次重心坐标系 (homogeneous barycentric coordinate system),后续我们将称之为hb坐标,至于为什么叫这个名字将在后面介绍。我们可以得到每个3D点在该坐标系下的hb坐标为
h b ( p i w ) = [ a i 1 a i 2 a i 3 a i 4 ] (2) hb(p^w_i) = \begin{bmatrix} a_{i1} \\ a_{i2} \\ a_{i3}\\ a_{i4} \end{bmatrix} \tag{2} hb(piw)=ai1ai2ai3ai4(2)
3D点相机坐标系下的坐标可由其在世界坐标系下的坐标旋转平移得到
[ p i c 1 ] = [ R T 0 1 ] [ p i w 1 ] (3) \begin{bmatrix} p^c_i \\ 1 \end{bmatrix} = \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} \begin{bmatrix} p^w_i \\ 1 \end{bmatrix} \tag{3} [pic1]=[R0T1][piw1](3)
将(2)带入(3)
[ p i c 1 ] = [ R T 0 1 ] ∑ j = 1 4 a i j [ c i w 1 ] = [ R T 0 1 ] [ ∑ j = 1 4 a i j c i w ∑ j = 1 4 a i j ] (4) \begin{bmatrix} p^c_i \\ 1 \end{bmatrix} = \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} \sum^4_{j=1} a_{ij} \begin{bmatrix} c^w_i \\ 1 \end{bmatrix} = \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} \begin{bmatrix} \sum^4_{j=1} a_{ij}c^w_i \\ \sum^4_{j=1} a_{ij} \end{bmatrix} \tag{4} [pic1]=[R0T1]j=14aij[ciw1]=[R0T1][j=14aijciwj=14aij](4)
我们将(4)变换为如下形式
[ p i c 1 ] = ∑ j = 1 4 a i j [ R T 0 1 ] [ c i w 1 ] = ∑ j = 1 4 a i j [ c i c 1 ] (5) \begin{bmatrix} p^c_i \\ 1 \end{bmatrix} = \sum^4_{j=1} a_{ij} \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} \begin{bmatrix} c^w_i \\ 1 \end{bmatrix} = \sum^4_{j=1} a_{ij} \begin{bmatrix} c^c_i \\ 1 \end{bmatrix} \tag{5} [pic1]=j=14aij[R0T1][ciw1]=j=14aij[cic1](5)
我们比较(5)和(1)发现,3D点的坐标在世界坐标系中hb坐标和相机坐标系中的hb坐标是一致的,这一点非常重要
在上述的公式中,我们还可以从(4)中得到
∑ j = 1 4 a i j = 1 (6) \sum^4_{j=1} a_{ij} = 1 \tag{6} j=14aij=1(6)
这是hb坐标的一个限制条件

3.2 hb坐标的计算

我们可以把(1)写成齐次坐标的形式,并用矩阵相乘的方式来表示
[ p i w 1 ] = [ c 1 w c 2 w c 3 w c 4 w 1 1 1 1 ] ⏟ C [ a i 1 a i 2 a i 3 a i 4 ] (7) \begin{bmatrix} p^w_i \\ 1 \end{bmatrix} = \underbrace{ \begin{bmatrix} c^w_1 & c^w_2 & c^w_3 & c^w_4\\ 1 &1 & 1& 1 \end{bmatrix} }_{\text{C}} \begin{bmatrix} a_{i1} \\ a_{i2} \\ a_{i3}\\ a_{i4} \end{bmatrix} \tag{7} [piw1]=C [c1w1c2w1c3w1c4w1]ai1ai2ai3ai4(7)
我们只需要两边乘以 C − 1 C^{-1} C1即可获得hb坐标
[ a i 1 a i 2 a i 3 a i 4 ] = [ c 1 w c 2 w c 3 w c 4 w 1 1 1 1 ] − 1 [ p i w 1 ] (8) \begin{bmatrix} a_{i1} \\ a_{i2} \\ a_{i3}\\ a_{i4} \end{bmatrix} = \begin{bmatrix} c^w_1 & c^w_2 & c^w_3 & c^w_4\\ 1 &1 & 1& 1 \end{bmatrix}^{-1} \begin{bmatrix} p^w_i \\ 1 \end{bmatrix} \tag{8} ai1ai2ai3ai4=[c1w1c2w1c3w1c4w1]1[piw1](8)

3.3 控制点的构造

理论上控制点可以随便构造,只需要满足 C C C可逆即可,但是为了算法的稳定性,算法的原论文 [1]中提出一种构造控制点的方式,第一个控制点采用所有3D点世界坐标的质心
c 1 w = 1 n ∑ i = 1 n p i w (9) c^w_1 = \frac 1 n \sum_{i=1}^np^w_i \tag{9} c1w=n1i=1npiw(9)
其余的控制点,我们将选用这些3D点的三个主方向上,需要对这些数据进行主成分分析(PCA)
A = [ ( p 1 w − c 1 w ) T ( p 2 w − c 1 w ) T ⋯ ( p n w − c 1 w ) T ] (10) \bf{A}= \begin{bmatrix} (p^w_1 - c^w_1)^T \\ (p^w_2 - c^w_1)^T \\ \cdots \\ (p^w_n - c^w_1)^T \end{bmatrix} \tag{10} A=(p1wc1w)T(p2wc1w)T(pnwc1w)T(10)
计算 A T A \bf{A^T}\bf{A} ATA的三个特征值 λ 1 , λ 2 , λ 3 \lambda_1,\lambda_2,\lambda_3 λ1,λ2,λ3,以及对应三个特征向量 v 1 , v 2 , v 3 \bf{v_1},\bf{v_2},\bf{v_3} v1,v2,v3,那么剩余3个控制点可表示为
{ c 2 w = c 1 w + λ 1 n v 1 c 3 w = c 1 w + λ 2 n v 2 c 4 w = c 1 w + λ 1 n v 3 (11) \begin{cases} c^w_2 = c^w_1 + \sqrt{ \frac{\lambda_1}{n}} \bf{v_1} \\ c^w_3 = c^w_1 + \sqrt{ \frac{\lambda_2}{n}} \bf{v_2} \\ c^w_4 = c^w_1 + \sqrt{ \frac{\lambda_1}{n}} \bf{v_3} \end{cases} \tag{11} c2w=c1w+nλ1 v1c3w=c1w+nλ2 v2c4w=c1w+nλ1 v3(11)
上述操作实际上是找到点云的重心,以及点云的三个主方向

3.4 解析求解

在相机投影模型下,有如下等式成立
s [ u i 1 ] = K p i c = K ∑ j = 1 4 a i j c i c (12) s \begin{bmatrix} \bf{u_i} \\ 1 \end{bmatrix} = K p_i^c = K \sum_{j=1}^4 a_{ij} c^c_i \tag{12} s[ui1]=Kpic=Kj=14aijcic(12)
我们将(12)展开
s [ u i v i 1 ] = [ f u 0 u 0 0 f v v 0 0 0 1 ] ⏟ K ∑ j = 1 4 a i j [ x j c y j c z j c ] (13) s \begin{bmatrix} u_i \\ v_i \\ 1 \end{bmatrix} = \underbrace{ \begin{bmatrix} f_u & 0 & u_0 \\ 0 & f_v & v_0 \\ 0 & 0 & 1 \end{bmatrix} }_{\text{K}} \sum_{j=1}^4 a_{ij} \begin{bmatrix} x_j^c \\ y_j^c \\ z_j^c \end{bmatrix} \tag{13} suivi1=K fu000fv0u0v01j=14aijxjcyjczjc(13)
继续展开可以得到
[ s u i s b i s ] = [ ∑ j = 1 4 a i j ( f u x j c + u 0 z j c ) ∑ j = 1 4 a i j ( f v y j c + u 0 z j c ) ∑ j = 1 4 a i j z j c ] (14) \begin{bmatrix} s u_i \\ s b_i \\ s \end{bmatrix} = \begin{bmatrix} \sum_{j=1}^4 a_{ij}(f_u x^c_j + u_0z^c_j) \\ \sum_{j=1}^4 a_{ij}(f_v y^c_j + u_0z^c_j) \\ \sum_{j=1}^4 a_{ij} z^c_j \end{bmatrix} \tag{14} suisbis=j=14aij(fuxjc+u0zjc)j=14aij(fvyjc+u0zjc)j=14aijzjc(14)
将(14)的第3行带入上面2行可以消去s,就可以构造下面的方程
{ ∑ j = 1 4 a i j [ f u x j c + ( u 0 − u i ) z j c ] = 0 ∑ j = 1 4 a i j [ f v y j c + ( v 0 − v i ) z j c ] = 0 (15) \begin{cases} \sum_{j=1}^4 a_{ij} \lbrack f_ux_j^c + (u_0-u_i)z^c_j \rbrack = 0\\ \sum_{j=1}^4 a_{ij} \lbrack f_vy_j^c + (v_0-v_i)z^c_j \rbrack = 0\\ \end{cases} \tag{15} {j=14aij[fuxjc+(u0ui)zjc]=0j=14aij[fvyjc+(v0vi)zjc]=0(15)
一个点我们可以构造如(15)的两个方程,如果是n个点我们可以写成如下矩阵形式
[ a 11 f u 0 a 11 ( u 0 − u 1 ) a 12 f u 0 a 12 ( u 0 − u 1 ) a 13 f u 0 a 13 ( u 0 − u 1 ) a 14 f u 0 a 14 ( u 0 − u 1 ) 0 a 11 f v a 11 ( v 0 − v 1 ) 0 a 12 f v a 12 ( v 0 − v 1 ) 0 a 13 f v a 13 ( v 0 − v 1 ) 0 a 14 f v a 14 ( v 0 − v 1 ) ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ a n 1 f u 0 a n 1 ( u 0 − u 1 ) a n 2 f u 0 a n 2 ( u 0 − u 1 ) a n 3 f u 0 a n 3 ( u 0 − u 1 ) a n 4 f u 0 a n 4 ( u 0 − u 1 ) 0 a n 1 f v a n 1 ( v 0 − v 1 ) 0 a n 2 f v a n 2 ( v 0 − v 1 ) 0 a n 3 f v a n 3 ( v 0 − v 1 ) 0 a n 4 f v a n 4 ( v 0 − v 1 ) ] ⏟ M [ x 1 c y 1 c z 1 c x 2 c y 2 c z 2 c x 3 c y 3 c z 3 c x 4 c y 4 c z 4 c ] ⏟ x = 0 \small{ \underbrace{ \begin{bmatrix} a_{11}f_u & 0 & a_{11}(u_0-u_1) & a_{12}f_u & 0 & a_{12}(u_0-u_1) & a_{13}f_u & 0 & a_{13}(u_0-u_1) & a_{14}f_u & 0 & a_{14}(u_0-u_1) \\ 0 & a_{11}f_v & a_{11}(v_0-v_1) & 0 & a_{12}f_v & a_{12}(v_0-v_1) & 0 & a_{13}f_v & a_{13}(v_0-v_1)& 0 & a_{14}f_v & a_{14}(v_0-v_1) \\ \vdots & \vdots & \vdots &\vdots &\vdots &\vdots &\vdots &\vdots &\vdots &\vdots &\vdots &\vdots & \\ a_{n1}f_u & 0 & a_{n1}(u_0-u_1) & a_{n2}f_u & 0 & a_{n2}(u_0-u_1) & a_{n3}f_u & 0 & a_{n3}(u_0-u_1) & a_{n4}f_u & 0 & a_{n4}(u_0-u_1) \\ 0 & a_{n1}f_v & a_{n1}(v_0-v_1) & 0 & a_{n2}f_v & a_{n2}(v_0-v_1) & 0 & a_{n3}f_v & a_{n3}(v_0-v_1)& 0 & a_{n4}f_v & a_{n4}(v_0-v_1) \\ \end{bmatrix} }_{\text{M}} \underbrace{ \begin{bmatrix} x_1^c\\ y_1^c\\ z_1^c\\ x_2^c\\ y_2^c\\ z_2^c\\ x_3^c\\ y_3^c\\ z_3^c\\ x_4^c\\ y_4^c\\ z_4^c\\ \end{bmatrix} }_{\text{x}} =0 } M a11fu0an1fu00a11fv0an1fva11(u0u1)a11(v0v1)an1(u0u1)an1(v0v1)a12fu0an2fu00a12fv0an2fva12(u0u1)a12(v0v1)an2(u0u1)an2(v0v1)a13fu0an3fu00a13fv0an3fva13(u0u1)a13(v0v1)an3(u0u1)an3(v0v1)a14fu0an4fu00a14fv0an4fva14(u0u1)a14(v0v1)an4(u0u1)an4(v0v1)x x1cy1cz1cx2cy2cz2cx3cy3cz3cx4cy4cz4c=0
我们可以上面这个巨大的矩阵等式写成如下简单的形式
M x = 0 (16) \bf{M}\bf{x} = 0 \tag{16} Mx=0(16)
我们要解出控制点在相机坐标系下的坐标也就是要求 M \bf{M} M的零空间,可以用奇异值分解,奇异值分解复杂度过高,我们发现下面这个式子和(16)是同解的
M T M x = 0 (17) \bf{M^T}\bf{M}\bf{x} = 0 \tag{17} MTMx=0(17)
我们只需要求 M T M 12 × 12 {\bf{M^T}\bf{M}}_{12 \times12} MTM12×12特征值为零及其对应特征向量 v i , i = 1 , 2 ⋯ N v_i, i = 1,2\cdots N vi,i=1,2N(这里假设值为零的特征值有N个),则4个控制点在相机坐标系下的坐标可以表示为 N N N v i v_i vi向量的线性组合
x = ∑ i = 1 N β i v i (18) \bf{x} = \sum_{i=1}^N \beta_i v_i \tag{18} x=i=1Nβivi(18)
我们要求出4个控制点在相机坐标系下的坐标,就需要求出解出(18)中的 N N N β i \beta_i βi的值,但是原论文[1]中作者根据实验得出,N的取值与相机的焦距有关,如下图所示,随着焦距变长,末尾的4个特征值(最小的4个特征值),趋近于0。所以我们在实现的时候直接取最小的4个特征值及其特征值向量(显然由于各种噪声和误差,不可能解出特征值为0),即我们取 N N N=4
在这里插入图片描述

想要求出 β 1 , β 2 , β 3 , β 4 \beta_1,\beta_2,\beta_3,\beta_4 β1,β2,β3,β4,我们还需要利用一个约束:由于控制点坐标经过旋转和平移从世界坐标系到相机坐标系,控制点之间的欧式距离并不发生改变
∥ c i c − c j c ∥ 2 2 = ∥ c i w − c j w ∥ 2 2 (19) \left\|c^c_i - c^c_j\right\|_2^2 = \left\|c^w_i - c^w_j\right\|_2^2 \tag{19} ciccjc22=ciwcjw22(19)
c i c = β 1 v 1 [ i ] + β 2 v 2 [ i ] + β 3 v 3 [ i ] + β 4 v 4 [ i ] (20) c^c_i = \beta_1 v_1^{[i]} + \beta_2 v_2^{[i]} + \beta_3 v_3^{[i]}+\beta_4 v_4^{[i]} \tag{20} cic=β1v1[i]+β2v2[i]+β3v3[i]+β4v4[i](20)
这里 v [ i ] v^{[i]} v[i]表示 v 12 × 1 v_{12 \times 1} v12×1的第 i i i 3 × 1 3 \times 1 3×1的子向量,然后我们将(20)带入(19)得到
∥ β 1 v 1 [ i ] + β 2 v 2 [ i ] + β 3 v 3 [ i ] + β 4 v 4 [ i ] − β 1 v 1 [ j ] − β 2 v 2 [ j ] − β 3 v 3 [ j ] − β 4 v 4 [ j ] ∥ 2 2 = ∥ c i w − c j w ∥ 2 2 \small{ \left\| \beta_1 v_1^{[i]} + \beta_2 v_2^{[i]} + \beta_3 v_3^{[i]}+\beta_4 v_4^{[i]} - \beta_1 v_1^{[j]} - \beta_2 v_2^{[j]} - \beta_3 v_3^{[j]}-\beta_4 v_4^{[j]} \right\|_2^2 = \left\|c^w_i - c^w_j\right\|_2^2 } β1v1[i]+β2v2[i]+β3v3[i]+β4v4[i]β1v1[j]β2v2[j]β3v3[j]β4v4[j]22=ciwcjw22
将上面的式子整理一下可以得到
∥ β 1 ( v 1 [ i ] − v 1 [ j ] ) ⏟ s 1 + β 2 ( v 2 [ i ] − v 2 [ j ] ) ⏟ s 2 + β 3 ( v 3 [ i ] − v 3 [ j ] ) ⏟ s 3 + β 4 ( v 4 [ i ] − v 4 [ j ] ) ⏟ s 4 ∥ 2 2 = ∥ c i w − c j w ∥ 2 2 (21) \small{ \left\| \beta_1 \underbrace{(v_1^{[i]}-v_1^{[j]})}_{s_1} + \beta_2 \underbrace{(v_2^{[i]}-v_2^{[j]})}_{s_2}+ \beta_3 \underbrace{(v_3^{[i]}-v_3^{[j]})}_{s_3}+\beta_4 \underbrace{(v_4^{[i]}-v_4^{[j]})}_{s_4} \right\|_2^2 = \left\|c^w_i - c^w_j\right\|_2^2 \tag{21} } β1s1 (v1[i]v1[j])+β2s2 (v2[i]v2[j])+β3s3 (v3[i]v3[j])+β4s4 (v4[i]v4[j])22=ciwcjw22(21)
根据 i i i j j j的不同取值(21)这样等式可以构造 C 4 2 = 6 C_4^2=6 C42=6个,将(21)展开可得
∥ c i w − c j w ∥ 2 2 = β 1 2 s 1 T s 1 + β 1 β 2 s 2 T s 1 + β 1 β 3 s 3 T s 1 + β 1 β 4 s 4 T s 1 ⋯ + β 4 β 4 s 4 T s 4 (22) \left\|c^w_i - c^w_j\right\|_2^2= \beta_1^2 s_1^Ts_1 + \beta_1 \beta_2 s_2^Ts_1+ \beta_1 \beta_3 s_3^Ts_1 + \beta_1 \beta_4 s_4^Ts_1 \cdots+ \beta_4 \beta_4 s_4^Ts_4 \tag{22} ciwcjw22=β12s1Ts1+β1β2s2Ts1+β1β3s3Ts1+β1β4s4Ts1+β4β4s4Ts4(22)
将6个等式写成矩阵形式如下所示(其中 β i j = β i β j \beta_{ij}=\beta_i\beta_j βij=βiβj, s i j s_{ij} sij表示第 i i i个等式的 s j s_j sj)
[ s 11 T s 11 s 11 T s 12 s 12 T s 12 s 11 T s 13 s 12 T s 13 s 13 T s 13 s 11 T s 14 s 12 T s 14 s 13 T s 14 s 14 T s 14 s 21 T s 21 s 21 T s 22 s 22 T s 22 s 21 T s 23 s 22 T s 23 s 23 T s 23 s 21 T s 24 s 22 T s 24 s 23 T s 24 s 24 T s 24 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ s 61 T s 61 s 61 T s 62 s 62 T s 62 s 61 T s 63 s 62 T s 63 s 63 T s 63 s 61 T s 64 s 62 T s 64 s 63 T s 64 s 64 T s 64 ] ⏟ L [ β 11 β 12 β 22 β 13 β 23 β 33 β 14 β 24 β 34 β 44 ] ⏟ β = [ ∥ c 1 w − c 2 w ∥ 2 2 ∥ c 1 w − c 2 w ∥ 2 2 ∥ c 2 w − c 2 w ∥ 2 2 ∥ c 1 w − c 3 w ∥ 2 2 ∥ c 2 w − c 3 w ∥ 2 2 ∥ c 3 w − c 3 w ∥ 2 2 ∥ c 1 w − c 4 w ∥ 2 2 ∥ c 2 w − c 4 w ∥ 2 2 ∥ c 3 w − c 4 w ∥ 2 2 ∥ c 4 w − c 4 w ∥ 2 2 ] ⏟ ρ \small{ \underbrace{ \begin{bmatrix} s_{11}^Ts_{11}& s_{11}^Ts_{12} & s_{12}^Ts_{12} & s_{11}^Ts_{13} & s_{12}^Ts_{13} & s_{13}^Ts_{13} & s_{11}^Ts_{14} & s_{12}^Ts_{14} & s_{13}^Ts_{14} & s_{14}^Ts_{14} \\ s_{21}^Ts_{21}& s_{21}^Ts_{22} & s_{22}^Ts_{22} & s_{21}^Ts_{23} & s_{22}^Ts_{23} & s_{23}^Ts_{23} & s_{21}^Ts_{24} & s_{22}^Ts_{24} & s_{23}^Ts_{24} & s_{24}^Ts_{24} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots &\vdots\\ s_{61}^Ts_{61}& s_{61}^Ts_{62} & s_{62}^Ts_{62} & s_{61}^Ts_{63} & s_{62}^Ts_{63} & s_{63}^Ts_{63} & s_{61}^Ts_{64} & s_{62}^Ts_{64} & s_{63}^Ts_{64} & s_{64}^Ts_{64} \\ \end{bmatrix} }_{L} \underbrace{ \begin{bmatrix} \beta_{11} \\ \beta_{12} \\ \beta_{22} \\ \beta_{13} \\ \beta_{23} \\ \beta_{33} \\ \beta_{14} \\ \beta_{24} \\ \beta_{34} \\ \beta_{44} \\ \end{bmatrix} }_{\beta} = \underbrace{ \begin{bmatrix} \left\|c^w_1 - c^w_2 \right\|_2^2 \\ \left\|c^w_1 - c^w_2 \right\|_2^2 \\ \left\|c^w_2 - c^w_2 \right\|_2^2 \\ \left\|c^w_1 - c^w_3 \right\|_2^2 \\ \left\|c^w_2 - c^w_3 \right\|_2^2 \\ \left\|c^w_3 - c^w_3 \right\|_2^2 \\ \left\|c^w_1 - c^w_4 \right\|_2^2 \\ \left\|c^w_2 - c^w_4 \right\|_2^2 \\ \left\|c^w_3 - c^w_4 \right\|_2^2 \\ \left\|c^w_4 - c^w_4 \right\|_2^2 \\ \end{bmatrix} }_{\rho} } L s11Ts11s21Ts21s61Ts61s11Ts12s21Ts22s61Ts62s12Ts12s22Ts22s62Ts62s11Ts13s21Ts23s61Ts63s12Ts13s22Ts23s62Ts63s13Ts13s23Ts23s63Ts63s11Ts14s21Ts24s61Ts64s12Ts14s22Ts24s62Ts64s13Ts14s23Ts24s63Ts64s14Ts14s24Ts24s64Ts64β β11β12β22β13β23β33β14β24β34β44=ρ c1wc2w22c1wc2w22c2wc2w22c1wc3w22c2wc3w22c3wc3w22c1wc4w22c2wc4w22c3wc4w22c4wc4w22
我们将上面的巨大的矩阵等式下面这种简单的形式
L β = ρ (23) L\beta=\rho \tag{23} Lβ=ρ(23)
取其中几列构造新的方程可以获得原方程的近似解, β 1 , β 2 , β 3 , β 4 \beta_1,\beta_2,\beta_3,\beta_4 β1,β2,β3,β4的初值,用于后续的高斯牛顿优化的初始值
[ s 11 T s 11 s 11 T s 12 s 11 T s 13 s 11 T s 14 s 21 T s 21 s 21 T s 22 s 21 T s 23 s 21 T s 24 ⋮ ⋮ ⋮ ⋮ s 61 T s 61 s 61 T s 62 s 61 T s 73 s 71 T s 74 ] [ β 11 β 12 β 13 β 14 ] = [ ∥ c 1 w − c 2 w ∥ 2 2 ∥ c 1 w − c 2 w ∥ 2 2 ∥ c 2 w − c 2 w ∥ 2 2 ∥ c 1 w − c 3 w ∥ 2 2 ∥ c 2 w − c 3 w ∥ 2 2 ∥ c 3 w − c 3 w ∥ 2 2 ∥ c 1 w − c 4 w ∥ 2 2 ∥ c 2 w − c 4 w ∥ 2 2 ∥ c 3 w − c 4 w ∥ 2 2 ∥ c 4 w − c 4 w ∥ 2 2 ] (24) \small{ \begin{bmatrix} s_{11}^Ts_{11}& s_{11}^Ts_{12} & s_{11}^Ts_{13} &s_{11}^Ts_{14} \\ s_{21}^Ts_{21}& s_{21}^Ts_{22} & s_{21}^Ts_{23} &s_{21}^Ts_{24} \\ \vdots & \vdots & \vdots & \vdots & \\ s_{61}^Ts_{61}& s_{61}^Ts_{62} & s_{61}^Ts_{73} &s_{71}^Ts_{74} \\ \end{bmatrix} \begin{bmatrix} \beta_{11} \\ \beta_{12} \\ \beta_{13} \\ \beta_{14} \\ \end{bmatrix} = \begin{bmatrix} \left\|c^w_1 - c^w_2 \right\|_2^2 \\ \left\|c^w_1 - c^w_2 \right\|_2^2 \\ \left\|c^w_2 - c^w_2 \right\|_2^2 \\ \left\|c^w_1 - c^w_3 \right\|_2^2 \\ \left\|c^w_2 - c^w_3 \right\|_2^2 \\ \left\|c^w_3 - c^w_3 \right\|_2^2 \\ \left\|c^w_1 - c^w_4 \right\|_2^2 \\ \left\|c^w_2 - c^w_4 \right\|_2^2 \\ \left\|c^w_3 - c^w_4 \right\|_2^2 \\ \left\|c^w_4 - c^w_4 \right\|_2^2 \\ \end{bmatrix} \tag{24} } s11Ts11s21Ts21s61Ts61s11Ts12s21Ts22s61Ts62s11Ts13s21Ts23s61Ts73s11Ts14s21Ts24s71Ts74β11β12β13β14=c1wc2w22c1wc2w22c2wc2w22c1wc3w22c2wc3w22c3wc3w22c1wc4w22c2wc4w22c3wc4w22c4wc4w22(24)
构造下面的目标优化函数
arg min ⁡ β E r r o r ( β ) = ∑ ( L β − ρ ) 2 (25) \argmin_{\beta} Error(\beta) = \sum (L\beta-\rho)^2 \tag{25} βargminError(β)=(Lβρ)2(25)
记残差项为
r = L β − ρ (26) \bf{r}= L \beta-\rho \tag{26} r=Lβρ(26)
优化变量为
x = [ β 1 β 2 β 3 β 4 ] \bf{x}= \begin{bmatrix} \beta_1 \\ \beta_2 \\ \beta_3 \\ \beta_4 \\ \end{bmatrix} x=β1β2β3β4
残差项对优化变量的雅克比矩阵
J = ∂ r ∂ x = L ∂ β ∂ x = L [ ∂ β 11 ∂ β 1 ∂ β 11 ∂ β 2 ∂ β 11 ∂ β 3 ∂ β 11 ∂ β 4 ∂ β 12 ∂ β 1 ∂ β 12 ∂ β 2 ∂ β 12 ∂ β 3 ∂ β 12 ∂ β 4 ∂ β 22 ∂ β 1 ∂ β 22 ∂ β 2 ∂ β 22 ∂ β 3 ∂ β 22 ∂ β 4 ∂ β 13 ∂ β 1 ∂ β 13 ∂ β 2 ∂ β 13 ∂ β 3 ∂ β 13 ∂ β 4 ∂ β 23 ∂ β 1 ∂ β 23 ∂ β 2 ∂ β 23 ∂ β 3 ∂ β 23 ∂ β 4 ∂ β 33 ∂ β 1 ∂ β 33 ∂ β 2 ∂ β 33 ∂ β 3 ∂ β 33 ∂ β 4 ∂ β 14 ∂ β 1 ∂ β 14 ∂ β 2 ∂ β 14 ∂ β 3 ∂ β 14 ∂ β 4 ∂ β 24 ∂ β 1 ∂ β 24 ∂ β 2 ∂ β 24 ∂ β 3 ∂ β 24 ∂ β 4 ∂ β 34 ∂ β 1 ∂ β 34 ∂ β 2 ∂ β 34 ∂ β 3 ∂ β 34 ∂ β 4 ∂ β 44 ∂ β 1 ∂ β 44 ∂ β 2 ∂ β 44 ∂ β 3 ∂ β 44 ∂ β 4 ] (27) \bf{J} = \frac {\partial \bf{r}}{\partial \bf{x}} =L \frac {\partial \beta}{\partial \bf{x}} = L \begin{bmatrix} \frac {\partial \beta_{11}}{\partial \beta_1} & \frac {\partial \beta_{11}}{\partial \beta_2} & \frac {\partial \beta_{11}}{\partial \beta_3} & \frac {\partial \beta_{11}}{\partial \beta_4} \\ \frac {\partial \beta_{12}}{\partial \beta_1} & \frac {\partial \beta_{12}}{\partial \beta_2} & \frac {\partial \beta_{12}}{\partial \beta_3} & \frac {\partial \beta_{12}}{\partial \beta_4} \\ \frac {\partial \beta_{22}}{\partial \beta_1} & \frac {\partial \beta_{22}}{\partial \beta_2} & \frac {\partial \beta_{22}}{\partial \beta_3} & \frac {\partial \beta_{22}}{\partial \beta_4} \\ \frac {\partial \beta_{13}}{\partial \beta_1} & \frac {\partial \beta_{13}}{\partial \beta_2} & \frac {\partial \beta_{13}}{\partial \beta_3} & \frac {\partial \beta_{13}}{\partial \beta_4} \\ \frac {\partial \beta_{23}}{\partial \beta_1} & \frac {\partial \beta_{23}}{\partial \beta_2} & \frac {\partial \beta_{23}}{\partial \beta_3} & \frac {\partial \beta_{23}}{\partial \beta_4} \\ \frac {\partial \beta_{33}}{\partial \beta_1} & \frac {\partial \beta_{33}}{\partial \beta_2} & \frac {\partial \beta_{33}}{\partial \beta_3} & \frac {\partial \beta_{33}}{\partial \beta_4} \\ \frac {\partial \beta_{14}}{\partial \beta_1} & \frac {\partial \beta_{14}}{\partial \beta_2} & \frac {\partial \beta_{14}}{\partial \beta_3} & \frac {\partial \beta_{14}}{\partial \beta_4} \\ \frac {\partial \beta_{24}}{\partial \beta_1} & \frac {\partial \beta_{24}}{\partial \beta_2} & \frac {\partial \beta_{24}}{\partial \beta_3} & \frac {\partial \beta_{24}}{\partial \beta_4} \\ \frac {\partial \beta_{34}}{\partial \beta_1} & \frac {\partial \beta_{34}}{\partial \beta_2} & \frac {\partial \beta_{34}}{\partial \beta_3} & \frac {\partial \beta_{34}}{\partial \beta_4} \\ \frac {\partial \beta_{44}}{\partial \beta_1} & \frac {\partial \beta_{44}}{\partial \beta_2} & \frac {\partial \beta_{44}}{\partial \beta_3} & \frac {\partial \beta_{44}}{\partial \beta_4} \\ \end{bmatrix} \tag{27} J=xr=Lxβ=Lβ1β11β1β12β1β22β1β13β1β23β1β33β1β14β1β24β1β34β1β44β2β11β2β12β2β22β2β13β2β23β2β33β2β14β2β24β2β34β2β44β3β11β3β12β3β22β3β13β3β23β3β33β3β14β3β24β3β34β3β44β4β11β4β12β4β22β4β13β4β23β4β33β4β14β4β24β4β34β4β44(27)
增量方程为
J T J Δ x = − J T r (28) \bf{J^T}\bf{J} \Delta x = \bf{-J^T} \bf{r} \tag{28} JTJΔx=JTr(28)
更新优化变量
x = x + Δ x (28) \bf{x} = \bf{x} + \Delta x \tag{28} x=x+Δx(28)
至此,我们已经得到了控制点在相机坐标系的坐标,3D点由于hb坐标在相机坐标系和世界坐标中是一致的,所以我们可以根据(5)还原出每个3D点在相机坐标系中的坐标,这样就把PnP问题转化成了ICP问题,根据ICP问题的算法我们可以解出旋转矩阵 R R R和平移向量 T T T,本文就不在继续介绍其解法。

4. 参考资料

[1] Lepetit, V.; Moreno-Noguer, F.; Fua, P. Epnp: Efficient perspective-n-point camera pose estimation. International Journal of Computer Vision 2009, 81, 155-166.
[2] PnP问题之EPnP解法
[3] EPnP算法
[4] 高翔, 张涛, 颜沁睿, 刘毅, 视觉SLAM十四讲:从理论到实践, 电子工业出版社, 2017

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值