Generalized-ICP(GICP)論文研讀

Generalized-ICP論文研讀

前言

ICP最基本的形式是point-to-point,即以點到點之間的距離作為損失函數;它的一個變種是point-to-plane,改用點到目標點局部擬合平面的距離作為損失函數。

本篇介紹的GICP是上述兩者的generalization,它重新定義了自己的損失函數。point-to-point,point-to-plane,甚至plane-to-plane都可以用GICP這個統一的框架表達。

從後文可以看到,GICP是在最小化的步驟中加入了一個機率模型。
但要注意的是,它使用的配對估計方式仍是點對在歐式空間中的距離,而非基於機率的距離度量方式。

本篇僅關注論文的第III章,並補全論文中省略的公式推導。

損失函數推導

假設我們有兩配對好的點雲 A = { a i } i = 1 , 2 , . . . N A = \{a_i\}_{i=1,2,...N} A={ai​}i=1,2,...N​和 B = { b i } i = 1 , 2 , . . . N B = \{b_i\}_{i=1,2,...N} B={bi​}i=1,2,...N​,其中 a i a_i ai​及 b i b_i bi​兩兩配對。

GICP論文中做了一個假設,即 A , B A,B A,B兩點雲是分別由底層的點雲 A ^ = { a i ^ } \hat{A} = \{\hat{a_i}\} A^={ai​^​}和 B ^ = { b i ^ } \hat{B} = \{\hat{b_i}\} B^={bi​^​}依照高斯機率模型 a i ∼ N ( a i ^ , C i A ) a_i \sim \mathcal{N}(\hat{a_i},C_i^A) ai​∼N(ai​^​,CiA​)和 b i ∼ N ( b i ^ , C i B ) b_i \sim \mathcal{N}(\hat{b_i},C_i^B) bi​∼N(bi​^​,CiB​)採樣而來。

T ∗ \bold{T}^* T∗(注意有上標 ∗ ^* ∗)是底層兩點雲真實的轉換關係: b i ^ = T ∗ a i ^ \hat{b_i} = \bold{T}^*\hat{a_i} bi​^​=T∗ai​^​。我們需要一個目標函數才能使用優化方法尋找最佳的 T ∗ \bold{T}^* T∗,以下就是目標函數推導的過程。

首先定義 d i ( T ) d_i^{(\bold{T})} di(T)​如下,即對原始點雲使用 T \bold{T} T做轉換後,第 i i i個點對的有向距離:

d i ( T ) ≜ b i − T a i , ∀  rigid transformation  T d_i^{(\bold{T})} \triangleq b_i-\bold{T}a_i, \forall \text{ rigid transformation } \bold{T} di(T)​≜bi​−Tai​,∀ rigid transformation T

它是由以下分布採樣而來:

d i ( T ) ∼ N ( b i ^ , C i B ) − T N ( a i ^ , C i A ) = N ( b i ^ − T a i ^ , C i B + ( T ) C i A ( T ) T ) \begin{aligned}d_i^{(\bold{T})} &\sim \mathcal{N}(\hat{b_i},C_i^B) - \bold{T}\mathcal{N}(\hat{a_i},C_i^A) \\&= \mathcal{N}(\hat{b_i} - \bold{T}\hat{a_i}, C_i^B+(\bold{T})C_i^A(\bold{T})^T)\end{aligned} di(T)​​∼N(bi​^​,CiB​)−TN(ai​^​,CiA​)=N(bi​^​−Tai​^​,CiB​+(T)CiA​(T)T)​

其中等號參考兩獨立高斯隨機變數之和

如果將 T \bold{T} T替換成 T ∗ \bold{T}^* T∗,則有以下關係:

d i ( T ∗ ) ∼ N ( b i ^ , C i B ) − T ∗ N ( a i ^ , C i A ) = N ( b i ^ − ( T ∗ ) a i ^ , C i B + ( T ∗ ) C i A ( T ∗ ) T ) = N ( 0 , C i B + ( T ∗ ) C i A ( T ∗ ) T ) \begin{aligned}d_i^{(\bold{T}^*)} &\sim \mathcal{N}(\hat{b_i},C_i^B) - \bold{T}^*\mathcal{N}(\hat{a_i},C_i^A) \\&= \mathcal{N}(\hat{b_i} - (\bold{T}^*)\hat{a_i}, C_i^B+(\bold{T}^*)C_i^A(\bold{T}^*)^T)\\ &= \mathcal{N}(0, C_i^B+(\bold{T}^*)C_i^A(\bold{T}^*)^T)\end{aligned} di(T∗)​​∼N(bi​^​,CiB​)−T∗N(ai​^​,CiA​)=N(bi​^​−(T∗)ai​^​,CiB​+(T∗)CiA​(T∗)T)=N(0,CiB​+(T∗)CiA​(T∗)T)​

使用MLE最大似然估計,尋找一個使得當前樣本 d i d_i di​出現概率最大的 T \bold{T} T:

T = arg max ⁡ T ∏ i p ( d i ( T ) ) = arg max ⁡ T ∑ i log ⁡ ( p ( d i ( T ) ) ) 取log = arg max ⁡ T ∑ i log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 ( d i ( T ) − ( b i ^ − T a i ^ ) ) T ( C i B + T C i A T T ) − 1 ( d i ( T ) − ( b i ^ − T a i ^ ) ) 見註一 = arg max ⁡ T ∑ i log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) 見註二 = arg max ⁡ T ∑ i − 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) 見註三 = arg min ⁡ T ∑ i 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) = arg min ⁡ T ∑ i d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) \begin{aligned}\bold{T} &= \argmax\limits_\bold{T} \prod\limits_ip(d_i^{(\bold{T})}) \\&= \argmax\limits_\bold{T} \sum\limits_i\log (p(d_i^{(\bold{T})})) && \text{取log} \\&= \argmax\limits_\bold{T} \sum\limits_i\log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i}))^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i}))&& \text{見註一} \\&= \argmax\limits_\bold{T} \sum\limits_i\log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})}&& \text{見註二} \\&=\argmax\limits_\bold{T}\sum\limits_i-\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})}&& \text{見註三} \\&= \argmin\limits_\bold{T}\sum\limits_i\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} \\&= \argmin\limits_\bold{T}\sum\limits_i{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} \end{aligned} T​=Targmax​i∏​p(di(T)​)=Targmax​i∑​log(p(di(T)​))=Targmax​i∑​log((2π)k∣CiB​+TCiA​TT∣ ​1​)−21​(di(T)​−(bi​^​−Tai​^​))T(CiB​+TCiA​TT)−1(di(T)​−(bi​^​−Tai​^​))=Targmax​i∑​log((2π)k∣CiB​+TCiA​TT∣ ​1​)−21​di(T)​T(CiB​+TCiA​TT)−1di(T)​=Targmax​i∑​−21​di(T)​T(CiB​+TCiA​TT)−1di(T)​=Targmin​i∑​21​di(T)​T(CiB​+TCiA​TT)−1di(T)​=Targmin​i∑​di(T)​T(CiB​+TCiA​TT)−1di(T)​​​取log見註一見註二見註三​

最後可以得到論文中的公式(2):

T = arg min ⁡ T ∑ d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) \bold{T} = \argmin\limits_\bold{T} \sum\limits {d_i^{(\bold{T})}}^T (C_i^B + \bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} T=Targmin​∑di(T)​T(CiB​+TCiA​TT)−1di(T)​

註一:
參考Multivariate normal distribution,對於多元常態分布 X ∼ N ( μ , Σ ) \textbf{X} \sim \mathcal{N}(\mu, \Sigma) X∼N(μ,Σ),其機率密度函數(pdf)的公式如下:
f x ( x 1 , . . . , x k ) = 1 ( 2 π ) k ∣ Σ ∣ e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) , ∣ Σ ∣ ≜ det Σ f_x(x_1, ..., x_k) = \frac{1}{\sqrt{(2\pi)^k|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}, |\Sigma| \triangleq \textbf{det} \Sigma fx​(x1​,...,xk​)=(2π)k∣Σ∣ ​1​e−21​(x−μ)TΣ−1(x−μ),∣Σ∣≜detΣ

對它取 log ⁡ \log log可以得到:

log ⁡ ( f x ( x 1 , . . . , x k ) ) = log ⁡ ( 1 ( 2 π ) k ∣ Σ ∣ e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) = log ⁡ ( 1 ( 2 π ) k ∣ Σ ∣ ) + log ⁡ ( e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) = log ⁡ ( 1 ( 2 π ) k ∣ Σ ∣ ) − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) \begin{aligned} \log (f_x(x_1, ..., x_k)) &= \log (\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}) \\&= \log (\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}) + \log(e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}) \\&= \log (\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}) -\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu) \end{aligned} log(fx​(x1​,...,xk​))​=log((2π)k∣Σ∣ ​1​e−21​(x−μ)TΣ−1(x−μ))=log((2π)k∣Σ∣ ​1​)+log(e−21​(x−μ)TΣ−1(x−μ))=log((2π)k∣Σ∣ ​1​)−21​(x−μ)TΣ−1(x−μ)​

代入 d i ( T ) ∼ N ( b i ^ − T a i ^ , C i B + T C i A T T ) d_i^{(\bold{T})} \sim \mathcal{N}(\hat{b_i} - \bold{T}\hat{a_i}, C_i^B+\bold{T}C_i^A\bold{T}^T) di(T)​∼N(bi​^​−Tai​^​,CiB​+TCiA​TT),得:

log ⁡ ( p ( d i ( T ) ) ) = log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 ( d i ( T ) − ( b i ^ − T a i ^ ) ) T ( C i B + T C i A T T ) − 1 ( d i ( T ) − ( b i ^ − T a i ^ ) ) = log ⁡ ( 1 ( 2 π ) k ∣ C i B + T C i A T T ∣ ) − 1 2 d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) \begin{aligned}\log (p(d_i^{(\bold{T})})) &= \log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i}))^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}(d_i^{(\bold{T})}-(\hat{b_i} - \bold{T}\hat{a_i})) \\&= \log (\frac{1}{\sqrt{(2\pi)^k|C_i^B+\bold{T}C_i^A\bold{T}^T|}}) \\&-\frac{1}{2}{d_i^{(\bold{T})}}^T(C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})}\end{aligned} log(p(di(T)​))​=log((2π)k∣CiB​+TCiA​TT∣ ​1​)−21​(di(T)​−(bi​^​−Tai​^​))T(CiB​+TCiA​TT)−1(di(T)​−(bi​^​−Tai​^​))=log((2π)k∣CiB​+TCiA​TT∣ ​1​)−21​di(T)​T(CiB​+TCiA​TT)−1di(T)​​

註二:
在 T = T ∗ \bold{T}=\bold{T}^* T=T∗的情況下 b i ^ − ( T ∗ ) a i ^ = 0 \hat{b_i} - (\bold{T}^*)\hat{a_i} =0 bi​^​−(T∗)ai​^​=0,但是可以這樣假設?

註三:
旋轉矩陣判別式為1,平移矩陣判別式為1。又因為 T \bold{T} T是旋轉平移矩陣,可以拆成旋轉矩陣與平移矩陣的乘積,且 det ( A B ) = det ( A ) det ( B ) \textbf{det}(AB) = \textbf{det}(A)\textbf{det}(B) det(AB)=det(A)det(B),所以有 det ( T ) = 1 \textbf{det}(\bold{T}) = 1 det(T)=1,因此 det ( T C i A T T ) = det ( C i A ) \textbf{det}(\bold{T}C_i^A\bold{T}^T)=\textbf{det}(C_i^A) det(TCiA​TT)=det(CiA​)。
但是 ∣ C i B + T C i A T T ∣ ≠ ∣ C i B ∣ + ∣ T C i A T T ∣ |C_i^B+\bold{T}C_i^A\bold{T}^T| \neq |C_i^B|+|\bold{T}C_i^A\bold{T}^T| ∣CiB​+TCiA​TT∣​=∣CiB​∣+∣TCiA​TT∣,有辦法推出第一項和 T \bold{T} T無關?可參考Expressing the determinant of a sum of two matrices?

或照視覺十四講所說,如果是對 d i d_i di​做優化,第一項就變為常數,可以忽略。但是此處是對 T T T做優化,可以套用這個理論?

應用

GICP統一了point-to-point和point-to-plane,甚至還納入了plane-to-plane。這幾種變形的差別在於共變異數矩陣 C i A , C i B C_i^A,C_i^B CiA​,CiB​的選取。

point-to-point

傳統點到點的ICP可以用GICP的框架表示如下:
C i B = I , C i A = 0 C_i^B=I, C_i^A=0 CiB​=I,CiA​=0

驗證:
T = arg min ⁡ T ∑ d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) = arg min ⁡ T ∑ d i ( T ) T d i ( T ) = arg min ⁡ T ∑ ∥ d i ( T ) ∥ 2 \begin{aligned}\bold{T} &= \argmin\limits_\bold{T} \sum\limits {d_i^{(\bold{T})}}^T (C_i^B + \bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})} \\ &= \argmin\limits_\bold{T} \sum\limits {d_i^{(\bold{T})}}^T d_i^{(\bold{T})} \\ &= \argmin\limits_\bold{T} \sum\limits {\|d_i^{(\bold{T})}\|^2}\end{aligned} T​=Targmin​∑di(T)​T(CiB​+TCiA​TT)−1di(T)​=Targmin​∑di(T)​Tdi(T)​=Targmin​∑∥di(T)​∥2​

可以看出其目標為最小化點對間距離平方之和,也就是點到點ICP的更新公式。

point-to-plane

首先定義一個為正交投影矩陣 P i \bold{P_i} Pi​,有以下性質: P i = P i 2 = P i T \bold{P_i} = \bold{P_i}^2 = \bold{P_i} ^T Pi​=Pi​2=Pi​T。
P i \bold{P_i} Pi​會將向量投影到目標點雲中第 i i i點 b i b_i bi​法向量的span上,因此 P i ⋅ d i ( T ) \bold{P_i}\cdot d_i^{(\bold{T})} Pi​⋅di(T)​也就是轉換後的 a i a_i ai​到 b i b_i bi​所在平面的距離。

point-to-plane ICP的更新公式可以表示如下:

T = arg min ⁡ T { ∑ i ∥ P i ⋅ d i ( T ) ∥ 2 } = arg min ⁡ T { ∑ i ( P i ⋅ d i ( T ) ) T ( P i ⋅ d i ( T ) ) } = arg min ⁡ T { ∑ i d i ( T ) T ⋅ P i 2 ⋅ d i ( T ) } = arg min ⁡ T { ∑ i d i ( T ) T ⋅ P i ⋅ d i ( T ) } \begin{aligned}\bold{T} &=\argmin\limits_\bold{T} \{\sum\limits_i \|\bold{P_i} \cdot d_i^{(\bold{T})}\|^2\} \\&= \argmin\limits_\bold{T} \{\sum\limits_i (\bold{P_i} \cdot d_i^{(\bold{T})})^T(\bold{P_i} \cdot d_i^{(\bold{T})})\} \\&= \argmin\limits_\bold{T} \{\sum\limits_i{d_i^{(\bold{T})}}^T \cdot \bold{P_i}^2 \cdot d_i^{(\bold{T})}\} \\&= \argmin\limits_\bold{T} \{\sum\limits_i{d_i^{(\bold{T})}}^T \cdot \bold{P_i} \cdot d_i^{(\bold{T})}\}\end{aligned} T​=Targmin​{i∑​∥Pi​⋅di(T)​∥2}=Targmin​{i∑​(Pi​⋅di(T)​)T(Pi​⋅di(T)​)}=Targmin​{i∑​di(T)​T⋅Pi​2⋅di(T)​}=Targmin​{i∑​di(T)​T⋅Pi​⋅di(T)​}​

與GICP的公式相比較,可以發現以下關係:

C i B = P i − 1 , C i A = 0 C_i^B=\bold{P_i}^{-1}, C_i^A=0 CiB​=Pi​−1,CiA​=0

Note: P i \bold{P_i} Pi​需要被近似?待補

plane-to-plane

可以把真實世界中的物體看作是分段線性的,而相機在對物體進行掃描時,是對該物體做採樣。可以想見,從不同角度拍攝物體,相機所採樣的點不一定相同。採樣點在局部擬合平面方向上的不確定性較大,在法向量方向上的不確定性較小。

假設局部擬合平面上某一點的法向量是x軸方向,那麼點的共變異數矩陣可以表示為:

[ ϵ 0 0 0 1 0 0 0 1 ] \begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix} ⎣⎡​ϵ00​010​001​⎦⎤​

其中 ϵ \epsilon ϵ是一個極小的數。

因為實際上法向量並不一定是沿x軸方向,所以需要進行座標轉換。
假設 b i b_i bi​的法向量為 u i u_i ui​, a i a_i ai​的法向量為 v i v_i vi​,那麼它們各自的共變異數矩陣分別為:

C i B = R u i [ ϵ 0 0 0 1 0 0 0 1 ] R u i T C_i^B=\bold{R}_{u_i} \begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix}\bold{R}_{u_i}^T CiB​=Rui​​⎣⎡​ϵ00​010​001​⎦⎤​Rui​T​

C i A = R v i [ ϵ 0 0 0 1 0 0 0 1 ] R v i T C_i^A=\bold{R}_{v_i} \begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix}\bold{R}_{v_i}^T CiA​=Rvi​​⎣⎡​ϵ00​010​001​⎦⎤​Rvi​T​

其中 R x \bold{R}_{x} Rx​為一將 e 1 e_1 e1​轉成 x x x的旋轉矩陣。

為什麼是前後都乘旋轉矩陣呢?套用共變異數矩陣的定義就明白了:

C i B = R u i Cov ⁡ ( X ) R u i T = R u i E ⁡ [ ( X − E ⁡ [ X ] ) ( X − E ⁡ [ X ] ) T ] R u i T = E ⁡ [ ( R u i X − E ⁡ [ R u i X ] ) ( R u i X − E ⁡ [ R u i X ] ) T ] = E ⁡ [ ( U − E ⁡ [ U ] ) ( U − E ⁡ [ U ] ) T ] U ≜ R u i X \begin{aligned}C_i^B&=\bold{R}_{u_i}\operatorname{Cov}(\textbf{X})\bold{R}_{u_i}^T \\&= \bold{R}_{u_i}\operatorname{E}[(\textbf{X}-\operatorname{E}[\textbf{X}])(\textbf{X}-\operatorname{E}[\textbf{X}])^T]\bold{R}_{u_i}^T \\&= \operatorname{E}[(\bold{R}_{u_i}\textbf{X}-\operatorname{E}[\bold{R}_{u_i}\textbf{X}])(\bold{R}_{u_i}\textbf{X}-\operatorname{E}[\bold{R}_{u_i}\textbf{X}])^T] \\ &= \operatorname{E}[(\textbf{U}-\operatorname{E}[\textbf{U}])(\textbf{U}-\operatorname{E}[\textbf{U}])^T] && U \triangleq \bold{R}_{u_i}\textbf{X}\end{aligned} CiB​​=Rui​​Cov(X)Rui​T​=Rui​​E[(X−E[X])(X−E[X])T]Rui​T​=E[(Rui​​X−E[Rui​​X])(Rui​​X−E[Rui​​X])T]=E[(U−E[U])(U−E[U])T]​​U≜Rui​​X​

Cov ⁡ ( X ) = [ ϵ 0 0 0 1 0 0 0 1 ] \operatorname{Cov}(\textbf{X})=\begin{bmatrix}\epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix} Cov(X)=⎣⎡​ϵ00​010​001​⎦⎤​代表x方向不確定性很小的共變異數矩陣,上式中對不確定性很小的方向做了旋轉( U ≜ R u i X U \triangleq \bold{R}_{u_i}\textbf{X} U≜Rui​​X),所以 C i B C_i^B CiB​是一個在 u i u_i ui​方向上不確定性很小的共變異數矩陣。

Note: R R R的取法待補
Q:為何共變異數矩陣對角線上的值是 ϵ , 1 , 1 \epsilon,1,1 ϵ,1,1?有需要做縮放?

上一篇:在C#代码中编写宏操作Excel


下一篇:PathEffect()详解