Generalized-ICP

文章目录

  • Generalized-ICP
    • Abstract
    • Introduction
    • ScanMatching
      • Generalized ICP
      • Generalized ICP的应用:plane-to-plane ICP
    • Results

Abstract

这篇文章的提供一种新方法,可以将point-to-point icp 与point-to-plane icp整合起来。新方法对于错误匹配更加鲁棒,使得maximum match distance参数(详见下文)的调节更加容易。除了性能上的提升以外,新方法允许更加expressive的 probabilistic model 整合进ICP框架里来。

Introduction

ScanMatching

整理了ICP的各种变体,回顾了经典ICP方法。

强调了 max_correspondence参数的设置,该参数是为了防止两片点云之间不存在overlap,所以要限制查找最近点的距离。在使用时,如果设置的太小, 算法会变得short sighted,容易导致bad convergence。设的太大,则容易出现错误匹配,影响算法结果。

Generalized ICP

本文方法的核心思想是如何从概率的角度去看待和推导出ICP算法的目标函数。

假设有两个匹配好的点集,A={ai}i=1,2...N,B={bi}i=1,2...N,且ai和bi是对应点A=\{a_i\}_{i=1,2...N},B=\{b_i\}_{i=1,2...N},且a_i和b_i是对应点A={ai​}i=1,2...N​,B={bi​}i=1,2...N​,且ai​和bi​是对应点(A为source,B为target)

再假设两个点云中的每个点,都是服从高斯分布的,即:
ai∼N(ai^,CiA)bi∼N(bi^,CiB)a_i\sim N(\hat{a_i},C_i^{A})\\ b_i\sim 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​^​即是真值)有偏差的,我们可以合理假设他们的分布都是高斯分布)

对于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。

定义残差di(T)=bi−Taid_i^{(T)}=b_i-Ta_idi(T)​=bi​−Tai​

因为ai,bia_i,b_iai​,bi​都被我们假设为独立的、服从高斯分布的随机变量,所以有:
diT∗∼N(0,CiB+(T∗)CiA(T∗)T)d_i^{T*}\sim N(0,C_i^{B}+(T^*)C_i^{A}(T^*)^T) diT∗​∼N(0,CiB​+(T∗)CiA​(T∗)T)
接下来就是这篇文章的重点,TTT可以被看作diTd_i^TdiT​的概率分布中待估计的分布参数,借助最大似然估计(MLE)的思想,有:
T=arg⁡max⁡T∏ip(diT)T=\mathop{\arg\max}_T\prod_ip(d_i^{T}) T=argmaxT​i∏​p(diT​)
上式可以化简为:
T=arg⁡min⁡T∑idi(T)T(CiB+TCiATT)−1di(T)T=\mathop{\arg\min}_T\sum_id_i^{(T)^{T}} (C_i^B+TC_i^AT^T)^{-1}d_i^{(T)} T=argminT​i∑​di(T)T​(CiB​+TCiA​TT)−1di(T)​
这里有点疑问,我们稍微推导下:
多元正态分布(KKK维随机变量)的概率密度函数:
fμ,Σ(x)=1(2π)K2⋅1∣Σ∣12⋅e−12(x−μ)TΣ−1(x−μ)f_{\mu, \Sigma}(x)=\frac{1}{(2 \pi)^{\frac{K}{2}}} \cdot \frac{1}{|\Sigma|^{\frac{1}{2}}} \cdot e^{-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)} fμ,Σ​(x)=(2π)2K​1​⋅∣Σ∣21​1​⋅e−21​(x−μ)TΣ−1(x−μ)
对于NNN个样本点x1,x2...xnx_1,x_2...x_nx1​,x2​...xn​,其似然函数:
L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)…fμ,Σ(xN)=(2π)−KN2⋅∣Σ∣−N2⋅e−12∑n=1N(xn−μ)TΣ−1(xn−μ)\begin{array}{c} L(\mu, \Sigma)=f_{\mu, \Sigma}\left(x^{1}\right) f_{\mu, \Sigma}\left(x^{2}\right) \ldots f_{\mu, \Sigma}\left(x^{N}\right) \\ =(2 \pi)^{-\frac{K N}{2}} \cdot|\Sigma|^{-\frac{N}{2}} \cdot e^{-\frac{1}{2} \sum_{n=1}^{N}\left(x^{n}-\mu\right)^{T} \Sigma^{-1}\left(x^{n}-\mu\right)} \end{array} L(μ,Σ)=fμ,Σ​(x1)fμ,Σ​(x2)…fμ,Σ​(xN)=(2π)−2KN​⋅∣Σ∣−2N​⋅e−21​∑n=1N​(xn−μ)TΣ−1(xn−μ)​
取对数:
ln⁡L(μ,Σ)=−KN2ln⁡(2π)−N2ln⁡∣Σ∣−12∑n=1N(xn−μ)TΣ−1(xn−μ)=C−N2ln⁡∣Σ∣−12∑n=1N(xn−μ)TΣ−1(xn−μ)\begin{aligned} \ln L(\mu, \Sigma)=-\frac{K N}{2} \ln (2 \pi)-\frac{N}{2} \ln |\Sigma|-\frac{1}{2} \sum_{n=1}^{N}\left(x^{n}-\mu\right)^{T} \Sigma^{-1}\left(x^{n}-\mu\right) \\ &=C-\frac{N}{2} \ln |\Sigma|-\frac{1}{2} \sum_{n=1}^{N}\left(x^{n}-\mu\right)^{T} \Sigma^{-1}\left(x^{n}-\mu\right) \end{aligned} lnL(μ,Σ)=−2KN​ln(2π)−2N​ln∣Σ∣−21​n=1∑N​(xn−μ)TΣ−1(xn−μ)​=C−2N​ln∣Σ∣−21​n=1∑N​(xn−μ)TΣ−1(xn−μ)​

当正态分布的协方差矩阵的行列式为常数时,只需要优化最后一项就可以了。最后一项的二次型又被称作马哈拉诺比斯距离(马氏距离),极大似然估计等价于最小化样本点与均值之间的马氏距离。更详细的内容可以参考 高翔《视觉SLAM14讲》6.1 状态估计问题 。

但是本文中协方差矩阵为Σ=CiB+(T∗)CiA(T∗)T\Sigma=C_i^{B}+(T^*)C_i^{A}(T^*)^TΣ=CiB​+(T∗)CiA​(T∗)T,尽管TTT是三维刚体变换矩阵,其行列式为1。但无法说明∣Σ∣|\Sigma|∣Σ∣是常数,所以不是太明白为什么作者把这项直接忽略了,有可能是这项相当于一个TTT的平方项,对于最小值影响不大。 ?????

以上就是Generalized ICP的核心内容。有了上式,point-to-point ICP可以看成其special case,令CiB=I,CiA=0即可C_i^B=I,C_i^A=0即可CiB​=I,CiA​=0即可。point-to-plane icp也可以被纳入此框架下(这里涉及正交投影矩阵的知识正交投影阵)。

Generalized ICP的应用:plane-to-plane ICP

这一节要借助上文的结论,推导出plane-to-plane ICP

前提假设:

  1. 我们平常处理的点云有什么特点?它实际上是3维空间中surface的采样点集合。这意味着我们处理的是3维空间中的2维流形。现实世界中的surface,都是局部可微的,因此我们可以假设点云的局部是一个平面。
  2. 两个视角获取的点云,相当于从两个视角对2维流形进行了采样,在两个视角采样到同一个点的概率很小,也就是说correspondance will not be exact. 因此,每一个采样点实际上只提供了一个约束,那就是法向量的方向。

基于以上两点,我们可以假设点PPP处的协方差矩阵为以下形式:在沿着基向量e1e_1e1​的方向(local plane的法向量方向)方差较小,而在另外两个正交方向的方差较大。
(ϵ00010001)\left(\begin{array}{lll} \epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right) ⎝⎛​ϵ00​010​001​⎠⎞​
设点bi,aib_i,a_ibi​,ai​处的法向量分别为μi和 νi\mu_{i} \text { 和 } \nu_{i}μi​ 和 νi​,则协方差矩阵为:
CiB=Rμi⋅(ϵ00010001)⋅RμiTCiA=Rνi⋅(ϵ00010001)⋅RνiT\begin{aligned} 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{aligned} CiB​CiA​​=Rμi​​⋅⎝⎛​ϵ00​010​001​⎠⎞​⋅Rμi​T​=Rνi​​⋅⎝⎛​ϵ00​010​001​⎠⎞​⋅Rνi​T​​

其中RxR_xRx​为旋转矩阵,可以将e1e_1e1​转换到与xxx 一致的方向。

个人理解,协方差矩阵实际上起到了为cost function TTT的每一项的不同维度加权的作用。效果是:

  1. 在优化过程中,沿着法向量方向的约束较紧,沿着其他两个方向的约束较松
  2. 如果两个法向量方向不一致的点,却因为距离较近而错误地匹配在了一起,那么以上协方差矩阵的设计,将使得沿着法向量方向的约束被削弱

图示如下:

Results

作者对三个算法进行了比较。

  1. standard icp: 尽管有封闭解,但为了可比较性,还是使用了共轭梯度法做优化。最大迭代次数250
  2. point to plane icp:最大迭代次数50
  3. plane to plane icp:最大迭代次数50

测试方法:

在两个已知位姿关系的点云测试算法的收敛性。

对simulated data 和real data分别进行了测试:

  • simulated data 是使用SICK公司的scanner获取的,分别扫描了indoor和outdoor的场景。然后模拟了 scanner 在不同位置产生的点云,并加入Gauss噪声。
  • real data 是车载激光雷达采集的。ground truth由SLAM 技术给出。

以上三个数据集:simulated data indoor, simulated data outdoor, real data ,每个都采集了多组scan pairs

初始位姿是给每组scan pair的ground truth 上加上一个均匀分布的噪声(±1.5m,±15度)产生的(每个scan pair 会测十个初始位姿)。针对不同的数据集,算法的performance以scan pairs的平移误差的均值来表征。不考虑旋转误差。

max_correspondence参数对配准结果很重要,作者测量了该参数对误差的影响:

从图中可以看出:

  1. 算法的平均error: standard icp > point to plane icp > generalized icp
  2. generalized icp 对max correspondence 参数的设置最不敏感,即使设的过大,其performance的下降也比其他两种方法要小;但是仍然可以看到,在simulated data 的表现比real data要好,这是因为real data中会有更多高频的细节信息,存在更多generalized icp处理不了的情况:两个点是错误匹配,但是法向量方向却是一致的。

[论文阅读][ICP变种] Generalized-ICP相关推荐

  1. 点云配准论文阅读笔记--Comparing ICP variants on real-world data sets

    目录 写在前面 点云配准系列 摘要 1引言(Introduction) 2 相关研究(Related work) 3方法( Method) 3.1输入数据的敏感性 3.2评价指标 3.3协议 4 模块 ...

  2. Learning Multiview 3D point Cloud Registration论文阅读笔记

    Learning multiview 3D point cloud registration Abstract 提出了一种全新的,端到端的,可学习的多视角三维点云配准算法. 多视角配准往往需要两个阶段 ...

  3. rgb fusion检测不到显卡_【论文阅读27】Co-Fusion

    主要内容 物体级别的语义SLAM.维护一个背景模型和多物体模型,每个模型由面元地图表示. 基于运动分割和语义信息检测运动物体. 使用基于ICP对齐的几何误差和基于颜色差异的光度误差跟踪背景模型(相机位 ...

  4. DCP(Deep Closest Point)论文阅读笔记以及详析

    DCP论文阅读笔记 前言 本文中图片仓库位于github,所以如果阅读的时候发现图片加载困难.建议挂个梯子. 作者博客:https://codefmeister.github.io/ 转载前请联系作者 ...

  5. 论文阅读:ThinLTO: Scalable and Incremental LTO

    ThinLTO: Scalable and Incremental LTO 论文阅读笔记 A little bit of history. SYZYGY – A Framework for Scala ...

  6. 【论文阅读】7-Discovering Structural Regularity in 3D Geometry

    [论文阅读]7-Discovering Structural Regularity in 3D Geometry 1.Input: 2.Processing pipeline 2.1.Transfor ...

  7. 深度学习论文阅读目标检测篇(三):Faster R-CNN《 Towards Real-Time Object Detection with Region Proposal Networks》

    深度学习论文阅读目标检测篇(三):Faster R-CNN< Towards Real-Time Object Detection with Region Proposal Networks&g ...

  8. 【论文阅读】RoadMap: A Light-Weight Semantic Map for Visual Localization towards Autonomous Driving

    文章:RoadMap: A Light-Weight Semantic Map for Visual Localization towards Autonomous Driving 作者:Tong Q ...

  9. 论文阅读:SuMa++

    论文阅读:SuMa++ 论文:<SuMa++: Efficient LiDAR-based Semantic SLAM>  SuMa++是建立在SuMa基础上的方法,该方法使用了基于Ran ...

最新文章

  1. Udacity机器人软件工程师课程笔记(二十八) - 卷积神经网络实例 - Fashion-MNIST数据集
  2. Spring boot ----RestTemplate学习笔记
  3. calcite mysql_Apache顶级项目 Calcite使用介绍
  4. lcp mysql cluster_Mysql Cluster 非root用户启动ndbd节点报错
  5. Adobe illustrator 抽丝剥茧选中多个点 - 连载 13
  6. phpstudy 启动mysql服务问题
  7. 解决Homebrew报错Error: Failure while executing; git clone https://github.com/Homebrew/homebrew-core....
  8. 离婚率逐年上升,数据分析告诉你背后的主因竟然是它!
  9. php性能测试xhprof,PHP性能分析之Xhprof的使用
  10. [转载] [Python] np.ones_like(ndarray)和np.zeros_like(ndarray)
  11. LoadRunner 11简单使用
  12. Atitit.js获取上传文件全路径
  13. JAVA贪吃蛇小游戏源代码系列
  14. 16S多样性组成谱研究,9.13分的Water Research轻松二连发!
  15. php源码旅行网站模板,背包客旅行扁平网站模板
  16. 黑马培训python学费
  17. Excel工作表事件(1)
  18. JSP Commons-FileUpload 组件实现文件上传
  19. ip自签名ssl证书
  20. (35)zabbix Event acknowledgment事件确认

热门文章

  1. 【转】怎样成为优秀的软件模型设计者(文末提供下载)
  2. Vue开启Gzip打包异常:webpack打包报错Cannot read property ‘emit‘ of undefined
  3. 服务器上使用docker安装部署禅道zentao
  4. MYSQL性能查看(命中率,慢查询)
  5. 【kubernetes / k8s 踩坑记录】一定要关闭SWAP
  6. sqlmap第一次打靶成功
  7. 如何得知mysql表结构发生变化了呢?
  8. javascript中索引_如何在JavaScript中找到数字在数组中所属的索引
  9. java this的用法
  10. Simulink_Debug的使用