经典论文阅读之-GICP(ICP大一统)
admin
2024-03-22 22:50:50
0

0. 简介

作为常用的配准方法,ICP和NDT两种匹配被广泛应用于激光雷达的点云配准方法中。我们知道IPC的匹配主要是描述了点到点的匹配方法,而无法胜任点到面以及面到面的匹配,而本博客主要就是将向读者分析《Generalized-ICP》这篇论文,GICP可以通过点到点的距离作为损失函数求解point-to-point的损失函数,点到局部目标点局部拟合的平面距离作为point-to-plane的损失函数,而文中主要提到的plane-to-plane损失函数则是假设点云具有平面特征,这意味着在3D空间处理采样2D流形。

1. GICP统一模型

GICP引入了概率信息(使用协方差阵),提出了ICP的统一模型。本文方法的核心思想是如何从概率的角度去看待和推导出ICP算法的目标函数。这里我们直接看原文就好,原文提到:
假设有两个匹配好的点集,A={ai}i=1,2...N,B={bi}i=1,2...NA = \{a_i\}_{i = 1 , 2... N} , B = \{ b_i \}_{i = 1 , 2... N}A={ai​}i=1,2...N​,B={bi​}i=1,2...N​ , 且 aia_iai​和 bib_ibi​ 是对应点(A为source,B为target)

再假设两个点云中的每个点,都是服从高斯分布的,其原因是由于测量等环节的误差,每个点的位置的测量值实际上是和真值ai^,bi^\hat{a_i},\hat{b_i}ai​^​,bi​^​存在偏差
ai∼N(ai^,CiA)bi∼N(bi^,CiB)a_i\sim \mathcal{N}(\hat{a_i},C_i^{A})\\ b_i\sim \mathcal{N}(\hat{b_i},C_i^{B})ai​∼N(ai​^​,CiA​)bi​∼N(bi​^​,CiB​)

对于ai^,bi^\hat{a_i},\hat{b_i}ai​^​,bi​^​有:

b^i=T∗a^\hat{b}_i=T^*\hat{a}b^i​=T∗a^

T∗T^*T∗(注意有上标∗^*∗)是理想中的correct rigid transform。代表了两个点云真实的转换关系,我们需要一个目标函数来寻找出最佳的T∗T^*T∗,以下是目标函数的推导过程:

首先定义残差di(T)=bi−Taid_i^{(T)}=b_i-Ta_idi(T)​=bi​−Tai​,di(T)d_i^{(T)}di(T)​代表了对原始点云使用TTT做转换后,第iii个点对的有向距离。

它是由分布采样而来

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

其中的等号变换可以参考这篇文章。

因为ai,bia_i,b_iai​,bi​都被我们假设为独立的、服从高斯分布的随机变量,所以将上式中的TTT替换为T∗T^*T∗,则可以变为:

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

接下来就是这篇文章的重点, TTT可以被看作 diTd_i^TdiT​的概率分布中待估计的分布参数,借助最大似然估计(MLE)的思想,我们寻找一个是的当前样本 did_idi​出现概率最大的TTT:
T=arg⁡max⁡T∏ip(diT)=arg⁡max⁡T∑ilog⁡(p(di(T)))\begin{aligned}T&=\mathop{\arg\max}\limits_{}\bold{T}\prod_ip(d_i^{T})\\&= \mathop{\arg\max}\limits_\bold{T} \sum\limits_{i}\log (p(d_i^{(\bold{T})}))\end{aligned} T​=argmax​Ti∏​p(diT​)=Targmax​i∑​log(p(di(T)​))​

这一部分是执行了取log的操作,然后进一步化简

=arg⁡max⁡limitsT∑ilog⁡(1(2π)k∣CiB+TCiATT∣)−12(di(T)−(bi^−Tai^))T(CiB+TCiATT)−1(di(T)−(bi^−Tai^))= \mathop{\arg\max}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}))=argmaxlimitsT​i∑​log((2π)k∣CiB​+TCiA​TT∣​1​)−21​(di(T)​−(bi​^​−Tai​^​))T(CiB​+TCiA​TT)−1(di(T)​−(bi​^​−Tai​^​))

上面的式子是参考了Multivariate normal distribution的取对数以及代入的方法。
对于多元常态分布X∼N(μ,Σ)\textbf{X} \sim \mathcal{N}(\mu, \Sigma)X∼N(μ,Σ),其概率密度函数可以表示为
fx(x1,...,xk)=1(2π)k∣Σ∣e−12(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} \Sigmafx​(x1​,...,xk​)=(2π)k∣Σ∣​1​e−21​(x−μ)TΣ−1(x−μ),∣Σ∣≜detΣ
对上面的式子取log可以得到:
KaTeX parse error: \cr valid only within a tabular/array environment
代入di(T)∼N(bi^−Tai^,CiB+TCiATT)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(di(T)))=log⁡(1(2π)k∣CiB+TCiATT∣)−12(di(T)−(bi^−Tai^))T(C_iB+TCiATT)−1(di(T)−(bi^−Ta_i^))=log⁡(1(2π)k∣CiB+TCiATT∣)−12di(T)T(CiB+TCiATT)−1di(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(C_iB+TCiA​TT)−1(di(T)​−(bi​^​−Ta_i^​))=log((2π)k∣CiB​+TCiA​TT∣​1​)−21​di(T)​T(CiB​+TCiA​TT)−1di(T)​​
这样也就得到了我们上面的输出结果。这里的结果如果发现正态分布的协方差矩阵的行列式为常数时,则只需要优化最后一项就可以了。最后一项的二次型又被称作马哈拉诺比斯距离(马氏距离),极大似然估计等价于最小化样本点与均值之间的马氏距离。更详细的内容可以参考 高翔《视觉SLAM14讲》6.1 状态估计问题 。

这一部分则是对上一步的进一步化简,在 T=T∗\bold{T}=\bold{T}^*T=T∗的情況下bi^−(T∗)ai^=0\hat{b_i} - (\bold{T}^*)\hat{a_i} =0bi​^​−(T∗)ai​^​=0

=arg⁡max⁡T∑ilog⁡(1(2π)k∣CiB+TCiATT∣)−12di(T)T(CiB+TCiATT)−1di(T)= \mathop{\arg\max}\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})}=Targmax​i∑​log((2π)k∣CiB​+TCiA​TT∣​1​)−21​di(T)​T(CiB​+TCiA​TT)−1di(T)​

然后又因为三维刚体变换矩阵中的旋转矩阵行列式值为1,平移矩阵行列式值也为1。又因为TTT是旋转平移矩阵,可以拆成旋转矩阵和平移矩阵的乘积。且det(AB)=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}) = 1det(T)=1,因此det(TCiATT)=det(CiA)\textbf{det}(\bold{T}C_i^A\bold{T}^T)=\textbf{det}(C_i^A)det(TCiA​TT)=det(CiA​)

=arg⁡max⁡T∑i−12di(T)T(CiB+TCiATT)−1di(T)=\mathop{\arg\max}\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})}=Targmax​i∑​−21​di(T)​T(CiB​+TCiA​TT)−1di(T)​

照视觉十四讲所说,这里对TTT做优化。其中第一项为常数,则可以忽略,其中det(A+B)\textbf{det}(A+B)det(A+B)可以参考这个推导。

然后舍去负号,则可以将上式化简为论文中的公式2:
T=arg⁡min⁡T∑idi(T)T(CiB+TCiATT)−1di(T)T=\mathop{\arg\min}\limits_\bold{T}\sum_id_i^{(\bold{T})^{T}} (C_i^B+\bold{T}C_i^A\bold{T}^T)^{-1}d_i^{(\bold{T})}T=Targmin​i∑​di(T)T​(CiB​+TCiA​TT)−1di(T)​

到此为止我们学习了GICP中最主要的公式推导公式了。

2. ICP应用

这里我们直接参照keineahnung2345的文章。文中介绍了三种ICP的推导,这一节要借助上文的结论。

2.1 point-to-point

传统的点到点ICP可以用GICP的框架表示如下
CiB=I,CiA=0C_i^B=I, C_i^A=0CiB​=I,CiA​=0
验证:
T=arg⁡min⁡T∑di(T)T(CiB+TCiATT)−1di(T)=arg⁡min⁡T∑di(T)Tdi(T)=arg⁡min⁡T∑∥di(T)∥2\begin{aligned}\bold{T} &= \mathop{\arg\min}\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})} \\ &= \mathop{\arg\min}\limits_\bold{T} \sum\limits {d_i^{(\bold{T})}}^T d_i^{(\bold{T})} \\ &= \mathop{\arg\min}\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更新公式

2.2 point-to-plane

首先定义一个为正交的投影矩阵Pi\bold{P_i}Pi​,有以下性质Pi=Pi2=Pi\bold{P_i} = \bold{P_i}^2 = \bold{P_i}Pi​=Pi​2=Pi​。
其中Pi\bold{P_i}Pi​会将向量投影到目标点云aaa中的第iii点bib_ibi​法向量的局部平面上,因此Pi⋅di(T)\bold{P_i}\cdot d_i^{(\bold{T})}Pi​⋅di(T)​也就是转换后的aia_iai​到bib_ibi​所在平面的距离。
验证:
T=arg⁡min⁡T{∑i∥Pi⋅di(T)∥2}=arg⁡min⁡T{∑i(Pi⋅di(T))T(Pi⋅di(T))}=arg⁡min⁡T{∑idi(T)T⋅Pi2⋅di(T)}=arg⁡min⁡T{∑idi(T)T⋅Pi⋅di(T)}\begin{aligned}\bold{T} &=\mathop{\arg\min}\limits_\bold{T} \{\sum\limits_i \|\bold{P_i} \cdot d_i^{(\bold{T})}\|^2\} \\&= \mathop{\arg\min}\limits_\bold{T} \{\sum\limits_i (\bold{P_i} \cdot d_i^{(\bold{T})})^T(\bold{P_i} \cdot d_i^{(\bold{T})})\} \\&= \mathop{\arg\min}\limits_\bold{T} \{\sum\limits_i{d_i^{(\bold{T})}}^T \cdot \bold{P_i}^2 \cdot d_i^{(\bold{T})}\} \\&= \mathop{\arg\min}\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比较我们就可以发现关系为

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

2.3 plane-to-plane

这里是GICP专门提出的一种方法,即相对于点到点和点到面加入概率模型(协方差阵)

平面到平面算法的做法是,假设点云具有平面特征,这意味着在3D空间处理采样2D流形。 由于现实世界的曲面至少是分段可微的,我们可以假设我们的数据集是局部平面的。此外,由于我们从两个不同的角度对流形进行采样,因此通常不会对完全相同的点进行采样(即,对应关系永远不会是精确的)。 从而导致采样点在局部拟合的平面方向上的不确定性较大,但是在法向量方向上不确定性较小。

为此,每个测量点仅提供沿其曲面法线的约束。为了对这种结构进行建模,我们考虑每个采样点沿其局部平面以高协方差分布,而在曲面法线方向(垂直于平面方向)以极低协方差分布(即点云法线方向不在局部平面上)。假设局部拟合平面上某一点的法向量e1e_1e1​是沿X轴的,则该点协方差矩阵变为:

(ϵ00010001)\left(\begin{array}{lll} \epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right)⎝⎛​ϵ00​010​001​⎠⎞​

ϵ\epsilonϵ为沿着法线方向极小的常数。

因为实际上法向量并不一定是沿xxx轴方向,所以需要进行坐标转换。假设 bi,aib_i,a_ibi​,ai​对应的法向量分别为ui,viu_i,v_iui​,vi​,则它们对应的协方差阵为:
CiB=Rμi⋅(ϵ00010001)⋅RμiTCiA=Rνi⋅(ϵ00010001)⋅RνiT\begin{array}{l} C_{i}^{B}=\mathbf{R}_{\mu_{i}} \cdot\left(\begin{array}{ccc} \epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right) \cdot \mathbf{R}_{\mu_{i}}^{T} \\C_{i}^{A}=\mathbf{R}_{\nu_{i}} \cdot\left(\begin{array}{ccc} \epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right) \cdot \mathbf{R}_{\nu_{i}}^{T} \end{array}CiB​=Rμi​​⋅⎝⎛​ϵ00​010​001​⎠⎞​⋅Rμi​T​CiA​=Rνi​​⋅⎝⎛​ϵ00​010​001​⎠⎞​⋅Rνi​T​​

…详情请参照古月居

相关内容

热门资讯

怎么解除订阅安卓系统,安卓系统... 你是不是也和我一样,手机里订阅了好多服务,结果现在想解除订阅,却一头雾水?别急,今天就来手把手教你如...
安卓系统停用怎么开启,轻松恢复... 亲爱的手机控们,你是否曾经遇到过安卓系统突然停用的情况,让你手忙脚乱,不知所措?别担心,今天就来教你...
安卓系统电池健康度,电池健康度... 你有没有发现,你的安卓手机最近是不是有点儿不给力了?电池续航能力大不如前,充电速度也慢了不少?别急,...
安卓系统按键怎么截图,安卓系统... 你是不是也和我一样,有时候想截个图分享给朋友,却发现安卓手机的截图功能有点神秘呢?别急,今天就来手把...
购票系统安卓源代码,架构设计与... 你有没有想过,那些我们每天离不开的购票系统,它们背后的秘密是什么呢?今天,就让我带你一探究竟,揭开购...
安卓手机系统后台测试,深度解析... 你有没有发现,你的安卓手机后台总是悄悄地忙碌着?别小看了这些后台程序,它们可是手机系统稳定运行的关键...
安卓系统重启的图标,解锁设备新... 手机突然重启,是不是心里有点慌?别急,今天就来和你聊聊安卓系统重启的图标,让你一眼就能认出它,再也不...
车载智慧屏安卓系统,智能出行新... 你有没有发现,现在的车载智慧屏越来越智能了?尤其是那些搭载了安卓系统的,简直就像是个移动的小电脑,不...
安卓系统连上网权限,解锁设备无... 你有没有发现,你的安卓手机里有些应用总是偷偷连上网?别小看这个小小的网络权限,它可是能影响你隐私、消...
安卓谷歌操作系统,探索安卓谷歌... 你知道吗?在智能手机的世界里,有一个操作系统可是无人不知、无人不晓,那就是安卓谷歌操作系统。它就像一...
安卓系统手写%怎样调出,具体实... 你有没有遇到过这种情况:在使用安卓手机的时候,突然想用手写输入法来记录一些灵感或者重要信息,可是怎么...
安卓手机重置 系统设置,轻松恢... 手机用久了是不是感觉卡顿得厉害?别急,今天就来教你怎么给安卓手机来个大变身——重置系统设置!想象你的...
win如何安装安卓系统,Win... 哇,你有没有想过,让你的Win系统也能玩转安卓应用?没错,就是那种在手机上轻松自如的安卓系统,现在也...
苹果qq和安卓系统,跨平台体验... 你有没有发现,现在手机市场上,苹果和安卓的较量可是越来越激烈了呢!咱们就来聊聊这个话题,看看苹果QQ...
显示最好的安卓系统,探索最新旗... 你有没有想过,为什么安卓系统那么受欢迎呢?它就像一个魔法盒子,里面装满了各种神奇的魔法。今天,就让我...
安卓app怎么降级系统,系统版... 你有没有发现,有时候安卓手机的系统更新后,新功能虽然炫酷,但老系统用起来更顺手呢?别急,今天就来教你...
雷军脱离安卓系统,引领科技变革... 你知道吗?最近科技圈可是炸开了锅,因为我们的雷军大大竟然宣布要脱离安卓系统,这可真是让人大跌眼镜啊!...
安卓系统自动开网络,安卓系统自... 你有没有发现,手机里的安卓系统有时候会自动开启网络连接,这可真是让人又爱又恨啊!有时候,你正专心致志...
安卓系统怎样控制后台,因为服务... 手机里的安卓系统是不是感觉越来越卡了?后台程序太多,不仅耗电还影响性能。别急,今天就来教你怎么巧妙地...
安卓系统打游戏推荐,一触即达! 你有没有发现,现在手机游戏越来越好玩了?不管是休闲小游戏还是大型MMORPG,都能在手机上畅玩。但是...