PCL是什么?它有什么作用?
一、什么是PCL
在说PCL之前,我们应该首先了解一下什么是Point Cloud(点云):它是一种数据结构,是用于处理多维度的点数据结构,在这里通常是指3维的数据结构。在3D 点云中,通常是指点在几何体系中的坐标信息,即x、y、z;若为4D时,会附加一个颜色的信息。
PCL(英文-Point Cloud Library,中文-点云库),它是一个站在前人点云研究基础之上建立的跨平台开源的C++库,它实现了和点云数据相关的通用性算法和高效的数据结构,例如:点云的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建以及可视化等。它支持不同的操作系统,例如:Linux、MacOS、Windows、Android以及部分实时的嵌入式操作系统。如果说OpenCV是2D信息获取和处理的代表物,那么PCL就是3D信息提取和处理的代表物。
此外,PCL是BSD授权的开源软件,它可以免费提供给商业和学术应用。
二、PCL结构
1. PCL架构图
PCL的架构图,如下图所示:
通过架构图可以看出,PCL依赖的第三方库有Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull、OpenMP。它利用CUDA、OpenMP等高性能计算技术,通过并行化提高程序的实时性;利用FLANN(Fast Library for Approximate Nearest Neighbor)构建K近邻搜索操作的架构,其速度也是非常快的。而且在PCL中,均是用Boost库的共享指针来传递数据,因此避免多次赋值系统中已存在的数据的需要。
2. 模块介绍
- commom
commom库库包含了PCL中通用的数据结构和方法;其核心数据结构有点云类和大量用表示点的类型,它们常用于表示点、曲面法线、RGB颜色值、特征描述等;此外还包含用于计算距离/法线、均值、方差、角度转换、几何变换等函数。 - kdtree
kdtree库是一个空间分区的数据结构,用于存储k维度点的树结构,从而实现范围搜索和最邻近搜索。最邻近搜索对于点云数据来说是一个核心操作,该操作可用于查找点组和特征描述的对应关系,或者定义点的周围局部邻域。 - octree
八叉树库提供了直接从点云数据创建树的方法。其可支持的操作有:空间分割、下采样、和搜索。每个八叉树的节点都有八个子节点或者没有子节点(叶节点)。根节点包含囊括所有点的立方体空间,每层深度的子节点都是上层空间按各轴除2的子空间。
八叉树通常用来作邻区搜索,如相邻区间内搜索、K邻区搜索、指定半径内搜索。八叉树会自动的调整根据点集数据调整其空间尺度。叶节点还提供了一些额 外的操作,如空间的占有率查询、每空间单位内的点密度。库还提供了将八叉树编码为二进制文件以及从二进制文件解析为八叉树的功能。此外库中还使用了内存池 技术减少了频繁内存的申请和释放开销,提高了八叉树的效率。 - search
pcl_search是根据不同的数据结构提供不同的最邻近搜索方法。 - sample consensus
sample_consensus库包含SAmple Consensus (SAC)方法(如RANSAC)和模型(如平面、柱面)。 它们可以自由组合,以便在点云中检测特定的模型及其参数。
在随机样本一致性(RANSAC)教程中可以找到解释样本一致性算法工作原理的理论入门教程。
这个库中实现的一些模型包括:直线、平面、柱面和球体。平面拟合通常用于检测常见的室内表面,如墙壁、地板和桌面。其他模型可用于检测和分割具有常见几何结构的对象(例如,将圆柱体模型拟合到一个杯子上)。 - range-images
pcl_range_images包含表示和处理深度图像的两种类。深度图像是一种图像,其像素值用于表示距离传感器原点的深度或者距离。深度图像是一种常见的3D表示,通常是由立体或者飞翔时间相机生成。通过了解相机固有的校准参数,可以将深度图像转换为点云。 - tracking
无 - io
io库用于读写pcd格式的文件 - filters
filters库包含3D点云异常数据和噪声的过滤。 - features
features库,实现多种三维特征,如曲面法线、曲率、边界点估计、矩不变量、主曲率,PFH和FPFH特征,旋转图像、积分图像,NARF描述子,RIFT,相对标准偏差,数据强度的筛选等等。 - surface
surface库,实现表面重建技术,如网格重建、凸包重建、移动最小二乘法平滑等。 - segmentation
segmentation库包含将点云分割为不同簇的算法;这些算法都是最适合处理由多个空间隔离区域组成的点云。在这种情况下,使用聚类将点云分解为其组成部分,然后可以本独立处理。 - recognition
recognition库包含用于对象识别应用程序的算法。 - registration
registration库,实现点云配准方法,如ICP等。 - visualization
visualization库是用于建立可视化,其目的是能够快速原型化和可视化在三维点云数据上运行的算法的结果。 - keypoints
keypoints库是包含两种关键点检测算法,关键点(又称兴趣点)是图像或者点云中稳定、独特且可使用明确定义的检测标准识别的点。通常,点云中兴趣点的数量是远小于点云中的总点数;当与每个关键点的局部特征描述符相结合使用,关键点和描述符可用于形成原始数据的紧凑单描述性表示。
每个模块都有自己的依赖关系,依赖关系可分为四层,基础层为commom模块,如下图所示:
三、PCL应用场景
1. 机器人领域
机器人领域移动机器人对其工作环境的有效感知、辨识与认知,是其进行自主行为优化并可靠完成所承担任务的前提和基础。如何实现场景中物体的有效分类与识别是移动机器人场景认知的核心问题,目前基于视觉图像处理技术来进行场景的认知是该领域的重要方法。但移动机器人在线获取的视觉图像质量受光线变化影响较大,特别是在光线较暗的场景更难以应用,随着RGBD获取设备的大量推广,在机器人领域势必掀起一股深度信息结合2D信息的应用研究热潮,深度信息的引入能够使机器人更好地对环境进行认知、辨识,与图像信息在机器人领域的应用一样,需要强大智能软件算法支撑,PCL就为此而生,最重要的是PCL本身就是为机器人而发起的开源项目,PCL中不仅提供了对现有的RGBD信息的获取设备的支持,还提供了高效的分割、特征提取、识别、追踪等最新的算法,最重要的是它可以移植到android、ubuntu等主流Linux平台上,PCL无疑将会成为机器人应用领域一把瑞士军刀。
2. CAD&CAM&逆向工程
大部分工业产品是根据二维或三维CAD模型制造而成,但有时因为数据丢失、设计多次更改、实物引进等原因,产品的几何模型无法获得,因而常常需要根据现有产品实物生成物体几何模型。逆向工程技术能够对产品实物进行测绘,重构产品表面三维几何模型,生成产品制造所需的数字化文档。
在一些工业领域,如汽车制造业,许多零件的几何模型都通过逆向工程由油泥模型或实物零件获得,目前在CAD/CAM领域利用激光点云进行高精度测量与重建成为趋势,同时引来了新的问题,通过获取的海量点云数据,来提取重建模型的几何参数,或者形状模型,对模型进行智能检索,从点云数据获取模型的曲面模型等,诸如此类的问题解决方案在PCL中都有涉及。例如kdtree和octree对海量点云进行高效压缩存储与管理,其中滤波、配准、特征描述与提前基础处理,可以应用于模型的智能检索,以及后期的曲面重建和可视化都在PCL中有相应的模块。总之,三维点云数据的处理是逆向工程中比较重要的一环,PCL中间所有的模块正是为此而生的。
3. 激光遥感测量
能够直接获取高精度三维地面点数据,是对传统测量技术在高程数据获取及自动化快速处理方面的重要技术补充。激光遥感测量系统在地形测绘、环境检测、三维城市建模、地球科学、行星科学等诸多领域具有广泛的发展前景,是目前最先进的能实时获取地形表面三维空间信息和影像的遥感系统。目前,在各种提取地面点的算法中,算法结果与世界结果之间差别较大,违背了实际情况,PCL中强大的模块可以助力此处的各种需求。
4. 虚拟现实&人机交互
虚拟现实技术(VR)又称灵境技术,是以沉浸性、交互性和构想性为基本特征的计算机高级人机界面。它综合利用了计算机图形学、仿真技术、多媒体技术、人工智能技术、计算机网络技术、并行处理技术和多传感器技术,模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间,具有广阔的应用前景。