点云NDT配准方法介绍
三维配准中经常被提及的配准算法是ICP迭代的方法,这种方法一般般需要提供一个较好的初值,也就是需要粗配准,同时由于算法本身缺陷,最终迭代结果可能会陷入局部最优,导致配准失败,往往达不到我们想要的效果。本文介绍的是另一种比较好的配准算法,NDT配准。所谓NDT就是正态分布变换,作用与ICP一样用来估计两个点云之间的刚体变换。用标准最优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快。这个配准算法耗时稳定,跟初值相关不大,初值误差大时,也能很好的纠正过来。

对比ICP配准方法需要提出不合适的点对,比如点对之间距离过大,包含了边界点对,每次迭代都要搜索最近点,计算代价较大。正态分布变换(NDT)算法是一种很有用途的点云配准方法,是一个一次性初始化工作,不需要消耗大量的代价计算最近邻搜索匹配点,并且概率密度函数在两幅图像采集之间的额时间可以离线计算出来,但仍在存在的问题很多,包括收敛域差、NDT代价函数的不连续性以及稀疏室外环境下不可靠的姿态估计等。
具体关于两种方法的对比可查看文献:http://www.diva-portal.org/smash/get/diva2:276162/FULLTEXT02.pdf
那么针对无损检测算法在二维和三维场景下的不足,也会有研究者们提出了相应的解决方法。为了改进二维扫描配准的无损检测收敛域,提出了一种多尺度K均值无损检测(MSKM-NDT)算法,利用K均值聚类对二维点云进行分割,并对多尺度聚类进行扫描配准优化。与标准无损检测算法相比,k-均值聚类方法生成的高斯分布更少,从而可以评估所有高斯聚类的成本函数,从而保证算法的收敛性。由于K均值聚类不能很好地扩展到三维,提出了分段贪婪聚类无损检测(SGC-NDT)方法,作为一种改进和保证三维点云收敛的替代方法,该点云包含与环境地面相对应的点。SGC-NDT算法使用高斯过程回归模型分割接地点,并使用贪婪方法对非接地点进行聚类。区域增长聚类算法提取环境中的自然特征,生成高斯聚类,在无损检测框架内用于扫描配准。涉及到的相关文献如下:
Das A, Waslander SL. Scan Registration using Segmented Region Growing NDT. International Journal of Robotics Research. 2014.
Das A, Servos J, Waslander SL. 3D Scan Registration Using the Normal Distributions Transform with Ground Segmentation and Point Cloud Clustering. In 2013 IEEE International Conference on Robotics and Automation. Karlsruhe, Germany; 2013.
Das A, Waslander SL.Scan Registration with Multi-Scale K-Means Normal Distributions Transform. In Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems. Villamoura, Portugal; 2012.
那么接下里就具体介绍一下NDT算法的步骤
(1)该算法的第一步是将扫描占用的空间细分为单元格网格(2D图像中的正方形或3D中的立方体),基于单元内的点分布计算每个单元的PDF。 每个单元格中的PDF可以解释为单元格内表面点x^的生成过程。将点云投票到各个格子中,计算每个格子的PDF,PDF可以当做表面的近似表达,协方差矩阵的特征向量和特征值可以表达表面信息(朝向、平整度) 格子内少于3个点,经常会协方差矩阵不存在逆矩阵,所以只计算点数大于5的cell,涉及到下采样方法。

正态分布给出了点云的分段平滑表示,具有连续导数。 每个PDF都可以看作是局部表面的近似值,描述了表面的位置以及它的方向和平滑度。 2D激光扫描及其相应的正态分布如图6.1所示。 图6.2显示了矿井隧道扫描的3D正态分布。


由于目前的工作主要集中在正态分布上,让我们更仔细地研究单变量和多变量正态分布的特征。 在一维情况下,正态分布的随机变量x具有一定的期望值μ,并且关于该值的不确定性用方差σ表示。

在多维的情况下,平均值和方差由平均向量 μ和协方差来描述矩阵Σ。 协方差矩阵的对角元素表示方差每个变量,非对角线元素表示的是协方差变量。 图6.3说明了一维,二维和三维的正态分布

(2)将第二幅扫描点云的每个点按转移矩阵T的变换。
(3)第二幅扫描点落于参考帧点云的哪个 格子,计算响应的概率分布函数

(4)当使用NDT进行扫描点配准时,目标是找到当前扫描点的位姿,以最大化当前扫描的点位于参考扫描表面上的可能性,该位姿是要优化的参数; 也就是说,当前扫描的点云估计的旋转和平移向量。求所有点的最优值,目标函数为

2D-NDT
对于2D配准,有三个要优化的转换参数。 让p = [tx,ty,φ]T,其中 tx 和 ty 是平移参数,φ是旋转角度。 使用逆时针旋转,2D变换功能是


3D-NDT
NDT的2D和3D配准的主要区别在于空间变换函数T( p, x)及其偏导数。3D NDT使用欧拉角,有六个转换要优化的参数:三个用于平移,三个用于旋转。
可以使用六维参数矢量对姿势进行编码 p6 = [tx,ty,tz,φx,φy,φz]T
使用欧拉序列z-y-x,3D变换函数是


更具体的解释可查看文献
在PCL中给出的NDT例子如下
http://pointclouds.org/documentation/tutorials/normal_distributions_transform.php#normal-distributions-transform
点云NDT配准方法介绍的更多相关文章
- [转载]C#读写txt文件的两种方法介绍
C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...
- fstream的使用方法介绍
转载自: fstream的使用方法介绍 - saga's blog - C++博客 http://www.cppblog.com/saga/archive/2007/06/19/26652.html ...
- Windows下获取本机IP地址方法介绍
Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...
- WebService服务调用方法介绍
1 背景概述 由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法. 2 ...
- C#读写txt文件的两种方法介绍
C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...
- jquery的ajax()函数传值中文乱码解决方法介绍
jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...
- UploadifyAPI-上传插件属性和方法介绍
上一篇文章简单的介绍了Uploadify上传插件的使用.但是对于常用的属性和方法并没有说明.授人以鱼不如授人以渔,我决定将常用的属性列举出来,供大伙参考参考. Uploadify属 ...
- js保留小数点后N位的方法介绍
js保留小数点后N位的方法介绍 利用toFixed函数 代码如下 复制代码 <script language="javascript"> document.write( ...
- Ubuntu系统中登陆阿里云服务器的方法
如果您购买了阿里云服务器,恰巧又在使用Ubuntu操作系统,那么恭喜你来对地方了,今天给大家分享一下如何在Ubuntu中登陆阿里云服务器: 主要使用两款软件:1.SecureCRT:2.SecureF ...
随机推荐
- Python3之弹性力学——应力张量2
问题 已知某应力张量的分量为 \[ \sigma_{11}=3,\quad\sigma_{12} = \sigma_{13} = 1, \quad \sigma_{22} = \sigma_{33} ...
- 2017 ACM 字符串的本质
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2017 思路:思考字符串和数字的本质区别是什么. 今天先是试着做了一个完全背包的题目,发现自己还是不会做,弄 ...
- 2160 母猪的故事 ACM 数学规律
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2160 中文题目,很简单,找规律就好. 自己画树状图找规律,开始想复杂了,找的规律:Fn=2*F(n-1)- ...
- Lua的 table.sort排序
在用table.sort 排序的时候注意,如果使用多个条件排序,应在一个排序函数里按照条件优先级进行比较排序. 例如 local t = { {time = , i = }, {time = , i ...
- LeetCode(509. 斐波那数)
问题描述: 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 F(N) ...
- 潭州课堂25班:Ph201805201 django 项目 第二十课 数据库分析设计图 (课堂笔记)
https://www.dbdesigner.net/
- 修改mybatis plus Generator模板生成字段注释枚举常量
修改mybatis plus Generator模板生成字段注释枚举常量 本文基于最新的mybatis-plus 3.0.1版本源码修改,如果使用其它版本,处理方式也类似,主要是生成Entity的Fr ...
- python网络编程(四)
TFTP客户端 1. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输 ...
- Jmeter接口测试实例3-登录
Jmeter实例3:登录 添加http协议—添加IP.路径.方法,察看结果树,运行 登录成功
- ISDN简记
简介 ISDN:(Integrated Services Digital Network,综合业务数字网) 是以综合数字电话网(IDN)为基础发展演变而形成的通信网,能够提供端到端的数字连接,用来支持 ...