【PCL自学:Registration 1】PCL点云配准一般流程介绍

PCL点云配准相关API

  • 一、什么是点云配准?
  • 二、成对点云配准的算法概述
  • 三、PCL中的点云配准(Registration)一般流程
    • 3.1 关键点提取
    • 3.2 描述符(特征)计算
    • 3.3 对应点估计
    • 3.4 错误对应点筛除
    • 3.5 仿射变换估计

一、什么是点云配准?

  将各种三维点云数据视图对齐到一个完整的模型中,这个问题被称为配准。它的目标是在全局坐标框架中找到分别获得的视图的相对位置和方向,从而使它们之间的相交区域完美重叠。因此,对于从不同的视图中获取的每一组点云数据集,我们都需要一个能够将它们排列成单点云模型的系统,即将这些组点云组成同一片点云,以便应用分割、对象重建等后续点云处理步骤。
  例如将以下六组单片点云拼接组成同一片点云即为点云配准过程。
【PCL自学:Registration 1】PCL点云配准一般流程介绍_第1张图片
  上图中给出的例子,使用倾斜的2D激光单元获得了六个独立的点云数据集。由于每个单独的扫描只代表了周围世界的一小部分,因此必须找到将它们配准在一起的方法,从而创建如下图所示的完整的点云模型。
【PCL自学:Registration 1】PCL点云配准一般流程介绍_第2张图片
  PCL点云配准库(Registration)中的算法工作的目标是在给定的输入数据集中找到正确的点对应,并估计刚性转换,可以旋转和转换每个单独的数据集到一个一致的全局坐标框架使其组成一片点云。如果输入数据集中的点对应是完全已知的,那么这种配准范式就很容易求解。这意味着,从特征表示的角度来看,一个数据集中的选定点列表必须与另一个数据集中的点列表一致。此外,如果估计的点对关系是完美的,则配准问题是一个封闭解。
  PCL包含一组强大的算法,允许估计多组点对关系,以及筛除不良点对关系的方法,并以稳健的方式估计来自它们的转换。以下各节将分别对它们进行描述。

二、成对点云配准的算法概述

  我们有时把配准一对点云数据集的问题称为成对配准,及其输出通常是一个刚性变换矩阵(4 x4),该矩阵代表旋转和平移量,将其应用于一个原点云数据集即可与目标点云(或称场景点云)完成配准。
  在成对配准步骤中执行的具体步骤如下图所示。请注意,这里表示的是算法的单个迭代。使用者可以决定循环其中的任何或所有步骤。
【PCL自学:Registration 1】PCL点云配准一般流程介绍_第3张图片
  两个数据集的计算步骤是直接的:
1、从一组点中确定关键点(能最好地表示出两个数据集的关键点);
2、在每个关键点上,计算一个特征描述符;
3、从特征描述符集合及其在两个数据集中的XYZ位置,基于特征和位置之间的相似度,估计一组对应点;
4、假设数据是有噪声的,并不是所有的对应点都是有效的,所以筛除那些对配准过程可能产生负面影响的差的对应点;
5、利用剩余的良好对应点,估计一个运动变换矩阵。

三、PCL中的点云配准(Registration)一般流程

  让我们看看上面配准流程中的每个具体步骤:

3.1 关键点提取

  关键点是在场景中具有特殊属性的兴趣点,比如书的角落,或者写有PCL的书上的字母P。在PCL中有许多不同的关键点,如NARF、SIFT和FAST。或者,你也可以把每一个点,或者一个子集,作为关键点。将两个kinect数据集直接输入对应估计的问题在于,你在每帧中有300k个点,所以可能有300k^2个对应点,这显然是不理智的,所以一般情况下需要进行降采样后提取少部分关键点。

3.2 描述符(特征)计算

  根据提取的关键点,必须提取特征,计算特征描述符的方法有很多,例如NARF, FPFH, BRIEF或SIFT。可以看我以前的博文:点特征直方图

3.3 对应点估计

  给定来自两个点云的两组描述符数组,我们必须找到相对应的特征描述符来找到点云数据中重叠的部分。根据特征类型的不同,我们可以使用不同的方法来找到对应关系。
  【1】对于点匹配(使用点xyz坐标作为特征),有组织和无组织的点云数据存在不同的方法:

  1. 暴力匹配(遍历描述符数组),耗时长不推荐。
  2. kd-树最近邻搜索(FLANN),耗时短,推荐。
  3. 对于有组织的数据可以在图像空间(结构光传感器)或索引空间(线扫描传感器)中进行搜索。推荐。

  【2】对于不使用点坐标,而是某些特征,只有以下2种方法:

  1. 暴力匹配(遍历描述符数组),耗时长不推荐。
  2. kd-树最近邻搜索(FLANN),耗时短,推荐。

  【3】除了搜索外,还区分了两类对应点估计:

  1. 直接对应点估计(默认),对点云A中的每个点搜索点云B中的对应点。
  2. “Reciprocal” (相互)对应估计,即从点云A到点云B的对应点搜索,也从点云B到点云A的对应点搜索,只使用这些对应点的交集。

3.4 错误对应点筛除

  当然,并不是所有的估计的对应点都是正确的。由于错误的对应点估计会对最终转换的估计产生负面影响,因此需要将其筛除掉。这可以通过RANSAC来完成,或者通过减少数量,只使用找到的一定比例的对应点。

  一种特殊情况是一对多的对应关系,即目标点云中的一个点对应于源点云中的多个点。这些可以通过只使用距离最小的一个或通过检查附近的其他匹配来过滤。

3.5 仿射变换估计

  通常,最后一步是计算这个变换,即计算4x4的转换矩阵。

  1. 首先需要通过上一步筛选后的对应点关系估计一个误差度量。
  2. 然后估计相机姿态(运动估计)和最小化误差度量之间的(刚性)转换。
  3. 优化点的结构,例如:①SVD分解的运动估计;② 不同核的列文伯格-马夸尔特的运动估计
  4. 使用刚性转换将源点云旋转和平移到目标点云上,然后可选择的使用ICP(最近邻迭代)对所有点或者对下采样点的点\特征描述符进行迭代运算,直到满足某个收敛准则。

【博主简介】
  斯坦福的兔子,男,天津大学机械工程工学硕士。毕业至今从事光学三维成像及点云处理相关工作。因工作中使用的三维处理库为公司内部库,不具有普遍适用性,遂自学开源PCL库及其相关数学知识以备使用。谨此将自学过程与君共享。
博主才疏学浅,尚不具有指导能力,如有问题还请各位在评论处留言供大家共同讨论。
若前辈们有工作机会介绍欢迎私信,最好是北京。

你可能感兴趣的:(PCL,计算机视觉,算法,人工智能)