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中已经存在的代码。

PCL学习笔记-PCL简介相关推荐

  1. 点云库PCL学习笔记 -- 点云滤波Filtering -- 3. StatisticalOutlierRemoval 统计滤波器

    点云库PCL学习笔记 -- 点云滤波Filtering -- 3.StatisticalOutlierRemoval 统计滤波器 StatisticalOutlierRemoval 统计滤波器相关简介 ...

  2. PCL学习笔记(二):PCL官方教程学习

    PCL学习笔记(二):PCL官方教程学习 PCD文件制作 Features 表面法线提取 Keypoints 提取NARF关键点 KdTree Range Image How to create a ...

  3. OptiX资料学习笔记1——简介

    OptiX资料学习笔记1--简介 OptiX引擎的现状 目前有三种开源的API支持NVIDIA的光线追踪功能,分别为: DirectX Raytracing (DXR) DX的光线追踪API Vulk ...

  4. RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法

    RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法 本文假设读者已经熟悉了常规的神经网络,并且了解了BP算法,如果还不了解的,参见UFIDL的教程. - 1.RNN结构 ...

  5. 51单片机学习笔记1 简介及开发环境

    51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...

  6. 点云PCL学习笔记-分割segmentation-RANSAC随机采样一致性算法欧式聚类提取

    随机采样一致性算法RANSAC 程序实例参考网址: https://pcl.readthedocs.io/projects/tutorials/en/latest/random_sample_cons ...

  7. PCL学习笔记(十八)-- ConditionalRemoval和RadiusOutliersRemoval滤波器移除离群点

    一.简介 RadiusOutlierRemoval滤波处理会滤除那些一定范围内没有足够多近邻的点: ConditionalRemoval滤波器用于删除不符合用户要求的一个或多个数据点. 二.代码分析 ...

  8. PCL学习笔记(35)——3D物体识别

    源码 #include <pcl/io/pcd_io.h> #include <pcl/point_cloud.h> #include <pcl/corresponden ...

  9. PCL学习笔记,区域生长分割(region growing segmentation)

    在本博文中,我主要介绍如何在pcl::RegionGrowing类中调用区域增长算法.首先注意一点,这里是region growing segmentation,不是color-based regio ...

最新文章

  1. g711u与g729比较编码格式
  2. UART的FIFO功能
  3. 摄像头拼接技术-远超海康大华
  4. 关于ISA2006引起网速慢或间歇性断网的问题的解决方法
  5. 套现4.88亿美元,百度从此告别外卖!
  6. Github 常用命令
  7. CSS圆角兼容IE6
  8. 【华为云技术分享】LwM2M协议的学习与分享
  9. 判断101到200之间的素数
  10. 悉尼大学计算机科学,悉尼大学计算机科学
  11. vim 编辑器sed 替换字符串方法
  12. 新时达系统服务器怎么看故障,新时达系统故障详解:38故障
  13. 【stm32f407】硬件介绍
  14. ## python 统计素数并求和
  15. TypeScript实现归并排序
  16. DA0207 数据分析——数据分析之EXCEL
  17. 框架复习(一):不如写个tiny-Spring?(完整版)
  18. MUI增加BeeCloud支付集成示例
  19. python 动漫卡通人物图片大全_用Python实现抖音上的“人像动漫化”特效,原来这么简单...
  20. angular2 (v2.0)

热门文章

  1. c++ extra qualification
  2. 【GDI】 GDI与GDI+
  3. 阿里年薪50w+的顶尖p7专家:辞职回家当公务员,看各方表态!!!
  4. Win7下无损分区和分区调整
  5. Matlab试验箱rbf,matlab实现RBF的相关函数
  6. html显示queryset,Django用queryset将对象从视图返回到HTML?
  7. 安装linux系统后屏幕花屏,解决安装ubuntu系统时屏幕花屏现象
  8. php魔术方法和代码,PHP的魔术方法_php
  9. 2014 android 机型排行,2014年1月份10大畅销Android智能手机排名(图)
  10. 可汗学院统计学笔记(二)