PCL(点云库)学习笔记
1.简介
点云数据的处理可以采用获得广泛应用的Point Cloud Library(点云库,PCL库)。
PCL库是一个最初发布于 2013年的开源c++库,它实现了大量点云相关的通用算法和高效的数据管理。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。
如果说OpenCV是2D信息获取与处理的技术结晶,那么PCL在3D信息获取与处理上,就与OpenCV具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用。
PCL包含多个模块,如滤波(filter)、特征提取(features)、关键字(keypoint)、配准(registration)、k-d树(k-d tree)、八叉树(octree)、分割(segmentation)、抽样一致(Random sample consensus)、表面重建(surface)、识别(recognition)、输入输出(io)、visualization(可视化)等模块。
2.PCL的发展与创景
PCL起初是ROS(Robot Operating System)下由来自于慕尼黑大学和斯坦福大学Radu博士等人维护和开发的开源项目,主要应用于机器人研究应用领域,随着各个算法模块的积累,于2011年独立出来,正式与全球3D信息获取、处理的同行一起,组件了强大的开发维护团队。
随着加入组织的增多,PCL官方目前的计划是继续加入很多新的功能模块和算法的实现,包括当前最新的3D相关的处理算法,如基于PrimeSensor 3D设备,微软 Kinect或者XTionPRO智能交互应用等,而且也计划进一步支持使用CUDA和OpenCL等基于GPU的高性能计算的技术。
3.PCL的潜在应用领域
PCL能解决什么问题?
机器人领域
移动机器人对其工作环境的有效感知、辨识与认认知,是其进行自主行为优化 并可靠完成所承担任务的前提和基础。如何实现场景中物体的有效分类与识别是移动机器人场景认知的核心问题,目前基于视觉图像处理技术来进行场景的认知是该领域的重要方法。但移动机器人在线获取的视觉图像质量受光线变化影响较大,特别是在光线较暗的场景更难以应用,随着RGBD获取设备的大量推广,在机器人领域势必掀起一股深度信息结合2D信息的应用研究热潮,深度信息的引入能够使机器人更好的对环境进行认知、辨识,与图像信息在机器人领域的应用一样,需要强大智能软件算法支撑,PCL就为此而生,最重要的是PCL本身就是为机器人而发起的开源项目,PCL中不仅提供了对现有的RGBD信息的 获取设备的支持,还提供了高效的分割、特征提取、识别、追踪等最新的算法,最重要的是它可以移植到android、ubuntu等主流Linux平台上,PCL无疑将会 成为机器人应用领域的一把瑞士军刀。
CAD/CAM、逆向工程
大部分工业产品是根据二维或三维CAD模型制造而成,但有时因为数据丢失、设计多次更改、实物引进等原因,产品的几何模型无法获得,因而常常需要根据现有产品实物生成物体几何模型。逆向工程技术能够对产品实物进行测绘,重构产品表面三维几何模型,生成产品制造所需的数字化文档。在一些工业领域,如汽车制造业,许多零件的几何模型都通过逆向工程由油泥模型或实物零件获得,目前在CAD/CAM领域利用激光点云进行高精度测量与重建成为趋势,同时引来了新的问题,通过获取的海量点云数据,来提取重建模型的几何参数,或者形状模型,对模型进行智能检索,从点云数据获取的曲面模型等,诸如此类的问题解决方案在PCL中都有涉及。例如kdtree和octree对海量点云进行高效压缩存储和管理,其中滤波、配准、特征描述与提前基础处理,可应用于模型的智能检索,以及后期的曲面重建和可视化都在PCL中有相应的模块。总之,三维点云数据的处理是逆向工程中比较重要的一环,PCL中间所有的模块正是为此而生。
激光遥感测量
能够直接获取高精度三维地面点数据,是对传统测量技术在高程数据获取及自动化快速处理方面的重要技术补充。激光遥感测量系统在地形测绘、环境检测、三维城市建模、地球科学、行星科学等诸多领域具有广泛的发展前景,是目前最先进的能实时获取地形表面三维空间信息和影像的遥感系统。目前,在各种提取地面点的算法中,算法结果与世界结果之间差别较大 ,违背了实际情况,PCL中强大的模块可以助力此处的各种需求。
虚拟现实 、人机交互
虚拟现实技术(简称VR),又称灵境技术,是以沉浸性、交互性和构想性为基本特征的计算机高级人机界面。它综合利用了计算机图形学、仿真技术、多媒体技术、人工智能技术、计算机网络技术、并行处理技术和多传感器技术,模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间,具有广阔的应用前景 。目前各种交互式体感应用的推出,让虚拟现实与人机交互发展非常迅速,以微软、华硕、三星等为例,目前诸多公司推出的RGBD解决方案,势必会让虚拟现实走出实验室,因为现有的RGBD设备已经开始大量推向市场,只是缺少,其他应用的跟进,这正是在为虚拟现实和人机交互应用铸造生态链的底部 。
4.PCL的结构和内容
如图的架构图所示,对于3D点云处理来说,PCL完全是一个模块化的现代C++模板库。其基于以下第三方库:Boost、Eigen、FLANN、VTK、OpenNI、Qhull,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。
PCL利用OpenMP、GPU、CUDA等先进高性能计算技术,通过并行化提高程序实时性。K近邻搜索操作的架构是基于FLANN(Fast Library for Approximate Nearest Neighbors)所实现的,速度也是目前技术中最快的。PCL中的所有模块和算法都是通过Boost共享指针来传送数据的。因而避免了多次复制系统中已存在的数据的需要,从0.6版本开始,PCL就已经被移入到Windows、MacOS和Linux系统,并且在Android系统也已经开始投入使用,这使得PCL的应用容易移植与多方发布。
从算法的角度,PCL是指纳入了多种操作点云数据的三维处理算法,其中包括:过滤,特征估计,表面重建,模型拟合和分割,定位搜索等。每一套算法都是通过基类进行划分的,试图把贯穿整个流水线处理技术的所有常见功能整合在一起,从而保持了整个算法实现过程中的紧凑和结构清晰,提高代码的重用性、简洁可读。在PCL中一个处理管道的基本接口程序是:
创建处理对象:(例如过滤、特征估计、分割等);
使用setInputCloud通过输入点云数据,处理模块;
设置算法相关参数;
调用计算(或过滤、分割等)得到输出。
为了进一步简化和开发,PCL被分成一系列较小的代码库,使其模块化,以便能够单独编译使用提高可配置性,特别适用于嵌入式处理中:
Libpcl filter:如采样、去除离群点、特征提取、拟合估计等数据实现过滤器;
Libpcl features:实现多种三维特征,如曲面法线、曲率、边界点估计、矩不变量、主曲率,PFH和FPFH特征,旋转图像、积分图像,NARF描述子,RIFT,相对标准偏差,数据强度的筛选等等;
Libpcl I/O:实现数据的输入和输出操作,例如点云数据文件(PCD)的读写;
Libpcl segmentation:实现聚类提取,如通过采样一致性方法对一系列参数模型(如平面、柱面、球面、直线等)进行模型拟合点云分割提取,提取多边形棱镜内部点云等等;
Libpcl surface:实现表面重建技术,如网络重建、凸包重建、移动最小二乘法平滑等;
Libpcl register:实现点云配准方法,如ICP等;
Libpcl keypoints:实现不同的关键点的提取方法,这可以用来作为预处理步骤,决定在哪儿提取特征描述符;
Libpcl range:实现支持不同点云数据集生成的范围图像。
为了保证PCL中操作的正确性,上述提到的库中的方法和类包含了单位和回归测试。这套单元测试通常都是由专门的构建部门按需求编译和验证的。当某一部分测试失败时,这些特定部分的各自作者就会立即被告知。这彻底地保证了代码测试过程出现的任何变故,以及新功能或修改都不会破坏PCL中已经存在的代码。