3D-3D:ICP

假设有一组配对好的3D点(例如对两幅RGB-D图像进行了匹配):

P s = { p s 1 , ⋯   , p s n } , P t = { t p t 1 , ⋯   , p t n } \boldsymbol{P}_s=\{\boldsymbol{p}_{s_1},\cdots,\boldsymbol{p}_{s_n}\},\quad \boldsymbol{P}_t=\{{}^t\boldsymbol{p}_{t_1},\cdots,\boldsymbol{p}_{t_n}\} Ps={ps1,,psn},Pt={tpt1,,ptn}
现在想要找一个欧式变换 R , t \boldsymbol{R},\boldsymbol{t} R,t,使得
∀ i , p t i = R p s i + t \forall i,\boldsymbol{p}_{t_i}=\boldsymbol{R}\boldsymbol{p}_{s_i}+\boldsymbol{t} i,pti=Rpsi+t
由于噪声等的影响,一般上式无法全部同时成立,因此转化为最小二乘优化问题求解

SVD分解求解

首先定义第 i i i对点的误差项:
e i = p t i − ( R p s i + t ) \boldsymbol{e}_{i}=\boldsymbol{p}_{t_i}-\left( \boldsymbol{R} \boldsymbol{p}_{s_i}+\boldsymbol{t}\right) ei=pti(Rpsi+t)
然后,构建最小二乘问题,求使误差平方和达到极小的 R , t \boldsymbol{R},\boldsymbol{t} R,t
min ⁡ R , t 1 2 ∑ i = 1 n ∥ p t i − ( R p s i + t ) ∥ 2 2 \min _{\boldsymbol{R},\boldsymbol{t}}\dfrac{1}{2}\sum ^{n}_{i=1}\| \boldsymbol{p} _{t_i}-\left( \boldsymbol{R} \boldsymbol{p} _{s_i}+\boldsymbol{t}\right)\| _{2}^{2} R,tmin21i=1npti(Rpsi+t)22
定义两组点的质心:
p s = 1 n ∑ i = 1 n p s i p t = 1 n ∑ i = 1 n p t i \boldsymbol{p}_s=\dfrac{1}{n}\sum ^{n}_{i=1}\boldsymbol{p}_{s_i}\quad \boldsymbol{p}_t=\dfrac{1}{n}\sum ^{n}_{i=1}\boldsymbol{p}_{t_i} ps=n1i=1npsipt=n1i=1npti
对误差函数做如下处理:
1 2 ∑ i = 1 n ∥ p t i − ( R p s i + t ) ∥ = 1 2 ∑ i = 1 n ∥ p t i − R p s i − t + ( R p s − p t ) − ( R p s − p t ) ∥ 2 = 1 2 ∑ i = 1 n ∥ [ p t i − p t − R ( p s i − p s ) ] + ( p t − R p s − t ) ∥ 2 = 1 2 ∑ i = 1 n { ∥ p t i − p t − R ( p s i − p s ) ∥ 2 + ∥ p t − R p s − t ∥ 2 + 2 [ p t i − p t − R ( p s i − p s ) ] T ( p t − R p s − t ) } \begin{aligned} \dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{p}_{t_i}-\left( \boldsymbol{R} \boldsymbol{p} _{s_i}+\boldsymbol{t}\right) \right\| &=\dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{p} _{t_i}-\boldsymbol{R} \boldsymbol{p} _{s_i}-\boldsymbol{t}+(\boldsymbol{R}\boldsymbol{p}_s- \boldsymbol{p}_t)-(\boldsymbol{R}\boldsymbol{p}_s- \boldsymbol{p}_t)\right\| ^{2}\\ &=\dfrac{1}{2}\sum ^{n}_{i=1}\left\| \left[ \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right] +\left( \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right) \right\| ^{2}\\ &=\dfrac{1}{2}\sum ^{n}_{i=1}\left\{ \left\| \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right\| ^{2}+\left\| \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right\| ^{2}+ 2\left[ \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right] ^{T}\left( \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right) \right\} \end{aligned} 21i=1n pti(Rpsi+t) =21i=1n ptiRpsit+(Rpspt)(Rpspt) 2=21i=1n [ptiptR(psips)]+(ptRpst) 2=21i=1n{ ptiptR(psips) 2+ptRpst2+2[ptiptR(psips)]T(ptRpst)}
注意交叉项部分中 [ p t i − p t − R ( p s i − p s ) ] \left[ \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right] [ptiptR(psips)]在求和后为零,因此目标函数可以简化为:
min ⁡ R , t J = 1 2 ∑ i = 1 n [ ∥ p t i − p t − R ( p s i − p s ) ∥ 2 + ∥ p t − R p s − t ∥ 2 ] \min _{\boldsymbol{R},\boldsymbol{t}}J=\dfrac{1}{2}\sum ^{n}_{i=1}\left[ \left\| \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right\| ^{2}+\left\| \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right\| ^{2}\right] R,tminJ=21i=1n[ ptiptR(psips) 2+ptRpst2]
仔细观察左右两项,发现左边只与旋转矩阵 R \boldsymbol{R} R有关,而右边既有 R \boldsymbol{R} R又有 t \boldsymbol{t} t,但只与质心相关,只要求得最优的 R ∗ \boldsymbol{R}^{\ast} R,令第二项为零就能得到 t \boldsymbol{t} t

  1. 计算两组点的质心位置 p s , p t \boldsymbol{p}_s,\boldsymbol{p}_t ps,pt,然后计算每个点的去质心坐标:
    q s i = p s i − p s q t i = p t i − p t \boldsymbol{q}_{s_i}=\boldsymbol{p}_{s_i}-\boldsymbol{p}_s\quad \boldsymbol{q}_{t_i}=\boldsymbol{p} _{t_i}-\boldsymbol{p}_t qsi=psipsqti=ptipt
  2. 根据以下优化问题计算旋转矩阵:
    R ∗ = arg ⁡ min ⁡ R 1 2 ∑ i = 1 n ∥ q t i − R q s i ∥ 2 \boldsymbol{R}^{\ast }=\arg \min _{\boldsymbol{R}}\dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{q}_{t_i}-\boldsymbol{R} \boldsymbol{q}_{s_i}\right\| ^{2} R=argRmin21i=1n qtiRqsi 2
  3. 令第二项为零计算出 t \boldsymbol{t} t
    t ∗ = p t − R p s \boldsymbol{t}^{\ast}=\boldsymbol{p}_t-\boldsymbol{R}\boldsymbol{p}_s t=ptRps

展开关于 R \boldsymbol{R} R的误差项,得
1 2 ∑ i = 1 n ∥ q t i − R q s i ∥ 2 = 1 2 ∑ i = 1 n ( q t i T q t i + q s i T R T R q s i − 2 q t i T R q s i ) ∑ i = 1 n − q t i T R q s i = ∑ i = 1 n − t r ( R q s i q t i T ) = − t r ( R ∑ i = 1 n q s i q t i T ) = − t r ( R W T ) \begin{aligned} \dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{q}_{t_i}-\boldsymbol{Rq}_{s_i}\right\| ^{2}&=\dfrac{1}{2}\sum ^{n}_{i=1}\left( \boldsymbol{q}_{t_i}^{T}\boldsymbol{q}_{t_i}+\boldsymbol{q}_{s_i}^{T}\boldsymbol{R}^{T}\boldsymbol{R}\boldsymbol{q}_{s_i}-2\boldsymbol{q}_{t_i}^{T}\boldsymbol{R}\boldsymbol{q}_{s_i}\right)\\ \sum ^{n}_{i=1}-\boldsymbol{q}_{t_i}^T \boldsymbol{R} \boldsymbol{q}_{s_i}&=\sum ^{n}_{i=1}-{\rm tr}\left( \boldsymbol{Rq}_{s_i}\boldsymbol{q}_{t_i}^{T}\right) =-{\rm tr}\left( \boldsymbol{R}\sum ^{n}_{i=1}\boldsymbol{q}_{s_i}\boldsymbol{q}_{t_i}^T\right) =-{\rm tr}\left( \boldsymbol{RW}^{T}\right) \end{aligned} 21i=1n qtiRqsi 2i=1nqtiTRqsi=21i=1n(qtiTqti+qsiTRTRqsi2qtiTRqsi)=i=1ntr(RqsiqtiT)=tr(Ri=1nqsiqtiT)=tr(RWT)
定义矩阵 W = ∑ i = 1 n q s i q t i T \boldsymbol{W}=\sum ^{n}_{i=1}\boldsymbol{q}_{s_i}\boldsymbol{q}_{t_i}^T W=i=1nqsiqtiT,对 W \boldsymbol{W} W进行SVD分解,得
W = U Σ V T \boldsymbol{W}=\boldsymbol{U\Sigma V}^T W=UΣVT
由最优性定理1可得:
max ⁡ R t r ( R W T ) = max ⁡ R t r ( R V Σ U T ) = max ⁡ R t r [ ( R V U T ) ⏟ 正交矩阵 ( U Σ U T ) ⏟ 正半定矩阵 ] = t r ( U Σ U T ) \begin{aligned} \max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RW}^{T}\right) &=\max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RV\Sigma U}^{T }\right) \\ &=\max _{\boldsymbol{R}}{\rm tr}\left[\underbrace{ \left( \boldsymbol{RVU}^{T}\right)}_{正交矩阵} \underbrace{\left( \boldsymbol{U\Sigma U}^{T}\right)}_{正半定矩阵} \right] ={\rm tr} \left( \boldsymbol{U\Sigma U}^{T}\right) \end{aligned} Rmaxtr(RWT)=Rmaxtr(RVΣUT)=Rmaxtr 正交矩阵 (RVUT)正半定矩阵 (UΣUT) =tr(UΣUT)
只有当 R V U T = I \boldsymbol{RVU}^{T}=\bf{I} RVUT=I,即 R = U V T \boldsymbol{R}=\boldsymbol{UV}^T R=UVT时,括号内变为正半定矩阵,取得最大值。如果此时 R \boldsymbol{R} R的行列式为负,则取 − R -\boldsymbol{R} R作为最优值。

另一种更简单的证明方法:
max ⁡ R t r ( R W T ) = max ⁡ R t r ( R V Σ U T ) a s s u m e   S = R V = max ⁡ R t r ( S Σ U T ) \begin{aligned} \max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RW}^{T}\right) &=\max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RV\Sigma U}^{T }\right) \quad \rm{assume}\ \boldsymbol{S}=\boldsymbol{RV}\\ &=\max _{\boldsymbol{R}}{\rm tr}\left(\boldsymbol{S}\boldsymbol{\Sigma}\boldsymbol{U}^T\right) \end{aligned} Rmaxtr(RWT)=Rmaxtr(RVΣUT)assume S=RV=Rmaxtr(SΣUT)
t r ( S Σ U T ) = t r ( [ s 1 s 2 s 3 ] [ σ 1 σ 2 σ 3 ] [ u 1 T u 2 T u 3 T ] ) = t r ( σ 1 s 1 u 1 T + σ 2 s 2 u 2 T + σ 3 s 3 u 3 T ) = σ 1 u 1 T s 1 + σ 2 u 2 T s 2 + σ 3 u 3 T s 3 \begin{aligned} {\rm tr}(\boldsymbol{S\Sigma U}^T) &={\rm tr}(\begin{bmatrix}\boldsymbol{s}_1&\boldsymbol{s}_2&\boldsymbol{s}_3\end{bmatrix}\begin{bmatrix}\sigma_1&&\\&\sigma_2&\\&&\sigma_3\end{bmatrix}\begin{bmatrix}\boldsymbol{u}_1^T\\\boldsymbol{u}_2^T\\\boldsymbol{u}_3^T\end{bmatrix}) \\ &={\rm tr}(\sigma_1\boldsymbol{s}_1\boldsymbol{u}_1^T+\sigma_2\boldsymbol{s}_2\boldsymbol{u}_2^T+\sigma_3\boldsymbol{s}_3\boldsymbol{u}_3^T) \\ &=\sigma_1\boldsymbol{u}_1^T\boldsymbol{s}_1+\sigma_2\boldsymbol{u}_2^T\boldsymbol{s}_2+\sigma_3\boldsymbol{u}_3^T\boldsymbol{s}_3 \end{aligned} tr(SΣUT)=tr([s1s2s3] σ1σ2σ3 u1Tu2Tu3T )=tr(σ1s1u1T+σ2s2u2T+σ3s3u3T)=σ1u1Ts1+σ2u2Ts2+σ3u3Ts3
由于 S \boldsymbol{S} S U \boldsymbol{U} U 都是 3 × 3 3\times 3 3×3的正交矩阵,因此
∥ s 1 ∥ = ∥ s 2 ∥ = ∥ s 3 ∥ = ∥ u 1 ∥ = ∥ u 2 ∥ = ∥ u 3 ∥ = 1 \|\bm s_1\|=\|\bm s_2\|=\|\bm s_3\|=\|\bm u_1\|=\|\bm u_2\|=\|\bm u_3\|=1 s1=s2=s3=u1=u2=u3=1
进而
σ 1 u 1 T s 1 + σ 2 u 2 T s 2 + σ 3 u 3 T s 3 ⩽ σ 1 + σ 2 + σ 3 \sigma_1\boldsymbol{u}_1^T\boldsymbol{s}_1+\sigma_2\boldsymbol{u}_2^T\boldsymbol{s}_2+\sigma_3\boldsymbol{u}_3^T\boldsymbol{s}_3\leqslant\sigma_1+\sigma_2+\sigma_3 σ1u1Ts1+σ2u2Ts2+σ3u3Ts3σ1+σ2+σ3
当且仅当 s 1 \boldsymbol{s}_1 s1 u 1 \boldsymbol{u}_1 u1 同方向、 s 2 \boldsymbol{s}_2 s2 u 2 \boldsymbol{u}_2 u2 同方向、 s 3 \boldsymbol{s}_3 s3 u 3 \boldsymbol{u}_3 u3 同方向时等号成立,此时 S = U \boldsymbol{S}=\boldsymbol{U} S=U ,即 R V = U \boldsymbol{RV}=\boldsymbol{U} RV=U , R = U V T \boldsymbol{R}=\boldsymbol{UV}^T R=UVT

非线性优化求解

min ⁡ ξ 1 2 ∑ i = 1 n ∥ ( p t i − exp ⁡ ( ξ ∧ ) p s i ∥ 2 2 \min _{\bm \xi }\dfrac{1}{2}\sum ^{n}_{i=1}\| ( \boldsymbol{p}_{t_i}-\exp \left( \boldsymbol{\xi} ^{\wedge}\right) \boldsymbol{p}_{s_i}\| _{2}^{2} ξmin21i=1n(ptiexp(ξ)psi22
单个误差项关于位姿的求导参考2,使用李代数扰动模型:
∂ e ∂ δ ξ = − ( exp ⁡ ( ξ ∧ ) p s i ) ⊙ \dfrac{\partial \boldsymbol{e}}{\partial \delta \boldsymbol{\xi} }=-\left( \exp \left( \boldsymbol{\xi} ^{\wedge}\right) \boldsymbol{p}_{s_i}\right) ^{\odot} δξe=(exp(ξ)psi)


  1. 定理:一个正交矩阵 B \boldsymbol{B} B乘以一个正半定矩阵 A A T \boldsymbol{AA}^T AAT的迹小于等于正半定矩阵 A A T \boldsymbol{AA}^T AAT的迹
    t r ( A A T ) ⩾ t r ( B A A T ) ∀ B ∈ U 3 × 3 t r ( B A A T ) = t r ( A T B A ) = ∑ i a i T B a i ⩽ ∑ i ( a i T a i ) ( a i T B T B a i ) = ∑ i a i T a i = t r ( A T A ) = t r ( A A T ) {\rm tr}\left( \boldsymbol{AA}^{T}\right) \geqslant {\rm tr}\left( \boldsymbol{BAA}^{T}\right) \quad \forall \boldsymbol{B}\in \mathbb{U}^{3\times 3}\\ {\rm tr}\left( \boldsymbol{BAA}^{T}\right) = {\rm tr}\left( \boldsymbol{A}^{T}\boldsymbol{BA}\right) =\sum _{i} \boldsymbol{a}_i^{T}\boldsymbol{Ba}_{i}\leqslant \sum _{i}\sqrt{\left( \boldsymbol{a}_i^{T}\boldsymbol{a}_{i}\right) \left( \boldsymbol{a}_i^{T}\boldsymbol{B}^{T}\boldsymbol{Ba}_{i}\right) }\\ =\sum _{i} \boldsymbol{a}_i^{T}\boldsymbol{a}_{i} = {\rm tr}\left( \boldsymbol{A}^{T}\boldsymbol{A}\right) ={\rm tr}\left( \boldsymbol{AA}^{T}\right) tr(AAT)tr(BAAT)BU3×3tr(BAAT)=tr(ATBA)=iaiTBaii(aiTai)(aiTBTBai) =iaiTai=tr(ATA)=tr(AAT) ↩︎

  2. 李群李代数求导 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shilong Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值