点云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 ...
随机推荐
- 1006 Tick and Tick
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1006 题意: 24小时中,三个指针之间超过某个度数的时间占所有时间的百分比是多少. 思路:主要是物理和数学 ...
- (Android系统目录结构)目录预览
Android系统进入设备后,查看根目录下文件系统,如下: 重要目录和文件说明:mnt 挂载点目录etc 系统主要配置文件system Android 系统文件sys Linux 内核文件proc 运 ...
- 使用scrapy爬取百度股票
1.spiders文件夹下的爬虫文件 # -*- coding: utf-8 -*- import scrapy import re import random from scrapy.http.re ...
- 基于socket构造c/s 架构软件
1.socket作用 socket层介于应用层和传输层之间,它起着连接应用层和传输层的功能,同时它能连接应用层和网络层. socket把复杂的tcp/ip协议隐藏在socket接口后面,对用户来说,一 ...
- 读《31天学会CRM项目开发》记录2 - 企业信息管理系统
在信息技术的快速推动下,企业如果依然利用传统的管理方式,以人为主,那效率便会大打折扣.在此背景下,企业信息化系统得 到了高速发展.如我们常见的ERP系统.MES系统,都是提高公司运行效率,降低运营以及 ...
- 最大流:Dinic算法
蒟蒻居然今天第一次写网络流 我太弱啦! 最大流问题有很多解法 虽然isap常数巨小 但是连dinic都写挂的本蒟蒻并不会orz 那么我们选用比较好实现的dinic来解决最大流问题 来一段定义: ...
- phpExcel导入大数据量情况下内存溢出解决方案
PHPExcel版本:1.7.6+ 在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过 PHPExcel_Settings::setCacheStorageMeth ...
- soapUI-Webservice接口测试
打开soapUI File -> New SOAP Project 在WSDL中输入:http://www.webxml.com.cn/WebServices/WeatherWebService ...
- JS_高程3.基本概念(2)
1.ECMAScript数据类型 5种简单数据类型,分别是: Undefined Null Boolean Number String 1种复杂数据类型: Object (1)typeof操作符——检 ...
- hihocoder1712 字符串排序(思维)
https://hihocoder.com/problemset/problem/1712 感觉解法呼之欲出,却出不来.. 一个很好的思路是,根据新的顺序表,把给定的n组字符串换成旧表对应的字符,然后 ...