点云配准的传统算法ICP与NDT概述
Posted Being_young
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点云配准的传统算法ICP与NDT概述相关的知识,希望对你有一定的参考价值。
公众号致力于分享点云处理,SLAM,三维视觉,高精地图相关的文章与技术,欢迎各位加入我们,一起交流一起进步,有兴趣的可联系微信:920177957。本文来自点云PCL博主的分享,未经作者允许请勿转载,欢迎各位同学积极分享和交流。
什么是点云配准
点云配准是指将多个点云数据集在相同坐标系下进行对齐的过程,使得它们在空间中具有一致的位置和姿态。在点云配准中,需要估计点云之间的转换关系,包括平移、旋转和尺度等变换。点云配准在三维重建、物体检测、环境感知、机器人导航和虚拟现实等领域有着广泛的应用。点云配准的主要目标是最小化点云之间的误差,通常通过匹配点云中的对应点来实现。在匹配点云时,需要考虑到点云中的噪声、不完整性和采样密度等问题,以及在不同的场景下可能出现的变形和运动。常见的点云配准方法包括ICP(Iterative Closest Point)和NDT(Normal Distribution Transform)。接下来将分别介绍这两种方法的原理、使用场景、优缺点。
点云ICP算法
点云ICP算法是一种经典的点云配准算法,其全称为Iterative Closest Point算法,是一种迭代优化的方法,用于将两个或多个点云数据集对齐。该算法通过迭代找到最优的刚体变换矩阵,使得两个点云之间的重叠部分最大化,从而实现点云的配准。
ICP算法的基本思路是:先将待配准的点云中的一个点集作为参考点集,然后计算待配准点云中每个点到参考点集的最近邻点,接着通过计算两个点云之间的误差来估计刚体变换矩阵,并将待配准点云进行刚体变换,重复以上步骤直至收敛或达到迭代次数上限。最终得到的刚体变换矩阵即为将待配准点云对齐到参考点云的变换矩阵。
ICP算法的优点:其简单易懂、容易实现,并且对于初始位姿的依赖性较低。但是,ICP算法的缺点也很明显,主要表现在以下几个方面:
对于初值的敏感度较高,如果初值选的不好,则有可能会陷入局部最优解。
ICP算法只能对刚性变换进行配准,对于非刚性变换无法适用。
ICP算法的时间复杂度较高,对于大规模的点云配准需要消耗大量的计算资源和时间。
当点云之间没有很好的匹配时,ICP算法的配准结果会受到较大的影响,容易出现误匹配。
ICP算法是一种经典的点云配准算法,具有一定的优点和缺点,在实际应用中需要根据具体的场景选择合适的算法,并结合其他算法进行优化。
ICP算法迭代停止的条件通常有以下几种:
1. 最大迭代次数:设定一个最大的迭代次数,当达到该次数后,算法强制停止迭代。
2. 目标误差:设定一个目标误差阈值,当当前迭代的误差小于该阈值时,算法停止迭代。
3. 迭代误差的变化率:如果当前迭代与上一次迭代的误差变化率小于设定的阈值,算法停止迭代。
4. 迭代后的点云匹配误差小于阈值:如果点云匹配误差小于设定的阈值,算法停止迭代。
根据不同应用场景和需求,选择适合的停止条件可以提高算法的效率和精度。
ICP算法主要有以下几种方法:
基本ICP算法:最基本的ICP算法采用欧式距离作为度量,每次迭代通过最小化点对之间的距离来计算变换矩阵,直到达到收敛条件。
改进ICP算法:针对基本ICP算法的缺点,出现了一些改进算法,如点对应加权ICP算法、基于法向量的ICP算法、基于惩罚项的ICP算法等。
快速ICP算法:基于k-d树、八叉树等数据结构的快速ICP算法,可以快速寻找最近邻点,提高算法的效率。
基于特征的ICP算法:利用点云的局部几何特征(如法向量、曲率等)来加速匹配过程,例如FPFH算法和SHOT算法等。
鲁棒ICP算法:针对数据噪声和局外点的影响,设计了一些鲁棒ICP算法,如基于最小二乘估计的鲁棒ICP算法和基于稳健估计的鲁棒ICP算法等。
不同的ICP算法适用于不同的应用场景,需要根据实际情况选择合适的算法。
点云NDT算法
点云NDT算法(Normal Distribution Transform)是一种基于高斯分布的点云配准方法。与ICP算法相比,NDT算法更适用于不规则形状、噪声和部分遮挡的场景。
NDT原理:将点云转换为高斯分布的函数形式,通过计算不同高斯分布函数之间的匹配来进行点云配准。具体来说,算法首先将一个点云转换为三维高斯分布函数(即NDT分布),然后通过最小化两个点云之间的NDT分布函数之间的KL散度来进行点云配准。具体来说,NDT算法首先将原始点云数据离散化为一个三维的网格(voxel grid),并对每个网格中的点云进行采样和特征提取。这里采用了点云法向量作为特征,通过计算每个网格中点云的均值和协方差矩阵,可以得到一个高斯分布,即一个GMM。NDT算法会将目标点云和参考点云都转化成GMM的形式,然后计算两个GMM之间的KL散度,用于评估它们之间的相似度。在计算KL散度时,NDT算法采用了一种高效的方法,即通过将每个网格中心点的高斯分布变换到参考点云坐标系下,可以大大减少计算复杂度。最后,NDT算法通过最小化两个GMM之间的KL散度来计算相对位姿变换,得到一个最优的刚体变换矩阵,从而实现点云配准。由于NDT算法采用了高效的计算方法,因此在处理大规模点云数据时具有较高的效率和精度。
NDT算法主要分为两步:NDT建图和NDT匹配。在NDT建图阶段,算法将一个点云转换为高斯分布函数,并将其存储为一个栅格地图。在NDT匹配阶段,算法将两个点云都转换为高斯分布函数,并使用最小化KL散度的方法来找到它们之间的最佳匹配。与ICP算法相比,NDT算法具有更高的配准精度和鲁棒性,尤其是在噪声和不规则形状的情况下。然而,NDT算法的计算量相对较大,需要较长的处理时间。
ICP与NDT有什么区别?
ICP和NDT是点云配准领域中两种常用的方法,它们在原理和实现方式上有所不同。在原理、适用场景、优缺点等方面有着不同的特点
区别:
算法原理:ICP算法是基于最小二乘法的迭代算法,通过不断迭代计算源点云与目标点云之间的最小距离,直到满足停止条件为止;NDT算法是基于高斯分布的统计配准方法,通过将点云离散化为一组高斯分布,计算目标点云和源点云之间的匹配程度,通过最大化匹配程度来实现配准。
点云数据处理:ICP算法直接使用点云数据,而NDT算法需要将点云数据转化为高斯分布。
计算效率:在点云数量较少时,ICP算法的计算速度较快,但在点云数量较多时,ICP算法的计算复杂度会急剧增加,计算速度会变慢;NDT算法的计算速度相对较慢,但是它在处理大规模点云数据时有优势。
适用场景不同:
ICP算法适用于点云之间存在较小变形和噪声的场景,如室内环境、车辆周围环境等,对数据噪声和变形比较敏感。
NDT算法适用于大型点云数据的配准,能够应对点云之间存在较大变形和噪声的情况,如地图构建、机器人导航等。
优缺点不同:
ICP算法优点在于简单易实现、迭代速度快,但对初始位姿敏感,容易陷入局部最优解。NDT算法优点在于能够处理大型点云数据、对数据噪声和变形不敏感,具有较高的配准精度,但需要进行点云的离散化处理,计算速度相对较慢。ICP和NDT都有各自的优势和适用场景,在实际应用中,应根据具体情况选择合适的方法来进行点云配准。同时,还可以结合两种方法的优点,通过组合使用来提高配准精度和速度。
目前常用的点云配准算法
Go-ICP算法:ICP的改进算法,使用高斯牛顿法代替最小二乘法,能够更快地收敛。Go-ICP是一种高效的点云配准算法,可以在处理非刚性点云配准问题时提高速度和准确性。它结合了传统的ICP算法和一些图形学和优化技术,可以自适应地调整其运动模型,使其更适应不同的配准场景。Go-ICP算法采用基于点对的ICP方法,并采用一种自适应的能量函数作为目标函数。该能量函数包括两部分:一个是点对之间的距离测量,另一个是正则化项,用于避免局部最小值。与传统的ICP算法不同,Go-ICP算法在每次迭代中不仅更新变换矩阵,还会对变换模型进行优化,以更好地适应不同的配准场景。
Go-ICP算法还具有以下优点:
1. 可以处理非刚性点云配准问题;
2. 自适应地调整运动模型,更适应不同的配准场景;
3. 支持GPU加速,速度快。
Go-ICP算法已经在多个点云配准应用中得到了验证,包括机器人导航、三维重建、医学影像处理等领域。
FGR算法(Fast Global Registration):一种基于几何特征的配准算法,能够快速、准确地对点云进行配准。由西班牙巴塞罗那自治大学的J. A. Bagnell等人于2017年提出。相比于传统的ICP算法和其变体,FGR具有更高的速度和更强的鲁棒性,在实际应用中取得了不错的效果。FGR算法基于点对之间的法向量、距离和相对姿态进行匹配。与ICP算法不同的是,FGR首先将源点云和目标点云分别进行降采样,然后计算它们之间的特征。这些特征包括法向量、球面坐标、法向量协方差矩阵、曲率等等。接下来,FGR使用一种基于特征的快速匹配方法,将源点云的每个点与目标点云的一些候选点进行匹配,找到最优的匹配点对。在找到匹配点对之后,FGR使用一个全局优化算法来进一步优化匹配结果。具体来说,FGR使用了一种基于四元数的全局优化方法,它能够最小化点云之间的欧氏距离误差,从而得到更准确的配准结果。此外,FGR还考虑了一些对鲁棒性有帮助的技巧,如一些限制条件和一个迭代过程中的逐步加权策略。在实际应用中,FGR算法已经被广泛地应用于3D重建、机器人导航、自动驾驶等领域,具有很好的应用前景。
GMMReg算法(Gaussian Mixture Model Registration):将点云表示为高斯混合模型,使用EM算法计算两个高斯混合模型之间的变换矩阵。该算法是一种基于高斯混合模型的点云配准算法。它采用了一个全新的思路,将点云表征为高斯混合模型(GMM),通过最小化两个GMM之间的KL散度来计算它们之间的相似性,并进而得到相对位姿变换。相比传统的ICP算法,GMMReg不需要对点云进行对应关系的建立,因此不需要进行迭代计算,具有更快的速度和更好的鲁棒性。
ICP-SVD算法:通过SVD分解求解刚性变换矩阵,加快了ICP算法的收敛速度。是一种基于最小化均方误差的点云配准算法,它通过对齐两个点云之间的对应点,计算它们之间的转换矩阵以实现配准。与传统ICP算法不同,ICP-SVD通过奇异值分解(Singular Value Decomposition,SVD)来计算转换矩阵,而不是通过求解最小二乘问题。这使得ICP-SVD更加稳定和鲁棒,可以处理更大的点云和更大的初始位姿误差。ICP-SVD算法的优点在于它能够处理更大的点云,并且可以在不同的位姿下进行多次运行以提高配准结果的鲁棒性。此外,与传统ICP算法相比,它的运行速度更快,因为它使用SVD分解来计算转换矩阵,而不是解决线性系统。然而,ICP-SVD算法也存在一些缺点,例如对于非刚性变换的情况效果可能不如其他算法,而且需要手动选择一些参数,如采样点数和停止条件。
SC-ICP算法(Self-Correction ICP):一种使用采样一致性来纠正错误匹配的ICP算法,能够提高配准的准确度。它是ICP算法的一种变种,通过引入自我纠正机制,能够有效地处理初始位姿估计不准的情况。SC-ICP算法的主要思想是,对于每个点云,通过计算其自身的质心和协方差矩阵,构建一个局部坐标系,并将点云中的所有点都变换到这个坐标系下。然后,利用ICP算法计算两个点云之间的刚体变换,将待配准点云变换到参考点云的坐标系下。在此过程中,SC-ICP算法会根据变换后的点云和参考点云之间的误差,自动调整初始位姿的估计,以实现更准确的配准结果。SC-ICP算法的主要优点在于对噪声、野点和局部形状差异具有更强的鲁棒性,且可以使用较差的初始值实现更快的收敛速度。
TEASER算法(Towards Efficient Automatic Scan-to-CAD Registration):一种快速、准确的点云到CAD模型的配准算法,能够处理大规模点云数据。是一种基于采样一致性(Sample Consensus,简称SAC)的自动点云到CAD模型的配准方法。该方法由马耀明等人于2021年提出,旨在提高点云到CAD模型配准的效率和鲁棒性。TEASER算法采用了四个关键技术来实现自动点云到CAD模型的配准,分别是采样一致性(SAC),快速近似最近邻(Fast Approximate Nearest Neighbor,简称FANN),轻量级卷积神经网络(Lightweight Convolutional Neural Network,简称LCNN)和自适应缩放策略(Adaptive Scaling Strategy)。TEASER算法的优点在于,相较于传统的点云到CAD模型的配准方法,它具有更高的鲁棒性和效率。其中,FANN算法能够快速地在CAD模型中搜索最近邻,LCNN模型则能够高效地预测出两点之间的相对姿态。同时,自适应缩放策略也能够在不同的场景中自适应地调整采样密度,提高算法的鲁棒性。
PCL库中实现了哪些点云配准算法
1. ICP(Iterative Closest Point):基于最小化两个点云之间的距离来计算相对位姿变换。
2. NDT(Normal Distributions Transform):将点云表征为高斯混合模型,通过最小化两个GMM之间的KL散度来计算相对位姿变换。
3. SAC-IA(Sample Consensus Initial Alignment):基于采样一致性方法,估计两个点云之间的相对位姿变换。
4. SAC-ICP(Sample Consensus Iterative Closest Point):结合了SAC-IA和ICP算法,先用SAC-IA估计初始变换,再用ICP进行迭代优化。
5. GICP(Generalized Iterative Closest Point):在ICP算法的基础上,增加了点云之间的法向量信息,从而能够更好地处理旋转和尺度变换。
6. FGR(Fast Global Registration):使用特征点描述子进行全局匹配,得到初始位姿估计,再用ICP进行迭代优化。
7. LUM(Local-Unity Maps):使用局部地图来匹配,能够更快速地处理大规模点云。
8. LCP(Local Convexity Preserving):利用局部曲率信息进行配准,对于具有局部曲率变化的场景效果更好。需要我们根据不同的应用场景进行选择和使用。
基于深度学习的配准方法
点云深度学习的配准方法可以分为两种:
基于特征的方法
基于全局优化的方法
基于特征的方法是通过在点云中提取局部特征点并匹配这些特征点来实现配准的。这些局部特征点可以是手工设计的,也可以是通过深度学习网络自动提取的。一些常见的基于特征的方法包括PointNetLK、DeepGMR和D3Feat等。
基于全局优化的方法是通过定义一个全局损失函数,并使用深度学习网络来优化这个损失函数来实现点云配准。这种方法通常需要使用大量的点云数据进行训练,因此需要较长的训练时间。一些常见的基于全局优化的方法包括PointNet++、DeepICP和PCGAN-CD等。
除了以上两种方法,还有一些其他的点云深度学习配准方法,例如基于点云特征的递归神经网络(PointNetRNN)和基于可微分的几何优化(DGO)等。这些方法各有优缺点,具体应用场景需要结合具体问题进行选择。
更多详细内容请后台发送“知识星球”扫码加入交流。
智驾全栈与3D视觉学习星球:主要针对智能驾驶全栈相关技术,3D/2D视觉技术学习分享的知识星球,将持续进行干货技术分享,知识点总结,代码解惑,最新paper分享,解疑答惑等等。星球邀请各个领域有持续分享能力的大佬加入我们,对入门者进行技术指导,对提问者知无不答。同时,星球将联合各知名企业发布自动驾驶,机器视觉等相关招聘信息和内推机会,创造一个在学习和就业上能够相互分享,互帮互助的技术人才聚集群。
以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除
扫描二维码
关注我们
让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入知识星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。
分享及合作方式:微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。
点一下“在看”你会更好看耶
以上是关于点云配准的传统算法ICP与NDT概述的主要内容,如果未能解决你的问题,请参考以下文章