SVD求解ICP问题
Background
ICP(Iterative Closest Point)问题,迭代最近点。已知一组三维点在两个坐标系中的坐标表示,求这两个坐标系之间的变换关系,称为ICP问题。
最开始想到这个问题,是想进行手眼标定,有一台机械臂以及一个深度相机,如何确定相机坐标系和机械臂坐标系之间的变换关系?后来想使用接口将机械臂末端移动至某个位姿,在深度相机图像中标出该点位置(通过专门的标注工具),这样得到了一个三维点在两个坐标系下的表示,这实际构建了一个方程组。设变换矩阵为 T T T,点在两个坐标系下的表示为 p , p ′ p,p' p,p′,则方程组可表示为 p = T × p ′ p=T\\times p' p=T×p′。
一维情形只需要一个点,就可以基本确定两个坐标系的关系;二维情形需要两个点,只有一个点的话,两个坐标系可以绕该点进行旋转;进而推之,三维情形至少需要三个点。但是,采样过程是存在误差的,因此需要增加数据点控制误差。
ICP问题也常常在SLAM和无人驾驶的研究中出现,也称为3D点云之间的匹配问题,传感器外参的标定问题。
SVD求解ICP问题
有两组点 P = { p 1 , p 2 , . . . , p n } P=\\{p_1,p_2,...,p_n\\} P={p1,p2,...,pn}和 P ′ = { p 1 ′ , p 2 ′ , . . . , p n ′ } P'=\\{p_1',p_2',...,p_n'\\} P′={p1′,p2′,...,pn′},需要找到到一组参数 { R , t } \\{R,t\\} {R,t}表示这两组点之间“最有可能的变换关系”,可以构建最小二乘问题如下
m i n R , t J = 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) ∣ ∣ 2 s . t . R T R = I min_{R,t}J=\\frac{1}{2}\\sum_{i=1}^{n}||p_i-(Rp_i'+t)||^2\\\\ s.t. R^TR=I minR,tJ=21i=1∑n∣∣pi−(Rpi′+t)∣∣2s.t.RTR=I
Solution
首先,去质心坐标;
p = 1 n ∑ i = 1 n p i , p ′ = 1 n ∑ i = 1 n p i ′ p=\\frac{1}{n}\\sum_{i=1}^np_i,p'=\\frac{1}{n}\\sum_{i=1}^np_i' p=n1∑i=1npi,p′=n1∑i=1npi′
q i = p i − p , q i ′ = p i ′ − p ′ q_i=p_i-p,q_i'=p_i'-p' qi=pi−p,qi′=pi′−p′
误差函数化简如下
J = 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) ∣ ∣ 2 J=\\frac{1}{2}\\sum_{i=1}^{n}||p_i-(Rp_i'+t)||^2 J=21∑i=1n∣∣pi−(Rpi′+t)∣∣2
= 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) − p + R p ′ + p − R p ′ ∣ ∣ 2 =\\frac{1}{2}\\sum_{i=1}^{n}||p_i-(Rp_i'+t)-p+Rp'+p-Rp'||^2 =21∑i=1n∣∣pi−(Rpi′+t)−p+Rp′+p−Rp′∣∣2
= 1 2 ∑ i = 1 n ∣ ∣ ( q i − R q i ′ ) + ( p − R p ′ − t ) ∣ ∣ 2 =\\frac{1}{2}\\sum_{i=1}^{n}||(q_i-Rq_i')+(p-Rp'-t)||^2 =21∑i=1n∣∣(qi−Rqi′)+(p−Rp′−t)∣∣2
= 1 2 ∑ i = 1 n ( ∣ ∣ q i − R q i ′ ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 + 2 ( q i − R q i ′ ) ( p − R p ′ − t ) ) =\\frac{1}{2}\\sum_{i=1}^{n}(||q_i-Rq_i'||^2+||p-Rp'-t||^2+2(q_i-Rq_i')(p-Rp'-t)) =21∑i=1n(∣∣qi−Rqi′∣∣2+∣∣p−Rp′−t∣∣2+2(qi−Rqi′)(p−Rp′−t))
= 1 2 ∑ i = 1 n ( ∣ ∣ q i − R q i ′ ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 ) + ( p − R p ′ − t ) ∑ i = 1 n ( q i − R q i ′ ) =\\frac{1}{2}\\sum_{i=1}^{n}(||q_i-Rq_i'||^2+||p-Rp'-t||^2)+(p-Rp'-t)\\sum_{i=1}^{n}(q_i-Rq_i') =21∑i=1n(∣∣qi−Rqi′∣∣2+∣∣p−Rp′−t∣∣2)+(p−Rp′−t)∑i=1n(qi−Rqi′)
根据定义可得最后一项为0.
∑ i = 1 n ( q i − R q i ′ ) = ∑ i = 1 n q i − R ( ∑ i = 1 n q i ′ ) = ∑ i = 1 n ( p i − p ) − R ( ∑ i = 1 n ( p i ′ − p ′ ) ) = 0 \\sum_{i=1}^{n}(q_i-Rq_i')=\\sum_{i=1}^{n}q_i-R(\\sum_{i=1}^{n}q_i')=\\sum_{i=1}^{n}(p_i-p)-R(\\sum_{i=1}^{n}(p_i'-p'))=0 ∑i=1n(qi−Rqi′)=∑i=1nqi−R(∑i=1nqi′)=∑i=1n(pi−p)−R(∑i=1n(pi′−p′))=0
因此我们有
J = 1 2 ∑ i = 1 n ( ∣ ∣ q i − R q i ′ ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 ) J=\\frac{1}{2}\\sum_{i=1}^{n}(||q_i-Rq_i'||^2+||p-Rp'-t||^2) J=21∑i=1n(∣∣qi−Rqi′∣∣2+∣∣p−Rp′−t∣∣2)
令 t = p − R p ′ t=p-Rp' t=p−Rp′可以使第二项为0,同时减少参数 t t t,得到
R ∗ = a r g R m i n 1 2 ∑ i = 1 n ∣ ∣ q i − R q i ′ ∣ ∣ 2 R^*=arg_{R}\\ min\\frac{1}{2}\\sum_{i=1}^{n}||q_i-Rq_i'||^2 R∗=argR min21∑i=1n∣∣qi−Rqi′∣∣2
利用约束条件 R T R = I R^TR=I RTR=I,继续化简:
R ∗ = a r g R m i n 1 2 ∑ i = 1 n ∣ ∣ q i − R q i ′ ∣ ∣ 2 R^*=arg_{R}\\ min\\frac{1}{2}\\sum_{i=1}^{n}||q_i-Rq_i'||^2 R∗=argR min21∑i=1n∣∣qi−Rqi′∣∣2
= a r g R m i n 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 ′ ) =arg_{R}\\ min\\frac{1}{2}\\sum_{i=1}^{n}(q_i^Tq_i+q_i'^TR^TRq_i'-2q_i^TRq_i') =argR min21∑i=1n(qiTqi+qi′TRTRqi′−2qiTRqi′)
= a r g R m i n 1 2 ∑ i = 1 n ( q i T q i + q i ′ T q i ′ − 2 q i T R q i ′ ) =arg_{R}\\ min\\frac{1}{2}\\sum_{i=1}^{n}(q_i^Tq_i+q_i'^Tq_i'-2q_i^TRq_i') =argR min21∑i=1n(qiTqi+qi′Tqi′−2qiTRqi′)
= a r g R m i n 1 2 ∑ i = 1 n ( q i T q i + q i ′ T q i ′ − 2 q i T R q i ′ ) =arg_{R}\\ min\\frac{1}{2}\\sum_{i=1}^{n}(q_i^Tq_i+q_i'^Tq_i'-2q_i^TRq_i') =argR min21∑i=1n(qiTqi+qi′Tqi′−2qiTRqi′)
= a r g R m a x ∑ i = 1 n q i T R q i ′ =arg_{R}\\ max\\sum_{i=1}^{n}q_i^TRq_i' =argR max∑i=1nqiTRqi′
利用 a T b = t r ( b a T ) a^Tb=tr(ba^T) aTb=tr(baT)继续变形,得
∑ 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 ) \\sum_{i=1}^{n}q_i^T(Rq_i')=\\sum_{i=1}^{n}tr(Rq_i'q_i^T)=tr(R\\sum_{i=1}^{n}q_i'q_i^T) ∑i=1nqiT(Rqi′)=∑i=1ntr(Rqi′qiT)=tr(R∑i=1nqi′qiT)
定义 W = ∑ i = 1 n q i q i ′ T W=\\sum_{i=1}^nq_iq_i'^T W=∑i=1nqiqi′T,至此ICP问题转化为
m a x t r ( R W T ) s . t . R T R = I max\\ tr(RW^T)\\\\ s.t. R^TR=I max tr(RWT)s.t.RTR=I
Method A
对矩阵 W W W进行奇异值分解(SVD)得到 W = U Σ V T W=U\\Sigma V^T W=UΣVT,根据SVD的定义, U U U和 V V V均是 3 × 3 3\\times 3 3×3的正交矩阵,根据约束, R R R矩阵也是。
t r ( R W T ) = t r ( R V Σ U T ) = t r ( S Σ U T ) tr(RW^T)=tr(RV\\Sigma U^T)=tr(S\\Sigma U^T) tr(RWT)=tr(RVΣUT)=tr(SΣUT)
其中 S = U V S=UV S=UV, S S T = U V ( U V ) T = U V V T U T = I SS^T=UV(UV)^T=UVV^TU^T=I SST=UV(UV)T=UVVTUT=I也是正交矩阵(两个正交矩阵相乘结果仍是正交矩阵)。
将 S S S和 V V V展开写成3个列向量的组合的形式:
t r ( S Σ U T ) = t r ( σ 1 s 1 u 1 T + σ 2 s 2 u 2 T + σ 3 s 3 u 3 T ) tr(S\\Sigma U^T)=tr(\\sigma_1s_1u_1^T+\\sigma_2s_2u_2^T+\\sigma_3s_3u_3^T) tr(SΣUT)=tr(σ1s1u1T+σ2s2u2T+σ3s3u3T)
= s 1 u 1 T σ 1 + s 2 u 2 T σ 2 + s 3 u 3 T σ 3 =s_1u_1^T\\sigma_1+s_2u_2^T\\sigma_2+s_3u_3^T\\sigma_3 =s1u1Tσ1+s2u2Tσ2+s3u3Tσ3
由于 S S S和 U U U均是正交矩阵,有
∣ ∣ s 1 ∣ ∣ = ∣ ∣ s 2 ∣ ∣ = ∣ ∣ s 3 ∣ ∣ = ∣ ∣ u 1 ∣ ∣ = ∣ ∣ u 2 ∣ ∣ = ∣ ∣ u 3 ∣ ∣ = 1 ||s_1||=||s_2||=||s_3||=||u_1||=||u_2||=||u_3||=1 ∣∣s1∣∣=∣∣s2∣∣=∣∣s3∣∣=∣∣u1∣∣=∣∣u2∣∣=∣∣u3∣∣=1
因此,满足不等式
s 1 u 1 T σ 1 + s 2 u 2 T σ 2 + s 3 u 3 T σ 3 ≤ σ 1 + σ 2 + σ 3 s_1u_1^T\\sigma_1+s_2u_2^T\\sigma_2+s_3u_3^T\\sigma_3\\leq \\sigma_1+\\sigma_2+\\sigma_3 s1u1Tσ1+s2u2Tσ2+s3u3Tσ3≤σ1+σ2+σ3
当 ∀ s i , u i \\forall s_i,u_i ∀si,ui同向时,等式成立。此时, S = U S=U S=U,即 R V = U RV=U RV=U, R = U V T R=UV^T R=UVT
因此,我们得到 R R R的最优解就是 W W W矩阵SVD得到两个正交矩阵 U U U和 V T V^T VT的乘积。
Method B
这个问题形式和PCA十分相近,PCA最终转化得到问题是
m a x u u T S u s . t . u T u = 1 max_{u}\\ u^TSu\\\\ s.t.\\ u^Tu=1 maxu uTSus.t. uTu=1
这个可以通过拉格朗日乘子法求解,对上面的问题套用。
设拉格朗日函数为 L ( R , λ ) = t r ( R ∑ i = 1 n q i ′ q i T ) − λ ( R T R − I ) \\mathcal{L}(R,\\lambda)= tr(R\\sum_{i=1}^{n}q_i'q_i^T)-\\lambda(R^TR-I) L(R,λ)=tr(R∑i=1nqi′qiT)−λ(RTR−I),
对 R R R求导得 ∇ L ( R , λ ) = ∑ i = 1 n q i q i ′ T − 2 λ R \\nabla\\mathcal{L}(R,\\lambda)=\\sum_{i=1}^nq_iq_i'^T-2\\lambda R ∇L(R,λ)=∑i=1nqiqi′T−2λR,令 ∇ = 0 \\nabla=0 ∇=0,得到
(矩阵求导 ∇ A t r ( A B ) = B T , ∇ A ( A T A ) = 2 A \\nabla_A tr(AB)=B^T,\\nabla_A(A^TA)=2A ∇Atr(AB)=BT,∇A(ATA)=2A)
R = 1 2 λ ∑ i = 1 n q i q i ′ T = 1 2 λ W = 1 2 λ U Σ V T R=\\frac{1}{2\\lambda}\\sum_{i=1}^nq_iq_i'^T=\\frac{1}{2\\lambda}W=\\frac{1}{2\\lambda}U\\Sigma V^T R=2λ1∑i=1nqiqi′T=2λ1W=2λ1UΣVT
代入 R T R = I R^TR=I RTR=I得到
1 4 λ 2 U Σ V T ( U Σ V T ) T = U Σ 2 4 λ 2 U T = I \\frac{1}{4\\lambda^2}U\\Sigma V^T(U\\Sigma V^T)^T=U\\frac{\\Sigma^2}{4\\lambda^2}U^T=I 4λ21UΣVT(UΣVT)T=U4λ2Σ2UT=I
利用 U U U为正定矩阵的性质得 Σ 2 4 λ 2 = I \\frac{\\Sigma^2}{4\\lambda^2}=I 4λ2Σ2=I, Σ = 2 λ I \\Sigma=2\\lambda I Σ=2λI,
因此, R = 1 2 λ U Σ V T = 1 2 λ U ( 2 λ I ) V T = U V T R=\\frac{1}{2\\lambda}U\\Sigma V^T=\\frac{1}{2\\lambda}U(2\\lambda I)V^T=UV^T R=2λ1UΣVT=2λ1U(2λI)VT=UVT
通过拉格朗日乘子法可以得到相同的结果。
Reference
用SVD求解ICP问题的完整证明:https://zhuanlan.zhihu.com/p/108858766
SVD求解ICP问题:https://zhuanlan.zhihu.com/p/188668384