当你知道一切都不重要时,世界就是你的了。——《瑞克和莫蒂》S3E8
一、PCL简要介绍
对于从事计算机视觉、机器视觉领域的从业者来说,OpenCV库并不陌生,甚至是我们入门这个领域时的学习的第一个开源库,如果说OpenCV是二维信息处理方面的工兵铲,那PCL(Point Cloud Library)就是在三维信息处理层面的瑞士军刀。
顾名思义, PCL(Point Cloud Library)是专注于点云操作处理的开源算法库,对于从事三维点云数据处理的道友来说是工作学习中必不可少的工具。
PCL是跨平台的,已成功编译部署在Linux、MacOS、Windows和Android上。具体安装过程在前辈们的博客中能跟容易找到,本系列中不再赘述其在不同系统中的安装过程。为了简化开发,PCL被分成一系列更小的代码库,这些代码库可以单独编译。这种模块化对于将PCL分布在具有较少计算或大小限制的平台上非常重要,这些模块就像是一把瑞士军刀上的各个小工具。
ps:更有趣的PCL发展历程可见《点云库PCL学习教程》,文末附有链接。
当一把瑞士军刀拿在手上,我们肯定好奇这把瑞士军刀到底能做些什么呢?今天就来扒一扒。
从算法角度和库中的主要模块进行分类:
共可分为12大模块,本系列文章将会在后期对这12大模块进行更为详尽的拆解。若时间允许还会对这十二大模块所涉及的数学方法单独开辟一个系列专题,用于梳理三维视觉领域需要学习的数学方法。[PS:由于工作中我也有 没有渠道系统性学习三维点云处理相关数学知识 的苦恼,既然等不来别人做,那就只能自己做了,还希望到时候看官们能支持三连一波。]
二、PCL中的重要模块介绍
1、点云滤波模块:去噪声和离群值(一般用于预处理)
pcl_filters模块包含了用于3D点云数据过滤应用的离群值和噪声去除机制。一般用于前期预处理,类似于OpenCV中的各种滤波算子组成的库,只不过操作数据不再是像素而是空间点。
滤波模块依赖库:common(公共库:公共数据结构和方法模块)
sample_consensus(样本一致性库:RANSAC等方法)
search(搜索库:数据搜索结构和最邻近方法)
kdtree(KD树结构)
octree(八叉树结构)
官网关于点云滤波模块的详细介绍点击这里
2、点云特征模块:计算几何图形特征
pcl_features库包含了从点云数据中估算3D特征的数据结构和机制。三维特征是空间中某一三维点或位置的表示形式,它根据该点周围的可用信息来描述几何图形。围绕该点选择的数据空间通常称为k-邻域。
特征模块依赖库:common
search
kdtree
octree
range_image(由pcl/PointCloud派生而来,提供了从特定视角捕捉3D场景的功能。)
官网关于点云特征模块的详细介绍点击这里
3、点云关键点模块:提取角点或其他独特的点(一般用于预处理)
pcl_keypoints库目前(1.12.0)包含两个点云关键点检测算法的实现。关键点(也称为兴趣点)是图像或点云中稳定、独特的点,可以使用定义良好的检测标准进行识别。通常,兴趣点的数量将远小于点云中点的总数,当关键点与特征描述子结合在一起使用时能够对原始数据形成一个紧凑而具有描述性的表示。
关键点模块依赖库:common
search
kdtree
octree
range_image
features
filters
官网关于点云关键点模块的详细介绍点击这里
4、点云配准模块:将几片点云组合成全局一致的点云集合
pcl_registration库为有序和无序(普遍)数据集实现了大量的点云配准算法。其关键思想是确定数据集之间的对应点,并找到一个使对应点之间的距离(对齐误差)最小的变换。这个过程是迭代的,受到数据集的相对位置和方向的影响。一旦对准误差低于给定的阈值,就称配准完成。
配准模块依赖库:common
kdtree
sample_consensus
features
官网关于点云配准模块的详细介绍点击这里
5、kdTree KD树模块:一种树状数据结构可提高点云搜索速度
pcl_kdtree库使用FLANN提供了kd-tree数据结构,允许快速的最近邻搜索。Kd-tree (k维树)是一种空间分区数据结构,它在树结构中存储一组k维点,可以进行有效的范围搜索和最近邻搜索。最近邻搜索是处理点云数据时的核心操作,可用于查找一组点或特征描述符之间的对应关系,或定义一个或多个点周围的局部邻域。但需要注意的是,kd-Tree能够减少点云的搜索时间,但初始化时需要消耗一定时间将点云排列存储成kd-tree结构。
kdtree模块依赖库:common
官网关于kd-tree结构的详细介绍点击这里
6、octree 八叉树模块:一种树状数据结构,支持点云数据空间划分、下采样和搜索操作
pcl_octree库提供了从点云数据创建层次树数据结构的有效方法。这支持对点数据集进行空间划分、下采样和搜索操作。每个八叉树节点要么有8个子节点,要么没有子节点。根节点描述了封装所有点的立方体包围盒。在每个树级别上,这个空间被2的因子细分,从而增加体素分辨率。
octree模块依赖库:common
官网关于octree结构的详细介绍点击这里
7、点云分割模块:多种不同分割算法的组合,在物体分离问题中常用
pcl_segmentation库包含了将点云分割成不同簇的算法。这些算法最适合处理由许多空间隔离区域组成的点云。在这种情况下,通常使用集群将云分解为其组成部分,然后可以独立处理这些部分。
分割模块依赖库:common
search
sample_consensus
kdtree
octree
官网关于点云分割模块详细介绍点击这里
8、样本一致性模块:多用于圆柱、平面等规则几何体的拟合或分割检测。
pcl_sample_consensus库保存了像RANSAC这样的样本一致性(SAC)方法以及像平面和圆柱体这样的模型。这些可以自由组合,以检测点云中的特定模型及其参数。这个库中实现的一些模型包括:直线、平面、圆柱体和球体。平面拟合通常用于检测室内常见表面,如墙壁、地板和桌面。其他模型可以用来检测和分割具有共同几何结构的对象(例如,拟合一个圆柱体模型到一个杯子)。
目前(1.12.0版本)支持的模型包括:
平面、线、平行线、平面上二维圆、空间上三维圆、垂直于指定轴向的平面、法向约束的平面、
球面、圆柱面、圆锥面、表面法相约束的球面、条(杆)状物。
样本一致性模块所依赖的库:common
官网关于样本一致性模块详细介绍点击这里
9、点云重建表面模块:
pcl_surface库用于从3D扫描中重建原始表面。例如网格表示或光滑/重采样表面与法线表示的物体。如果点云存在噪声,或者是由多片没有完全对齐的扫描点云组成的,在重建表面前对当前点云集进行平滑和重采样是必不可少的。该算法可以调整曲面估计的复杂度,甚至可以同步估计出法线。网格划分是一种通用的方法来创建一个表面的点,目前PCL有两种算法提供:一个非常快速的原始点三角划分,和一个较慢的利用平滑和孔填充的网格划分方法。
点云重建表面模块依赖的库:common
search
kdtree
octree
官网关于点云重建表面模块详细介绍点击这里
10、点云识别模块:类似于模板匹配
PCL识别模块包含用于物体识别应用的算法。类似于2D的模板匹配应用在3D点云上。但又有很多细节上有所不同,具体在后面的文章中再做具体展开。
点云识别模块依赖的库:common
search
features
官网关于点云识别模块的详细介绍点击这里
11、点云输入输出IO模块:最为常用,PCL库的基础模块
pcl_io库包含用于读取和写入点云数据(PCD)文件的类和函数,以及从各种传感设备捕获点云。能直接使用PCL的IO库读取点云数据的设备种类有很多,例如使用OpenNI的设备:Primesense PSDK, Microsoft Kinect, Asus Xtion Pro/Live等。对于无法直接通信的设备也可以手动写一个点云格式转换函数完成衔接。
IO模块依赖的库:common
octree
OpenNi for kinect handling
uEye and Ensenso SDK for Ensenso handling
官网关于点云IO模块的详细介绍点击这里
12、点云可视化模块:较为常用,用于输出可视化点云,可以调整可视化颜色等参数
构建pcl_visualization库的目的是能够快速原型化并可视化在三维点云数据上操作的算法的结果。类似于OpenCV用于在屏幕上显示2D图像和绘制基本2D形状的高端gui。
该库提供如下功能:
1.为点云数据集渲染和设置视觉属性(颜色、点大小、不透明度等)的方法
2.基于点集或者参数方程在屏幕上绘制基本的3D形状(例如,柱面,球体,直线,多边形等)的方法
3.用于2D绘图的直方图可视化模块(PCLHistogramVisualizer)
4.多个几何和颜色处理程序的数据集
该模块包使用VTK库进行距离图像的3D渲染和2D操作。
可视化模块依赖的库:common
VTK
io
kdtree
RangeImage
官网关于点云可视化模块的详细介绍点击这里
下一篇文章将详细介绍PCL的Feature模块库,并以示例程序演示如何使用Feature模块库,
点击进入下一篇文章。
【相关资料分享】
1.《PCL学习教程》
链接:https://pan.baidu.com/s/1z6q_dhTpd3328r9GSJxfoQ
提取码:TJUM
分享不易,还请看官三连支持一下。
【博主简介】
斯坦福的兔子,男,95,天津大学机械工程工学硕士。21年毕业至今从事光学三维成像及点云处理相关工作。因工作中使用的三维处理库为公司内部库,不具有普遍适用性,遂自学开源PCL库及其相关数学知识以备使用。谨此将自学过程与君共享。
博主才疏学浅,尚不具有指导能力,如有问题还请各位在评论处留言供大家共同讨论。文章来源:https://www.toymoban.com/news/detail-735019.html
若前辈们有工作机会介绍欢迎私信。文章来源地址https://www.toymoban.com/news/detail-735019.html
到了这里,关于【PCL自学:目录】PCL简介及主要功能模块介绍 (持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!