Point Cloud Library (PCL) 介绍

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42886817/article/details/102601414

PCL相关网站

PCL官网:请点击这里 或者 网址: http://www.pointclouds.org/

什么是PCL?

Point Cloud Library(或PCL)是用于2D / 3D图像和点云处理的大规模开放项目。

  • 包含: PCL框架包含众多最新算法,包括滤波,特征估计,表面重建,配准,模型拟合和分段。
  • 用途:例如,从嘈杂的数据中过滤离群值,将3D点云缝合在一起,分割场景的相关部分,提取关键点并计算描述符以根据物体的几何外观识别世界上的物体,并从中创建表面 点云并将其可视化-仅举几例。
  • 说明: PCL根据3-clause BSD license 的条款发布,并且是开源软件。它是免费的,可用于商业和研究。
  • 适用平台: PCL是跨平台的,并且已成功编译并部署在Linux,MacOS,Windows和Android / iOS上。

PCL的划分

  • 为了简化开发,将PCL分为一系列较小的代码库,可以分别进行编译。
  • 对于在减少了计算或大小约束的平台上分发PCL而言,这种模块化非常重要(有关每个模块的更多信息,请参见文档页面)。
  • PCL的代码库图:

在这里插入图片描述

PCL模块集

PCL中最重要的已发布模块集:
在这里插入图片描述

Filters

  • 用途: 清除噪声,即干扰数据
  • 由于测量误差,某些数据集会出现大量阴影点。 这使局部点云3D功能的估计变得复杂。如下图所示
    在这里插入图片描述
  • PCL中的稀疏离群值消除实现基于输入数据集中点到邻居距离的分布的计算。
  • 对于每个点,都会计算从它到所有相邻点的平均距离。
  • 通过假设结果分布是具有均值和标准差的高斯分布,可以将其平均距离在由全局距离均值和标准差定义的区间之外的所有点视为离群值并从数据集中进行修剪。
  • 官方文档:请点击这里

Features

  • 用途:特征库包含用于根据点云数据估算3D特征的数据结构和机制。
  • 3D要素是空间中某些3D点或位置的表示,它们根据围绕该点的可用信息来描述几何图案。
  • 在查询点周围选择的数据空间通常称为k邻域
  • 两个最广泛使用的几何点特征的示例是下表面的估计曲率和查询点p的法线
    在这里插入图片描述
  • 它们都被认为是局部特征,因为它们使用其k个最近点邻居提供的信息来表征一个点。
  • 为了有效地确定这些邻居,通常使用空间分解技术(例如octrees or kD-trees)将输入数据集分成较小的块,然后在那个空间执行最近点搜索。
  • 根据不同的应用,可以选择在p附近确定固定数量的k点,或者在以r​​为中心的半径r的球体内找到所有点。
  • 毫无疑问,估计点p处的表面法线和曲率变化的最简单方法是执行k邻点表面补丁的特征分解(即,计算特征向量和特征值)。因此,与最小特征值相对应的特征向量将在点p处近似表面法线n,而表面曲率变化将根据:
    -在这里插入图片描述
  • 官方文档:请点击这里

Keypoints

  • 用途: 找出关键点
  • 关键点 是图像或点云中稳定,独特且可以使用定义明确的检测标准进行识别的点。
    在这里插入图片描述
  • 通常,点云中的关键点数量将远小于云中的点总数。
  • 并且当与每个关键点处的局部特征描述符结合使用时,这些关键点和描述符可用于形成紧凑的、具描述性-原始数据的表示形式。
  • 官方文档:请点击这里

Registration

  • 用途:将多个数据集组合成一个全局一致的模型。
    在这里插入图片描述- 关键思想是识别数据集之间的对应点,并找到使对应点之间的距离(对齐误差)最小的变换

  • 由于对应搜索受数据集的相对位置和方向影响,因此重复此过程。 一旦对准误差降到给定阈值以下,则称注册完成。

  • 注册库为组织的和非组织的(通用)数据集加粗样式实现了大量的点云注册算法。 例如,PCL包含一组功能强大的算法,这些算法允许估计多组对应关系,以及用于拒绝不良对应关系并以健壮方式估算转换的方法

  • 官方文档:请点击这里

Kd-tree

  • 用途:Kd树(k维树)是一种空间分区数据结构,它在树结构中存储一组k维点,从而可以进行有效的范围搜索和最近邻搜索。
  • 最近邻搜索是使用点云数据时的核心操作,可用于查找点组或特征描述符之间的对应关系,或定义一个或多个点周围的局部邻域。
    在这里插入图片描述
    在这里插入图片描述
  • 官方文档:请点击这里

Octree

  • 用途: 提供了从点云数据创建层次树数据结构的有效方法。这样就可以对点数据集进行空间分区,下采样和搜索操作

    扫描二维码关注公众号,回复: 7576520 查看本文章
  • 每个树节点有八个子节点或没有子节点。 根节点描述了一个包围所有点的三次边界框。 在每个树级别,此空间都会被2细分,这会导致体素分辨率提高。

  • 八叉树实现提供了有效的最近邻居搜索例程,例如“ Voxel搜索中的邻居”,“ K最近邻居搜索”和“半径搜索中的邻居”。 它会自动将其尺寸调整为点数据集。

  • 一组叶节点类提供了其他功能,例如空间“占用率”和“每个体素的点密度”检查。

  • 下图说明了最低树级别的八叉树节点的体素边界框。 八叉树体素围绕着斯坦福兔子表面上的每个3D点。 红点代表点数据。 该图像是使用octree_viewer创建的。

在这里插入图片描述- 官方文档:请点击这里

Segmentation

  • 用途: 将点云分割为不同簇

  • 这些算法最适合处理由多个空间隔离区域组成的点云

  • 在这种情况下,群集通常用于将云分解成其组成部分,然后可以对其进行独立处理

  • 这两个图说明了平面模型分割(左)和圆柱模型分割(右)的结果。

在这里插入图片描述- 官方文档:请点击这里

Sample Consensus

  • 用途: sample_consensus库包含诸如RANSAC之类的SAmple Consensus(SAC)方法以及诸如平面和圆柱体之类的模型。这些可以自由组合以检测点云中的特定模型及其参数。
  • 该库中实现的一些模型包括:线**,平面,圆柱体和球体。**
  • 平面装配通常用于检测常见的室内表面(例如墙壁,地板和桌面)的任务。 其他模型可用于检测和分割具有常见几何结构的对象(例如,将圆柱模型拟合到马克杯)。
  • 官方文档:请点击这里

Surface

  • 用途: 曲面库负责根据3D扫描重建原始曲面。
  • 根据当前的任务,例如可以是船体,网格表示或具有法线的平滑/重采样表面。
  • 如果云噪声很大,或者由多个扫描未完全对齐组成,则平滑和重采样就很重要。 可以调整表面估计的复杂性,如果需要,可以在同一步骤中估计法线。
    在这里插入图片描述
  • 网格划分是创建点外表面的一种通用方法,目前提供了两种算法:对原始点进行非常快速的三角剖分;以及对网格进行平滑和填充的较慢网格划分
    在这里插入图片描述
  • 例如,当需要简化的表面表示或需要提取边界时,创建凸包或凹包是很有用的。
    在这里插入图片描述
  • 官方文档:请点击这里

Range Image

  • 用途:range_image库包含两个用于表示和使用范围图像的类。
  • 距离图像(或深度图)是其像素值代表距传感器原点的距离或深度的图像。 距离图像是常见的3D表示形式,通常由立体声或飞行时间相机生成。
  • 有了相机固有的校准参数,就可以将距离图像转换为点云。
  • range_image是Common模块的一部分。
  • 官方文档:请点击这里

I/O

  • 用途:io库包含用于读取和写入点云数据(PCD)文件以及从各种传感设备捕获点云的类和函数。
  • 官方文档:请点击这里

Visualization

  • 用途:建立可视化库是为了能够快速原型化和可视化在3D点云数据上运行的算法的结果。
    在这里插入图片描述- 官方文档:请点击这里

PCL教程

基本使用

官方教程请点这里

下载PCL

PCL可在许多操作系统上运行,并且预构建的二进制文件可用于Linux,Windows和Mac OSX。

除了安装PCL,还需要下载并编译PCL才能运行的一组第三方库。

  • Linux下载教程:请点击这里
  • Windows下载教程:请点击这里
  • Mac下载教程:请点击这里
  • python-pcl 项目及教程地址:请点击这里

猜你喜欢

转载自blog.csdn.net/weixin_42886817/article/details/102601414
今日推荐