已知空间中某点 P = [ X , Y , Z , 1 ] T \boldsymbol{P}=[X, Y, Z, 1]^T P=[X,Y,Z,1]T,在图像中的归一化坐标 为 [ u , v , 1 ] T [u, v, 1]^T [u,v,1]T,求解相机运动 R \boldsymbol{R} R、 t \boldsymbol{t} t。定义增广矩阵 [ R ∣ t ] [\boldsymbol{R}|\boldsymbol{t}] [R∣t] 为一个 3 × 4 3\times4 3×4 矩阵,包含了旋转和平移信息(区别于变换矩阵)。满足
s [ u 1 v 1 1 ] = [ t 1 t 2 t 3 t 4 t 5 t 6 t 7 t 8 t 9 t 10 t 11 t 12 ] [ X Y Z 1 ] (6-25) s\left[\begin{array}{l} u_{1} \\ v_{1} \\ 1 \end{array}\right]=\left[\begin{array}{llll} t_{1} & t_{2} & t_{3} & t_{4} \\ t_{5} & t_{6} & t_{7} & t_{8} \\ t_{9} & t_{10} & t_{11} & t_{12} \end{array}\right]\left[\begin{array}{l} X \\ Y \\ Z \\ 1 \end{array}\right] \tag{6-25} s u1v11 = t1t5t9t2t6t10t3t7t11t4t8t12 XYZ1 (6-25)
用最后一行消去 s s s,得到
u 1 = t 1 X + t 2 Y + t 3 Z + t 4 t 9 X + t 10 Y + t 11 Z + t 12 u_1=\frac{t_1X+t_2Y+t_3Z+t_4}{t_9X+t_{10}Y+t_{11}Z+t_{12}} u1=t9X+t10Y+t11Z+t12t1X+t2Y+t3Z+t4
v 1 = t 5 X + t 6 Y + t 7 Z + t 8 t 9 X + t 10 Y + t 11 Z + t 12 (6-26) v_1=\frac{t_5X+t_6Y+t_7Z+t_8}{t_9X+t_{10}Y+t_{11}Z+t_{12}} \tag{6-26} v1=t9X+t10Y+t11Z+t12t5X+t6Y+t7Z+t8(6-26)
为简化表示,定义
t 1 = [ t 1 , t 2 , t 3 , t 4 ] T , t 2 = [ t 5 , t 6 , t 7 , t 8 ] T , t 3 = [ t 9 , t 10 , t 11 , t 12 ] T \boldsymbol{t_1}=[t_1,t_2, t_3, t_4]^T ,\quad \boldsymbol{t_2}=[t_5,t_6, t_7, t_8]^T ,\quad \boldsymbol{t_3}=[t_9,t_{10}, t_{11}, t_{12}]^T t1=[t1,t2,t3,t4]T,t2=[t5,t6,t7,t8]T,t3=[t9,t10,t11,t12]T
代入式(6-26),得
t 1 T P − t 3 T P u 1 = 0 \boldsymbol{t_1^T}\boldsymbol{P}-\boldsymbol{t_3^T}\boldsymbol{P}u_1=0 t1TP−t3TPu1=0
t 2 T P − t 3 T P v 1 = 0 (6-27) \boldsymbol{t_2^T}\boldsymbol{P}-\boldsymbol{t_3^T}\boldsymbol{P}v_1=0 \tag{6-27} t2TP−t3TPv1=0(6-27)
每对特征点提供了 2 个约束,故至少需要 6 对特征点,可得到以下线性方程组(相当于取转置):
( P 1 T 0 − u 1 P 1 T 0 P 1 T − v 1 P 1 T ⋮ ⋮ ⋮ P N T 0 − u N P N T 0 P N T − v N P N T ) ( t 1 t 2 t 3 ) = 0 (6-28) \left(\begin{array}{ccc} \boldsymbol{P}_{1}^{\mathrm{T}} & 0 & -u_{1} \boldsymbol{P}_{1}^{\mathrm{T}} \\ 0 & \boldsymbol{P}_{1}^{\mathrm{T}} & -v_{1} \boldsymbol{P}_{1}^{\mathrm{T}} \\ \vdots & \vdots & \vdots \\ \boldsymbol{P}_{N}^{\mathrm{T}} & 0 & -u_{N} \boldsymbol{P}_{N}^{\mathrm{T}} \\ 0 & \boldsymbol{P}_{N}^{\mathrm{T}} & -v_{N} \boldsymbol{P}_{N}^{\mathrm{T}} \end{array}\right)\left(\begin{array}{l} \boldsymbol{t}_{1} \\ \boldsymbol{t}_{2} \\ \boldsymbol{t}_{3} \end{array}\right)=0 \tag{6-28} P1T0⋮PNT00P1T⋮0PNT−u1P1T−v1P1T⋮−uNPNT−vNPNT t1t2t3 =0(6-28)
当匹配点大于 6 对时,可用 SVD 等方法对超定方程求最小二乘解。
注意,这里我们直接将变换矩阵 T \boldsymbol{T} T 看成 12 个未知数,而忽略了其内部各元素之间的约束关系,因此我们还需要对求解结果进行处理。对于旋转矩阵 R \boldsymbol{R} R,将上述结果左边 3 × 3 3\times3 3×3 矩阵进行近似,可以采用 QR 分解或下面的方法
R ← ( R R T ) − 1 2 R \boldsymbol{R} \leftarrow\left(\boldsymbol{R} \boldsymbol{R}^{\mathrm{T}}\right)^{-\frac{1}{2}} \boldsymbol{R} R←(RRT)−21R
P3P 是另一种解 PnP 的方法,它仅使用 3 对匹配点, 对数据要求较少。
(1)P3P 需要利用给定的 3 个点的几何关系。它的输入数据为 3 对 3D-2D 匹配点。
如图,A、B、C 为 3D 点, a、b、c 为三个点在成像平面上的投影。此外,还需要一对验证点 D-d(类似对极几何,选出正确解)。
根据三角形相似
Δ O a b ∼ Δ O A B , Δ O a c ∼ Δ O A C , Δ O b c ∼ Δ O B C \Delta Oab\sim\Delta OAB, \quad \Delta Oac\sim\Delta OAC, \quad \Delta Obc\sim\Delta OBC ΔOab∼ΔOAB,ΔOac∼ΔOAC,ΔObc∼ΔOBC
由余弦定理
O A 2 + O B 2 − 2 O A ⋅ O B ⋅ cos < O a , O b > = A B 2 O A 2 + O C 2 − 2 O A ⋅ O C ⋅ cos < O a , O c > = A C 2 O B 2 + O C 2 − 2 O B ⋅ O C ⋅ cos < O b , O c > = B C 2 (6-29) OA^2+OB^2-2OA\cdot OB\cdot \cos
两边同除 O C 2 OC^2 OC2,记 x = O A / O C x=OA/OC x=OA/OC, y = O B / O C y=OB/OC y=OB/OC,得
x 2 + y 2 − 2 x y cos < O a , O b > = A B 2 / O C 2 x 2 + 1 − 2 x cos < O a , O c > = A C 2 / O C 2 y 2 + 1 − 2 y cos < O b , O c > = B C 2 / O C 2 (6-30) x^2+y^2-2xy\cos
记 v = A B 2 / O C 2 , u v = B C 2 / O C 2 , w v = A C 2 / O C 2 v=A B^{2} / O C^{2}, u v=B C^{2} / O C^{2}, w v=A C^{2} / O C^{2} v=AB2/OC2,uv=BC2/OC2,wv=AC2/OC2,则
x 2 + y 2 − 2 x y cos < O a , O b > − v = 0 x 2 + 1 − 2 x cos < O a , O c > − w v = 0 y 2 + 1 − 2 y cos < O b , O c > − u v = 0 (6-31) x^2+y^2-2xy\cos
将第一个式子中的 v v v 代入后面两式,整理得
( 1 − u ) y 2 − u x 2 − 2 y cos < O b , O c > + 2 u x y cos < O a , O b > + 1 = 0 (1-u)y^2-ux^2-2y\cos
( 1 − w ) x 2 − w x 2 − 2 x cos < O a , O c > + 2 w x y cos < O a , O b > + 1 = 0 (6-32) (1-w)x^2-wx^2-2x\cos
注意,我们已知三个点的空间坐标及其相机投影,也就是说 u = B C 2 / A B 2 , w = A C 2 / A B 2 u=B C^{2} / A B^{2}, w=A C^{2} / A B^{2} u=BC2/AB2,w=AC2/AB2 已知,三个余弦值也已知。这样,可以将上式看成关于 x x x、 y y y 的二元二次方程。
该方程最多有四个解,用验证点计算最可能的解,从而得到三个点此时在相机坐标系下的 3D 坐标,之后再用 3D-3D 的点对,计算出相机运动(见 7.5 节)。
(1)除了上面的线性变换方法,我们还可以把 PnP 问题构建成一个关于重投影误差的非线性最小二乘问题。线性方法往往是 先求相机位姿,再求空间点位置,而非线性优化则是把他们同时看成优化变量。这种把 相机和三维点放在一起进行最小化 的问题,统称为 Bundle Adjustment(BA)。
(2)
假设我们已知 n n n 个三维空间点 P P P 和他们的投影 p p p,希望求出相机位姿 R \boldsymbol{R} R、 t \boldsymbol{t} t,它的李代数为 ξ \boldsymbol{\xi} ξ。假设其中某点的空间坐标为 P i = [ X i , Y i , Z i ] T \boldsymbol{P}_i=[X_i,Y_i,Z_i]^T Pi=[Xi,Yi,Zi]T,其投影的像素坐标为 u i = [ u i , v i ] T \boldsymbol{u}_i=[u_i,v_i]^T ui=[ui,vi]T,两者关系如下:
s i [ u i v i 1 ] = K exp ( ξ ∧ ) [ X i Y i Z i 1 ] (6-32) s_{i}\left[\begin{array}{l} u_{i} \\ v_{i} \\ 1 \end{array}\right]=\boldsymbol{K} \exp \left(\boldsymbol{\xi}^{\wedge}\right)\left[\begin{array}{c} X_{i} \\ Y_{i} \\ Z_{i} \\ 1 \end{array}\right] \tag{6-32} si uivi1 =Kexp(ξ∧) XiYiZi1 (6-32)
其中 s i s_i si 为深度。将上式写成矩阵形式
s i u i = K exp ( ξ ∧ ) P s_i\boldsymbol{u}_i=\boldsymbol{K} \exp \left(\boldsymbol{\xi}^{\wedge}\right)\boldsymbol{P} siui=Kexp(ξ∧)P
但是,由于噪声的存在,等式往往不会成立,而是会有偏差。因此,我们将误差求和,构建一个最小二乘问题,寻找最优的位姿,使得误差最小:
ξ ∗ = arg min ξ 1 2 ∑ i = 1 n ∥ e i ∥ 2 2 = arg min ξ 1 2 ∑ i = 1 n ∥ u i − 1 s i K exp ( ξ ∧ ) P i ∥ 2 2 (6-33) \boldsymbol{\xi}^{*}=\arg \min _{\boldsymbol{\xi}} \frac{1}{2} \sum_{i=1}^{n}\left\|\boldsymbol{e}_i\right\|_{2}^{2}=\arg \min _{\boldsymbol{\xi}} \frac{1}{2} \sum_{i=1}^{n}\left\|\boldsymbol{u}_{i}-\frac{1}{s_{i}} \boldsymbol{K} \exp \left(\boldsymbol{\xi}^{\wedge}\right) \boldsymbol{P}_{i}\right\|_{2}^{2} \tag{6-33} ξ∗=argξmin21i=1∑n∥ei∥22=argξmin21i=1∑n ui−si1Kexp(ξ∧)Pi 22(6-33)
注意,这里的误差采用非齐次坐标,即只有两维(最后一维误差一直为零)。
(3)前面我们已经讲过非线性优化方法,关键在于梯度的确定。这里将误差 e \boldsymbol{e} e 线性化:
e ( x + Δ x ) ≈ e ( x ) + J T Δ x (6-34) \boldsymbol{e}(\boldsymbol{x}+\Delta \boldsymbol{x}) \approx \boldsymbol{e}(\boldsymbol{x})+\boldsymbol{J}^{\mathrm{T}} \Delta \boldsymbol{x} \tag{6-34} e(x+Δx)≈e(x)+JTΔx(6-34)
其中,误差 e \boldsymbol{e} e 为 2 维, x \boldsymbol{x} x 为相机位姿(也就是变换矩阵的李代数)6 维,那么 J T \boldsymbol{J}^{\mathrm{T}} JT 就是 2 × 6 2 \times 6 2×6 维矩阵。这里的 J T \boldsymbol{J}^{\mathrm{T}} JT 是误差 e \boldsymbol{e} e 关于李代数的一阶导数,下面进行推导。
记点 P P P 变换到相机坐标系下的空间点坐标为 P ′ \boldsymbol{P'} P′,并且将前三维取出来(注意维度):
P ′ = ( exp ( ξ ∧ ) P ) 1 : 3 = [ X ′ , Y ′ , Z ′ ] T (6-35) \boldsymbol{P'}=(\exp \left(\boldsymbol{\xi}^{\wedge}\right)\boldsymbol{P})_{1:3}=[X',Y',Z']^T \tag{6-35} P′=(exp(ξ∧)P)1:3=[X′,Y′,Z′]T(6-35)
相机坐标再到像素坐标:
s u = K P ′ (6-36) s\boldsymbol{u}=\boldsymbol{K}\boldsymbol{P'} \tag{6-36} su=KP′(6-36)
展开
s [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X ′ Y ′ Z ′ ] (6-37) s\left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]=\left[\begin{array}{ccc} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] \tag{6-37} s uv1 = fx000fy0cxcy1 X′Y′Z′ (6-37)
利用第 3 行消去 s s s(也就是深度),得
u = f x X ′ Z ′ + c x , v = f y Y ′ Z ′ + c y (6-38) u=f_x\frac{X'}{Z'}+c_x, \quad v=f_y\frac{Y'}{Z'}+c_y \tag{6-38} u=fxZ′X′+cx,v=fyZ′Y′+cy(6-38)
我们对 ξ ∧ \boldsymbol{\xi}^{\wedge} ξ∧ 左乘扰动变量 δ ξ \delta \boldsymbol{\xi} δξ,然后考虑 e \boldsymbol{e} e 关于扰动量的导数(也就是 J T \boldsymbol{J}^T JT)
J T = ∂ e ∂ δ ξ = lim δ ξ → 0 e ( δ ξ ⊕ ξ ) − e ( ξ ) δ ξ = ∂ e ∂ P ′ ∂ P ′ ∂ δ ξ (6-39) \boldsymbol{J}^T=\frac{\partial \boldsymbol{e}}{\partial \delta \boldsymbol{\xi}}=\lim _{\delta \boldsymbol{\xi} \rightarrow 0} \frac{\boldsymbol{e}(\delta \boldsymbol{\xi} \oplus \boldsymbol{\xi})-\boldsymbol{e}(\boldsymbol{\xi})}{\delta \boldsymbol{\xi}}=\frac{\partial \boldsymbol{e}}{\partial \boldsymbol{P}^{\prime}} \frac{\partial \boldsymbol{P}^{\prime}}{\partial \delta \boldsymbol{\xi}} \tag{6-39} JT=∂δξ∂e=δξ→0limδξe(δξ⊕ξ)−e(ξ)=∂P′∂e∂δξ∂P′(6-39)
这里 ⊕ \oplus ⊕ 表示左乘。先求第一项
∂ e ∂ P ′ = − [ ∂ u ∂ X ′ ∂ u ∂ Y ′ ∂ u ∂ Z ′ ∂ v ∂ X ′ ∂ v ∂ Y ′ ∂ v ∂ Z ′ ] = − [ f x Z ′ 0 − f x X ′ Z ′ 2 0 f y Z ′ − f y Y ′ Z ′ 2 ] (6-40) \frac{\partial \boldsymbol{e}}{\partial \boldsymbol{P}^{\prime}}=-\left[\begin{array}{ccc} \frac{\partial u}{\partial X^{\prime}} & \frac{\partial u}{\partial Y^{\prime}} & \frac{\partial u}{\partial Z^{\prime}} \\ \frac{\partial v}{\partial X^{\prime}} & \frac{\partial v}{\partial Y^{\prime}} & \frac{\partial v}{\partial Z^{\prime}} \end{array}\right]=-\left[\begin{array}{ccc} \frac{f_{x}}{Z^{\prime}} & 0 & -\frac{f_{x} X^{\prime}}{Z^{\prime 2}} \\ 0 & \frac{f_{y}}{Z^{\prime}} & -\frac{f_{y} Y^{\prime}}{Z^{\prime 2}} \end{array}\right] \tag{6-40} ∂P′∂e=−[∂X′∂u∂X′∂v∂Y′∂u∂Y′∂v∂Z′∂u∂Z′∂v]=−[Z′fx00Z′fy−Z′2fxX′−Z′2fyY′](6-40)
第二项为变换后的空间点关于李代数的导数
∂ P ′ ∂ δ ξ = ∂ ( T P ) ∂ δ ξ = ( T P ) ⊙ = [ I − P ′ ∧ 0 T 0 T ] (6-41) \frac{\partial \boldsymbol{P}^{\prime}}{\partial \delta \boldsymbol{\xi}}=\frac{\partial(\boldsymbol{T} \boldsymbol{P})}{\partial \delta \boldsymbol{\xi}}=(\boldsymbol{T} \boldsymbol{P})^{\odot}=\left[\begin{array}{cc} \boldsymbol{I} & -\boldsymbol{P}^{\prime \wedge} \\ \mathbf{0}^{\mathrm{T}} & \mathbf{0}^{\mathrm{T}} \end{array}\right] \tag{6-41} ∂δξ∂P′=∂δξ∂(TP)=(TP)⊙=[I0T−P′∧0T](6-41)
取出前三维,即
∂ P ′ ∂ δ ξ = [ I − P ′ ∧ ] = [ 1 0 0 0 Z − Y 0 1 0 − Z 0 X 0 0 1 Y − X 0 ] (6-42) \frac{\partial \boldsymbol{P}^{\prime}}{\partial \delta \boldsymbol{\xi}}=\left[\begin{array}{cc} \boldsymbol{I} & -\boldsymbol{P}^{\prime \wedge} \end{array}\right]=\left[\begin{array}{cccccc} 1 & 0 & 0 & 0 & Z & -Y \\ 0 & 1 & 0 & -Z & 0 & X \\ 0 & 0 & 1 & Y & -X & 0 \\ \end{array}\right] \tag{6-42} ∂δξ∂P′=[I−P′∧]= 1000100010−ZYZ0−X−YX0 (6-42)
两项相乘,得到 2 × 6 2 \times 6 2×6 的雅克比矩阵
J T = ∂ e ∂ δ ξ = − [ f x Z ′ 0 − f x X ′ Z ′ 2 − f x X ′ Y ′ Z ′ 2 f x + f x X ′ 2 Z ′ 2 − f x Y ′ Z ′ 0 f y Z ′ − f y Y ′ Z ′ 2 − f y − f y Y ′ 2 Z ′ 2 f y X ′ Y ′ Z ′ 2 f y X ′ Z ′ ] (6-43) \boldsymbol{J}^T=\frac{\partial \boldsymbol{e}}{\partial \delta \boldsymbol{\xi}}=-\left[\begin{array}{cccccc} \frac{f_{x}}{Z^{\prime}} & 0 & -\frac{f_{x} X^{\prime}}{Z^{\prime 2}} & -\frac{f_{x} X^{\prime} Y^{\prime}}{Z^{\prime 2}} & f_{x}+\frac{f_{x} X^{\prime 2}}{Z^{\prime 2}} & -\frac{f_{x} Y^{\prime}}{Z^{\prime}} \\ 0 & \frac{f_{y}}{Z^{\prime}} & -\frac{f_{y} Y^{\prime}}{Z^{\prime 2}} & -f_{y}-\frac{f_{y} Y^{\prime 2}}{Z^{\prime 2}} & \frac{f_{y} X^{\prime} Y^{\prime}}{Z^{\prime 2}} & \frac{f_{y} X^{\prime}}{Z^{\prime}} \end{array}\right] \tag{6-43} JT=∂δξ∂e=−[Z′fx00Z′fy−Z′2fxX′−Z′2fyY′−Z′2fxX′Y′−fy−Z′2fyY′2fx+Z′2fxX′2Z′2fyX′Y′−Z′fxY′Z′fyX′](6-43)
(4)除了优化位姿,我们还希望优化特征点的空间位置,也就是需要求误差 e \boldsymbol{e} e 关于空间点 P \boldsymbol{P} P 的导数。由链式求导法则:
∂ e ∂ P = ∂ e ∂ P ′ ∂ P ′ ∂ P (6-44) \frac{\partial \boldsymbol{e}}{\partial \boldsymbol{P}}=\frac{\partial \boldsymbol{e}}{\partial \boldsymbol{P}^{\prime}} \frac{\partial \boldsymbol{P}^{\prime}}{\partial \boldsymbol{P}} \tag{6-44} ∂P∂e=∂P′∂e∂P∂P′(6-44)
第一项已由式(6-40)求出。关于第二项,有
P ′ = R P + t \boldsymbol{P}^{\prime}=\boldsymbol{RP}+\boldsymbol{t} P′=RP+t
则
∂ P ′ ∂ P = R \frac{\partial \boldsymbol{P}^{\prime}}{\partial \boldsymbol{P}}=\boldsymbol{R} ∂P∂P′=R
合并第一、二两项,得
∂ e ∂ P = − [ f x Z ′ 0 − f x X ′ Z ′ 2 0 f y Z ′ − f y Y ′ Z ′ 2 ] R (6-45) \frac{\partial \boldsymbol{e}}{\partial \boldsymbol{P}}=-\left[\begin{array}{ccc} \frac{f_{x}}{Z^{\prime}} & 0 & -\frac{f_{x} X^{\prime}}{Z^{\prime 2}} \\ 0 & \frac{f_{y}}{Z^{\prime}} & -\frac{f_{y} Y^{\prime}}{Z^{\prime 2}} \end{array}\right]\boldsymbol{R} \tag{6-45} ∂P∂e=−[Z′fx00Z′fy−Z′2fxX′−Z′2fyY′]R(6-45)
至此,我们推导出了观测相机方程关于相机位姿和特征点的两个导数矩阵,后续进行优化迭代。
假设有一组匹配好的 3D 点(例如对两幅 RGB-D 图像进行匹配):
P = { p 1 , ⋯ , p n } , P ′ = { p 1 ′ , ⋯ , p n ′ } \boldsymbol{P}=\left\{\boldsymbol{p}_{1}, \cdots, \boldsymbol{p}_{n}\right\}, \quad \boldsymbol{P}^{\prime}=\left\{\boldsymbol{p}_{1}^{\prime}, \cdots, \boldsymbol{p}_{n}^{\prime}\right\} P={p1,⋯,pn},P′={p1′,⋯,pn′}
现在,想要找一个欧式变换 R \boldsymbol{R} R、 t \boldsymbol{t} t,使得
∀ i , p i = R p i ′ + t \forall i, \boldsymbol{p}_{i}=\boldsymbol{R} \boldsymbol{p}_{i}^{\prime}+\boldsymbol{t} ∀i,pi=Rpi′+t
采用迭代最近点(ICP)求解:一种是利用线性代数的求解,一种是利用非线性优化方式的求解。
(1)定义第 i i i 对点的误差项为:
e i = p i − ( R p i ′ + t ) (6-46) \boldsymbol{e}_i=\boldsymbol{p}_i-(\boldsymbol{Rp}_i^{\prime}+\boldsymbol{t}) \tag{6-46} ei=pi−(Rpi′+t)(6-46)
构建最小二乘问题,求出使误差平方和最小的 R \boldsymbol{R} R、 t \boldsymbol{t} t:
min R , t 1 2 ∑ i = 1 n ∥ ( p i − ( R p i ′ + t ) ) ∥ 2 2 (6-47) \min _{\boldsymbol{R}, \boldsymbol{t}} \frac{1}{2} \sum_{i=1}^{n}\left\|\left(\boldsymbol{p}_{i}-\left(\boldsymbol{R} \boldsymbol{p}_i^{\prime}+\boldsymbol{t}\right)\right)\right\|_{2}^{2} \tag{6-47} R,tmin21i=1∑n∥(pi−(Rpi′+t))∥22(6-47)
定义两组点的质心:
p = 1 n ∑ i = 1 n ( p i ) , p ′ = 1 n ∑ i = 1 n ( p i ′ ) (6-48) \boldsymbol{p}=\frac{1}{n}\sum_{i=1}^{n}(\boldsymbol{p_i}),\quad \boldsymbol{p'}=\frac{1}{n}\sum_{i=1}^{n}(\boldsymbol{p'_i}) \tag{6-48} p=n1i=1∑n(pi),p′=n1i=1∑n(pi′)(6-48)
则式(4-47)可写为
1 2 ∑ i = 1 n ∥ p i − ( R p i ′ + t ) ∥ 2 = 1 2 ∑ i = 1 n ∥ p i − R p i ′ − t − p + R p ′ + p − R p ′ ∥ 2 = 1 2 ∑ i = 1 n ∥ ( p i − p − R ( p i ′ − p ′ ) ) + ( p − R p ′ − t ) ∥ 2 = 1 2 ∑ i = 1 n ( ∥ p i − p − R ( p i ′ − p ′ ) ∥ 2 + ∥ p − R p ′ − t ∥ 2 + 2 ( p i − p − R ( p i ′ − p ′ ) ) T ( p − R p ′ − t ) ) (6-49) \begin{aligned} \frac{1}{2} \sum_{i=1}^{n}\left\|\boldsymbol{p}_{i}-\left(\boldsymbol{R} \boldsymbol{p}_{i}{ }^{\prime}+\boldsymbol{t}\right)\right\|^{2}=& \frac{1}{2} \sum_{i=1}^{n}\left\|\boldsymbol{p}_{i}-\boldsymbol{R} \boldsymbol{p}_{i}{ }^{\prime}-\boldsymbol{t}-\boldsymbol{p}+\boldsymbol{R} \boldsymbol{p}^{\prime}+\boldsymbol{p}-\boldsymbol{R} \boldsymbol{p}^{\prime}\right\|^{2} \\ =& \frac{1}{2} \sum_{i=1}^{n}\left\|\left(\boldsymbol{p}_{i}-\boldsymbol{p}-\boldsymbol{R}\left(\boldsymbol{p}_{i}{ }^{\prime}-\boldsymbol{p}^{\prime}\right)\right)+\left(\boldsymbol{p}-\boldsymbol{R} \boldsymbol{p}^{\prime}-\boldsymbol{t}\right)\right\|^{2} \\ =& \frac{1}{2} \sum_{i=1}^{n}\left(\left\|\boldsymbol{p}_{i}-\boldsymbol{p}-\boldsymbol{R}\left(\boldsymbol{p}_{i}{ }^{\prime}-\boldsymbol{p}^{\prime}\right)\right\|^{2}+\left\|\boldsymbol{p}-\boldsymbol{R} \boldsymbol{p}^{\prime}-\boldsymbol{t}\right\|^{2}+\right.\\ &\left.2\left(\boldsymbol{p}_{i}-\boldsymbol{p}-\boldsymbol{R}\left(\boldsymbol{p}_{i}{ }^{\prime}-\boldsymbol{p}^{\prime}\right)\right)^{\mathrm{T}}\left(\boldsymbol{p}-\boldsymbol{R} \boldsymbol{p}^{\prime}-\boldsymbol{t}\right)\right) \end{aligned} \tag{6-49} 21i=1∑n∥pi−(Rpi′+t)∥2===21i=1∑n∥pi−Rpi′−t−p+Rp′+p−Rp′∥221i=1∑n∥(pi−p−R(pi′−p′))+(p−Rp′−t)∥221i=1∑n(∥pi−p−R(pi′−p′)∥2+∥p−Rp′−t∥2+2(pi−p−R(pi′−p′))T(p−Rp′−t))(6-49)
注意到,后一项 ( p i − p − R ( p i ′ − p ′ ) ) \left(\boldsymbol{p}_{i}-\boldsymbol{p}-\boldsymbol{R}\left(\boldsymbol{p}_{i}{ }^{\prime}-\boldsymbol{p}^{\prime}\right)\right) (pi−p−R(pi′−p′)) 求和后等于零。则目标函数变为
min R , t J = 1 2 ∑ i = 1 n ( ∥ p i − p − R ( p i ′ − p ′ ) ∥ 2 + ∥ p − R p ′ − t ∥ 2 (6-50) \min _{\boldsymbol{R}, \boldsymbol{t}} J= \frac{1}{2} \sum_{i=1}^{n}\left(\left\|\boldsymbol{p}_{i}-\boldsymbol{p}-\boldsymbol{R}\left(\boldsymbol{p}_{i}{ }^{\prime}-\boldsymbol{p}^{\prime}\right)\right\|^{2}+\left\|\boldsymbol{p}-\boldsymbol{R} \boldsymbol{p}^{\prime}-\boldsymbol{t}\right\|^{2}\right. \tag{6-50} R,tminJ=21i=1∑n(∥pi−p−R(pi′−p′)∥2+∥p−Rp′−t∥2(6-50)
观察左右两项,发现左边只和旋转 R \boldsymbol{R} R 有关,而右边和 R \boldsymbol{R} R、 t \boldsymbol{t} t 都有关。因此,只要我们获得了 R \boldsymbol{R} R,再令第二项等于零就可求出 t \boldsymbol{t} t。于是,ICP 可分为三个步骤求解:
——————————————————————————————————————————————————————————
① 计算两组点的质心 p \boldsymbol{p} p`、 p ′ \boldsymbol{p'} p′,然后计算每个点的去质心坐标:
q i = p i − p , q i ′ = p i ′ − p ′ \boldsymbol{q_i}=\boldsymbol{p_i}-\boldsymbol{p},\quad \boldsymbol{q'_i}=\boldsymbol{p'_i}-\boldsymbol{p'} qi=pi−p,qi′=pi′−p′
② 先优化第一项,求出 R \boldsymbol{R} R
R ∗ = arg min R 1 2 ∑ i = 1 n ∥ q i − R q i ′ ∥ 2 \boldsymbol{R}^*=\arg \min_{\boldsymbol{R}}\frac{1}{2} \sum_{i=1}^{n}\|\boldsymbol{q_i}-\boldsymbol{R}\boldsymbol{q'_i}\|^2 R∗=argRmin21i=1∑n∥qi−Rqi′∥2
③ 令第二项等于零,求出 t \boldsymbol{t} t
t ∗ = p − R p ′ \boldsymbol{t}^*=\boldsymbol{p}-\boldsymbol{R}\boldsymbol{p'} t∗=p−Rp′
——————————————————————————————————————————————————————————
下面主要进行第二步的推导,以求出 R \boldsymbol{R} R:
1 2 ∑ i = 1 n ∥ q i − R q i ′ ∥ 2 = 1 2 ∑ i = 1 n ( q i T q i + q i ′ T R T R q i ′ − 2 q i T R q i ′ ) (6-51) \frac{1}{2} \sum_{i=1}^{n}\|\boldsymbol{q_i}-\boldsymbol{R}\boldsymbol{q'_i}\|^2=\frac{1}{2} \sum_{i=1}^{n}(\boldsymbol{q_i}^T\boldsymbol{q_i}+\boldsymbol{q'_i}^T\boldsymbol{R}^T\boldsymbol{R}\boldsymbol{q'_i}-2\boldsymbol{q_i}^T\boldsymbol{R}\boldsymbol{q'_i}) \tag{6-51} 21i=1∑n∥qi−Rqi′∥2=21i=1∑n(qiTqi+qi′TRTRqi′−2qiTRqi′)(6-51)
注意到,第一项和 R \boldsymbol{R} R 无关,第二项中 R T R = I \boldsymbol{R^TR=I} RTR=I,亦与 R \boldsymbol{R} R 无关。因此,目标优化函数变为
∑ i = 1 n − q i T R q i ′ = ∑ i = 1 n − t r ( R q i ′ q i T ) = − t r ( R ∑ i = 1 n q i ′ q i T ) (6-52) \sum_{i=1}^{n}-\boldsymbol{q_i}^\mathrm{T}\boldsymbol{R}\boldsymbol{q'_i}=\sum_{i=1}^{n}-\mathrm{tr}(\boldsymbol{R}\boldsymbol{q'_i}\boldsymbol{q_i}^T)=-\mathrm{tr}(\boldsymbol{R}\sum_{i=1}^{n}\boldsymbol{q'_i}\boldsymbol{q_i}^\mathrm{T}) \tag{6-52} i=1∑n−qiTRqi′=i=1∑n−tr(Rqi′qiT)=−tr(Ri=1∑nqi′qiT)(6-52)
注意,这里用了矩阵内积和迹的关系。
定义
W = q i q i ′ T (6-53) \boldsymbol{W}=\boldsymbol{q_i}\boldsymbol{q'_i}^\mathrm{T} \tag{6-53} W=qiqi′T(6-53)
W \boldsymbol{W} W 是一个 3 × 3 3\times3 3×3 的矩阵,对其进行 SVD 分解,得
W = U Σ V T \boldsymbol{W}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V}^\mathrm{T} W=UΣVT
当 W \boldsymbol{W} W 满秩时,求得
R = U V T (6-54) \boldsymbol{R}=\boldsymbol{U}\boldsymbol{V}^\mathrm{T} \tag{6-54} R=UVT(6-54)
若 R \boldsymbol{R} R 的行列式为负,则取 − R -\boldsymbol{R} −R 作为最优值。
用李代数表示位姿,则目标函数可写成
min ξ = 1 2 ∑ i = 1 n ∥ ( p i − exp ( ξ ∧ ) p i ′ ) ∥ 2 2 (6-55) \min _{\boldsymbol{\xi}} = \frac{1}{2} \sum_{i=1}^{n}\|(\boldsymbol{p}_{i}-\exp (\boldsymbol{\xi}^{\wedge})\boldsymbol{p'_i})\|_{2}^{2} \tag{6-55} ξmin=21i=1∑n∥(pi−exp(ξ∧)pi′)∥22(6-55)
类似式(6-39)、(6-40)、(6-41),可推导单个误差项关于位姿的数,即
∂ e ∂ δ ξ = ∂ e ∂ p ∂ p ∂ δ ξ = − 1 ⋅ ( exp ( ξ ∧ ) p i ′ ) ⊙ = − ( exp ( ξ ∧ ) p i ′ ) ⊙ (6-56) \frac{\partial \boldsymbol{e}}{\partial \delta \boldsymbol{\xi}}=\frac{\partial \boldsymbol{e}}{\partial \boldsymbol{p}}\frac{\partial \boldsymbol{p}}{\partial \delta \boldsymbol{\xi}}=-1\cdot(\exp (\boldsymbol{\xi}^{\wedge})\boldsymbol{p'_i})^{\odot}=-(\exp (\boldsymbol{\xi}^{\wedge})\boldsymbol{p'_i})^{\odot} \tag{6-56} ∂δξ∂e=∂p∂e∂δξ∂p=−1⋅(exp(ξ∧)pi′)⊙=−(exp(ξ∧)pi′)⊙(6-56)
求出梯度后,便可不断迭代优化, 直至求出最优解。