PCL各模块概述(1.6)

本文翻译自http://pointclouds.org/documentation/tutorials/walkthrough.php#walkthrough

1.Filters

Background

下图是去噪实例,由于测量误差,有些测量数据会呈现出大量的阴影点,这些阴影点会使局部点云的3D特征估计变得复杂。有些异常值可以通过邻值的数据统计分析、去掉不符合条件数据来过滤掉。PCL中的稀疏离群点去除算法是在计算输入数据集中点到邻域距离分布的基础上实现的。对于每个点,计算它到所有邻近点的平均距离。假设得到的分布是高斯分布,具有均值和标准差,所有平均距离在间距(由全局距离均值和标准差定义)之外的点都可以看作离群点,并从数据集中进行去除。

Documentation: http://docs.pointclouds.org/trunk/group__filters.html

Tutorials: http://pointclouds.org/documentation/tutorials/#filtering-tutorial

2Features

Background

可以在3D特征教程中找到PCL中的特征工作的理论入门解释。

Features 库包含数据结构,以及从点云数据中估计3D特征的机制。 三维特征是空间中特定三维点或位置的表示,描述了基于点周围可用信息的几何图形。 在查询点周围选择的数据空间通常称为k邻域。下图显示了所选查询点及其所选k邻域的简单示例。

最广泛使用的两个几何点特征之一是基础曲面的估计曲率和查询点p处的法线。它们都被认为是局部特征,因为它们利用k个最近的邻近点提供的信息来描述一个点。为了高效地确定这些邻近点,输入数据集通常使用空间分解技术(如octree或kD-tree)被分割成更小的块, 然后在那个空间中执行最近点的搜索。根据应用程序的不同,可以选择在p附近确定固定数量的k个点,或者在以p为中心的半径为r的球体内找到所有点。毫无疑问,估计曲面法线和曲率在p点的变化最简单的方法之一是进行特征分解(即,计算k邻域点表面贴片的特征向量和特征值)。 因此,对应于最小特征值的特征向量将近似点p处的曲面法向n,由特征值估计曲面曲率变化为:

Documentation: http://docs.pointclouds.org/trunk/group__features.html

Tutorials: http://pointclouds.org/documentation/tutorials/#features-tutorial

3Keypoints

Background

keypoints库包含点云关键点检测算法的实现。关键点(也称为兴趣点)是图像或点云中的点,它们是稳定的、独特的,并且可以使用定义良好的检测标准来识别。通常,兴趣点的数量将远小于一个点云中点的总数,并与局部特征描述子结合时,关键点和描述子可形成紧凑但具有描述性的原始数据的表示形式。

下图显示了从范围图像中提取的NARF关键点的输出:

Documentation: http://docs.pointclouds.org/trunk/group__keypoints.html

Tutorials: http://pointclouds.org/documentation/tutorials/#keypoints-tutorial

4Registration

Background

将多个数据集组合成一个全局一致模型通常使用一种称为配准的技术来执行。其关键思想是识别数据集之间的对应点,并找到一个最小化对应点之间距离(对齐误差)的转换。该转化过程是持续的, 由于对应搜索受数据集相对位置和方向的影响。一旦对齐误差下降到指定阈值之下,配准就认为完成了。

registration库为有组织的和无组织的(通用的)数据集实现了大量的点云配准算法。例如,PCL包含一组强大的算法,允许估计多组对应关系,以及拒绝坏的对应的方法,并以健壮的方式估计转换。

Documentation: http://docs.pointclouds.org/trunk/group__registration.html

Tutorials: http://pointclouds.org/documentation/tutorials/#registration-tutorial

5Kd-tree

Background

可以在Kd-tree教程中找到Kd-trees工作的理论入门解释。

Kd-tree库使用FLANN提供了Kd-tree数据结构,允许快速的最近邻搜索

Kd-tree (k维树)是一种空间分区数据结构,它在树结构中存储一组k维点,从而支持高效的范围搜索和最近邻搜索。最近邻搜索是处理点云数据时的核心操作,可用于查找点组或特征描述子之间的对应关系,或定义点周围的局部邻域。

Documentation: http://docs.pointclouds.org/trunk/group__kdtree.html

Tutorials: http://pointclouds.org/documentation/tutorials/#kdtree-tutorial

6、Octree

Background

Octree 树库提供了从点云数据创建分层树数据结构的高效方法。它支持对点数据集进行空间分区、下采样和搜索操作。 每个八叉树节点要么有8个子节点,要么没有子节点。根节点描述一个封装所有点的立方体包围框。在树的每个层次上,这个空间被一个因子2细分,从而提高了体素分辨率。

八叉树实现提供了高效的近邻搜索例程,如“体素搜索中的邻近点”、“K近邻搜索”和“半径搜索中的邻近点”。它会根据点数据集自动调整它的尺寸。一组叶节点类提供了额外的功能,比如空间“占用率”和“每个体素的点密度”检查。用于序列化和反序列化的函数能够有效地将八叉树结构编码为二进制格式。此外,在需要高速创建八叉树的场景中,内存池实现减少了昂贵的内存分配和释放操作。

下图演示了八叉树节点在树的最低级别上的体素包围框。八叉树体素围绕着斯坦福兔表面的每一个3D点。红点表示点数据。这个图像是用 octree_viewer创建的。

Documentation: http://docs.pointclouds.org/trunk/group__octree.html

Tutorials: http://pointclouds.org/documentation/tutorials/#octree-tutorial

7Segmentation

Background

Segmentation 库包含将点云分割为不同聚类(clusters)的算法。这些算法最适合处理由许多空间上孤立区域组成的点云。 在这种情况下,聚类通常用于将云分解为其组成部分,然后可以独立处理这些部分。

聚类提取教程中可以找到解释聚类方法工作原理的理论基础。

这两个图分别展示了平面模型分割(左)和圆柱模型分割(右)的结果。

Documentation: http://docs.pointclouds.org/trunk/group__segmentation.html

Tutorials: http://pointclouds.org/documentation/tutorials/#segmentation-tutorial

8、Sample Consensus

Background

sample_consensus库包含SAmple Consensus (SAC)方法(如RANSAC)和模型(如平面、柱面)。 它们可以自由组合,以便在点云中检测特定的模型及其参数。

随机样本一致性(RANSAC)教程中可以找到解释样本一致性算法工作原理的理论入门教程。

这个库中实现的一些模型包括:直线、平面、柱面和球体。平面拟合通常用于检测常见的室内表面,如墙壁、地板和桌面。其他模型可用于检测和分割具有常见几何结构的对象(例如,将圆柱体模型拟合到一个杯子上)。

Documentation: http://docs.pointclouds.org/trunk/group__sample__consensus.html

Tutorials: http://pointclouds.org/documentation/tutorials/#sample-consensus

9Surface

Background

surface 库处理从三维扫描重建原始曲面。 根据具体的的任务,这可以是外壳、网格表示或具有法线的平滑/重采样表面。如果点云云是有噪声的,或者它是由多个对齐不佳的扫描结果组成的,那么平滑和重新采样就非常重要。曲面估计的复杂度可以进行调整,如果需要,法线可以在同一步骤中估计。

网格化是一种用点来创建曲面的通用方法,目前提供了两种算法:一种是对原始点进行非常快速的三角剖分,另一种是速度较慢的网格化,它也可以进行平滑和补孔。

创建一个凸或凹壳是有用的,例如,当需要一个简化的表面表示或边界需要提取的时候。

Documentation: http://docs.pointclouds.org/trunk/group__surface.html

Tutorials: http://pointclouds.org/documentation/tutorials/#surface-tutorial

10Range Image

Background

range_image 库包含两个类,用于表示和处理范围图像。距离图像(或深度图)是像素值表示距离传感器原点的距离或深度的图像。距离图像是一种常见的三维表示,通常由立体相机或飞行时间相机生成。了解相机的内部校准参数后,距离图像可以转换成点云。

Note: range_image现在是 Common 模块的一部分.

Tutorials: http://pointclouds.org/documentation/tutorials/#range-images

11I/O

Background

io 库包含读取和写入点云数据(PCD)文件的类和函数,以及从各种传感设备捕获点云。这些功能的介绍可以在以下教程中找到:

Documentation: http://docs.pointclouds.org/trunk/group__io.html

Tutorials: http://pointclouds.org/documentation/tutorials/#i-o

12、Visualization

Background

建立 visualization 库的目的是为了能够快速原型化和可视化算法在三维点云数据上运行的结果。与OpenCV用于显示2D图像和在屏幕上绘制基本2D图形的highgui例程类似,库提供:

 在pcl::PointCloud<T> format中,有用于渲染呈现和设置任何n-D点云数据集的可视属性(颜色、点大小、不透明度等)的方法;

利用点集或参数方程在屏幕上绘制基本三维图形(如圆柱体、球体、直线、多边形等)的方法;

一种二维直方图可视化模块(pcl直方图可视化器);

pcl::PointCloud<T>数据集的大量几何和颜色工具;

一个pcl::RangeImage可视化模块。

该软件包利用VTK库对距离图像和2D操作进行3D渲染。要实现自己的可视化器,请查看库附带的测试和示例。

Documentation: http://docs.pointclouds.org/trunk/group__visualization.html

Tutorials: http://pointclouds.org/documentation/tutorials/#visualization-tutorial

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值