当前位置 博文首页 > 无水wangyang:点云配准(1)PCL点云配准API
点云配准系列跳转链接:
第一节 PCL点云配准API
?
主题: PCL 点云配准API
作者: Dirk Holz, Radu B. Rusu, Jochen Sprickerhof
兼容: > PCL 1.5
这份文档将描述点云配准相关API及相关模块,包括:对应点的选取及错误点的去除,刚性变换矩阵的估计。
PCL点云配准API
点云配准解决了将多个视角下的3D点云对齐形成一个完整模型的问题。其目标是找到全局坐标下单帧(多视角多张)点云的相对位置及方向,以使多幅点云的相交区域完美重叠。因此,需要一个能够将不同视点(视图)下的多组点云数据对齐到单个点云模型中的系统,以便点云的后续处理,例如点云分段(segmentation)和物体重建(reconstruction)。
如上图所示,通过倾斜2D激光单元(a tilting 2D laser unit)获取6个不同视角下的独立点云数据集。由于每幅点云只代表所扫描的世界(物体)的一小部分,因此必须将多幅点云数据进行配准,使其组成完整的点云模型,如下图所示:
?
PCL点云配准库的主要算法工作是在给定的输入数据集中找到正确的点对应关系,并估计能将单独的点云数据集通过旋转平移操作转换到对应的全局坐标下的刚性变换矩阵。如果输入数据集已知点对应关系,则可以轻松进行点云配准。这意味着数据集中选中的对应点应该和另一个数据集中的对应点在特征上“重合”(coincide)。此外,如果估计的对应关系“完美”(perfect),那么该问题就能有封闭解决方案(a closed form solution)。
PCL强大的算法能够估算多组对应关系并删除错误对应关系,同时获得可靠的刚性转换方程。以下各节将分别描述它们。
点云配准概览
我们一般将一对点云数据集配准称为点云的成对配准,其输出通常是一个4x4的刚性变换矩阵。该刚性变换矩阵一般用来对源数据集进行旋转和平移,使其与其他数据集(目标点云数据集)“完美”对齐。
下图显示了点云配准的一般过程。需要注意,该图只表示一次迭代过程,程序员可以自行决定迭代次数和算法步骤。
计算步骤如下所示:
确定最能代表数据集中场景(scene)的兴趣点(关键点)【即下采样】。
计算每个关键点的特征描述符。
基于特征描述符的集合及关键点在数据集中的XYZ位置,根据两组数据集中关键点的特征和位置之间的相似性,估计一组点对应关系。
由于存在噪点,并不是所有的对应关系都是正确,因此需要删除错误的对应关系。
根据去除错误对应关系后的点对应关系,估计刚性变换矩阵。
点云配准模块
以下是各个模块的详细解释。
关键点模块
关键点指场景中具有“特殊属性”的点,如一本书的边角或书封面上“PCL”这几个单词中的字母“P”。PCL中有多种方法检测关键点,包括NARF,SIFT和FAST。同时,也可以将单独的点或点的集合作为关键点。当将Kinect数据集作为输入来估计对应点时,如果每帧有300k点,那么就有可能存在300k^2个对应关系。
特征描述符
基于找到的关键点,可以进行特征直方图计算。直方图是一组向量,对其进行比较以确定对应关系。PCL提供了NARF,FPFH,BRIEF和SIFT等方法计算特征描述符。
点对应关系估计
给定通过两次扫描获取的两组点云的特征向量,我们需要对特征进行比较,找到对应特征才能找到点云数据中的重叠部分。根据特征类型,我们可以使用不同的方法来找到对应关系。
点匹配时,根据有序点云和无序点云存在不同的点匹配方法(使用点的xyz坐标作为特征):
暴力匹配法。
KD树最近邻查找法(FLANN)。
有序点云的图像空间搜索法。
有序点云的索引空间搜索法。
?
特征匹配(不适用点的坐标进行匹配,而是使用特定特征)存在以下方法:
暴力匹配法。
KD树最近邻查找法(FLANN)。
?
除搜索外,还区分了两种类型的对应估计:
直接点云估计(默认)针对点云A的每个点在点云B中搜索对应点。
”倒数(Reciprocal)“对应估计搜索从点云A搜索点云B的对应,再从点云B搜索点云A的对应,最终只使用交集部分。
错误点去除
当然,并不是所有的点对应关系都是正确的。由于错误的点对应关系会对最终的刚性转换矩阵产生负面影响,因此需要去除错误的点对应关系。一般使用RANSAC法或只使用找到的对应关系的一部分点。
有时会存在一对多的特殊对应关系,其中一个数据集中的一个点对应另一个数据集中的多个点。可以通过检测距离,留下距离最小的对应点,或检查附近的其他匹配点进行滤波处理。
转换矩阵的估计
最后一步是计算转换矩阵。
基于对应关系找出一些错误度量(error metric)。
估计摄像机位姿间的刚性变换矩阵(运动估计,motion estimate),并最小化误差度量。
优化点的结构。
举例:- SVD进行运动估计
- 使用不同内核的Levenberg-Marquardt进行运动估计
使用刚性变换矩阵将源点云旋转/平移到目标点云上,并对所有点或部分关键点进行循环内部ICP(精配准)。
迭代直到满足收敛标准。
?
整体流程总结
ICP(Iterative Closest Point)迭代最近点
寻找对应关系。
删除错误对应关系。
通过处理后的对应关系估计刚性变换矩阵。
迭代。
?
基于特征的配准
SIFT获取关键点(pcl::SIFT...something)
基于关键点获取FPFH特征描述符(pcl::FPFHEstimation)
使用pcl::CorrespondenceEstimation获取FPFH描述符并估计对应关系。
使用pcl::CorrespondenceRejectionXXX 删除错误对应关系
最终获得刚性变换矩阵。