- 前言
- SVD方法
- BA方法
本篇继续学习3D-3D的方法,ICP
SVD方法基于RGBD相机或者Lidar的SLAM前端常用ICP。
已知匹配点在上一帧的世界坐标 P ′ P' P′,以及在当前帧的相机坐标 P P P,则可以把问题转化为最小二乘: e = P ′ − ( R P + t ) arg min R , t ∑ i = 1 n 1 2 ∣ ∣ P ′ − ( R P + t ) ∣ ∣ 2 2 e=P'-(RP+t) \\ \argmin_{R,t} \sum_{i=1}^n \frac {1}{2} || P'-(RP+t) ||_2^2 e=P′−(RP+t)R,targmini=1∑n21∣∣P′−(RP+t)∣∣22 首先计算每帧所有匹配点的中心坐标: P c = 1 n ∑ i = 1 n P i P c ′ = 1 n ∑ i = 1 n P i ′ P_c = \frac{1}{n} \sum_{i=1}^n P_i \\ \quad \\ P'_c = \frac{1}{n} \sum_{i=1}^n P'_i \\ \quad \\ Pc=n1i=1∑nPiPc′=n1i=1∑nPi′
接着代入最小二乘公式: 1 2 ∑ i = 1 n ∣ ∣ P ′ − ( R P + t ) ∣ ∣ 2 2 = 1 2 ∣ ∣ P ′ − ( R P + t ) − P c ′ + R P c + P c ′ − R P c ∣ ∣ 2 = 1 2 ∣ ∣ P ′ − P c ′ − R ( P − P c ) + P c ′ − R P c − t ∣ ∣ 2 = 1 2 ( ∣ ∣ P ′ − P c ′ − R ( P − P c ) ∣ ∣ 2 + ∣ ∣ P c ′ − R P c − t ∣ ∣ 2 + ( P ′ − P c ′ − R ( P − P c ) ) T ( P c ′ − R P c − t ) + ( P c ′ − R P c − t ) T ( P ′ − P c ′ − R ( P − P c ) ) ) \frac {1}{2} \sum_{i=1}^n || P'-(RP+t) ||_2^2 \\ \quad \\ = \frac {1}{2} || P' - (RP+t)-P'_c+RP_c+P_c' - RP_c ||^2 \\ = \frac {1}{2} || P' - P_c' - R(P-P_c) + P'_c - RP_c - t ||^2 \\ = \frac {1}{2} ( || P'-P_c' - R(P-P_c) ||^2 + || P_c' - RP_c - t ||^2 \\ + (P'-P_c'-R(P-P_c))^T(P_c' - RP_c - t)+(P_c' - RP_c - t)^T(P'-P_c'-R(P-P_c))) 21i=1∑n∣∣P′−(RP+t)∣∣22=21∣∣P′−(RP+t)−Pc′+RPc+Pc′−RPc∣∣2=21∣∣P′−Pc′−R(P−Pc)+Pc′−RPc−t∣∣2=21(∣∣P′−Pc′−R(P−Pc)∣∣2+∣∣Pc′−RPc−t∣∣2+(P′−Pc′−R(P−Pc))T(Pc′−RPc−t)+(Pc′−RPc−t)T(P′−Pc′−R(P−Pc)))
由于: n P c ′ − n R P c − n t = ∑ i = 1 n P i ′ − ∑ i = 1 n ( R P i + t ) = 0 n ( P c ′ − R P c − t ) = 0 nP_c' - nRP_c - nt = \sum_{i=1}^nP'_i - \sum_{i=1}^n (RP_i + t) =0 \\ n(P_c' - RP_c - t) = 0 nPc′−nRPc−nt=i=1∑nPi′−i=1∑n(RPi+t)=0n(Pc′−RPc−t)=0 因此: arg min R , t 1 2 ∑ i = 1 n ∣ ∣ P ′ − ( R P + t ) ∣ ∣ 2 2 = arg min R , t 1 2 ( ∣ ∣ P ′ − P c ′ − R ( P − P c ) ∣ ∣ 2 + ∣ ∣ P c ′ − R P c − t ∣ ∣ 2 ) \argmin_{R,t} \frac {1}{2} \sum_{i=1}^n || P'-(RP+t) ||_2^2 \\ \quad \\ = \argmin_{R,t} \frac {1}{2} ( || P'-P_c' - R(P-P_c) ||^2 + || P_c' - RP_c - t ||^2) \\ R,targmin21i=1∑n∣∣P′−(RP+t)∣∣22=R,targmin21(∣∣P′−Pc′−R(P−Pc)∣∣2+∣∣Pc′−RPc−t∣∣2) 上面的式子中,左边的式子与R有关,右边的式子与R,t有关,也就是说求出一个R后,可以通过改变t使得右式为0,故最终的最小二乘为: arg min R , t ∣ ∣ P ′ − P c ′ − R ( P − P c ) ∣ ∣ 2 t = P c ′ − R P c \argmin_{R,t} || P'-P_c' - R(P-P_c) ||^2 \\ t = P_c' - RP_c R,targmin∣∣P′−Pc′−R(P−Pc)∣∣2t=Pc′−RPc
s e t p i = P i − P c , p i ′ = P i ′ − P c ′ s e t W = ∑ i = 1 n p i ′ p i T t h e n W = U Σ V T R = U V T set \quad p_i=P_i-P_c, \quad p_i'=P_i'-P_c' \\ \quad \\ set \quad W= \sum_{i=1}^n p_i'p_i^T \\ then \quad W=U\Sigma V^T \\ R=UV^T setpi=Pi−Pc,pi′=Pi′−Pc′setW=i=1∑npi′piTthenW=UΣVTR=UVT
BA方法与PnP的BA方法基本相同: arg min δ 1 2 ∑ i = 1 n ∣ ∣ P ′ − e δ ∧ P ∣ ∣ 2 2 \argmin_{\delta} \frac {1}{2} \sum_{i=1}^n || P' - e^{\delta^\land}P ||_2^2 \\ \quad \\ δargmin21i=1∑n∣∣P′−eδ∧P∣∣22 然后通过高斯牛顿法优化迭代即可。