本文转载 https://www.cnblogs.com/li-yao7758258/p/6441763.html

PCL(PointCloudLibrary)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、MacOSX、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用  。

PCL的潜在应用领域

PCL能解决什么问题呢?

机器人领域移动机器人对其工作环境的有效感知、辨识与认知,是其进行自主行为优化并可靠完成所承担任务的前提和基础。如何实现场景中物体的有效分类与识别是
移动机器人场景认知的核心问题,目前基于视觉图像处理技术来进行场景的认知是该领域的重要方法。但移动机器人在线获取的视觉图像质量受光线变化影响较大,特别是在光线较暗的场景更难以应用,随着RGBD获取设备的大量推广,在机器人领域势必掀起一股深度信息结合2D信息的应用研究热潮,深度信息的引入能够使机器人更好地对环境进行认知、辨识,与图像信息在机器人领域的应用一样,需要强大智能软件算法支撑,PCL就为此而生,最重要的是PCL本身就是为机器人而发起的开源项目,PCL中不仅提供了对现有的RGBD信息的获取设备的支持,还提供了高效的分割、特征提取、识别、追踪等最新的算法,最重要的是它可以移植到android、ubuntu等主流Linux平台上,PCL无疑将会成为机器人应用领域一把瑞士军刀。

CAD/CAM、逆向工程

大部分工业产品是根据二维或三维CAD模型制造而成,但有时因为数据丢失、设计多次更改、实物引进等原因,产品的几何模型无法获得,因而常常需要根据现有产品实物生成物体几何模型。逆向工程技术能够对产品实物进行测绘,重构产品表面三维几何模型,生成产品制造所需的数字化文档。

在一些工业领域,如汽车制造业,许多零件的几何模型都通过逆向工程由油泥模型或实物零件获得,目前在CAD/CAM领域利用激光点云进行高精度测量与重建成为趋势,同时引来了新的问题,通过获取的海量点云数据,来提取重建模型的几何参数,或者形状模型,对模型进行智能检索,从点云数据获取模型的曲面模型等,诸如此类
的问题解决方案在PCL中都有涉及。
例如kdtree和octree对海量点云进行高效压缩存储与管理,其中滤波、配准、特征描述与提前基础处理,可以应用于模型的智能检索,以及后期的曲面重建和可视化都在PCL中有相应的模块。总之,三维点云数据的处理是逆向工程中比较重要的一环,PCL中间所有的模块正是为此而生的。

激光遥感测量

能够直接获取高精度三维地面点数据,是对传统测量技术在高程数据获取及自动化快速处理方面的重要技术补充。激光遥感测量系统在地形测绘、环境检测、三维城市建模、地球科学、行星科学等诸多领域具有广泛的发展前景,是目前最先进的能实时获取地形表面三维空间信息和影像的遥感系统。目前,在各种提取地面点的算法中,算法结果与世界结果之间差别较大,违背了实际情况,PCL中强大的模块可以助力此处的各种需求。

虚拟现实、人机交互虚拟现实技术(简称VR),
又称灵境技术,是以沉浸性、交互性和构想性为基本特征的计算机高级人机界面。它综合利用了计算机图形学、仿真技术、多媒体技术、人工智能技术、计算机网络技术、并行处理技术和多传感器技术,模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间,具有广阔的应用前景。

对于3D点云处理来说,PCL完全是一个的模块化的现代C++模板库。其基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。PCL利用OpenMP、GPU、CUDA等先进高性能计算技术,通过并行化提高程序实时性。K近邻搜索操作的构架是基于FLANN(FastLibraryforApproximateNearestNeighbors)所实现的,速度也是目前技术中最快的。PCL中的所有模块和算法都是通过Boost共享指针来传送数据的,因而避免了多次复制系统中已存在的数据的需要,从0.6版本开始,PCL就已经被移入到Windows,MacOS和Linux系统,并且在Android系统也已经开始投入使用,这使得PCL的应用容易移植与多方发布

PCL包括多个子模块库。最重要的PCL模块库有如下:过滤器Filters、特征Features、关键点Keypoints、注册Registration、Kd树Kd-tree、八叉树Octree、切分Segmentation、Sample Consensus、Surface、Range Image、文件读写I/O、Visualization、通用库Common、Search

原文地址:http://pointclouds.org/documentation/tutorials/walkthrough.php#walkthrough

过滤器Filters

下图是一个噪音消除的示例。因为测量的误差,某些点集存在大量的阴影点,而这将使得局部点云的3D特征建立复杂化。通过对每个点的邻区 的统计分析,削除未达到一定标准的点,可以将其中一些异常的数据点滤去。在PCL中稀疏噪音的消除方法是在输入的点集数据中计算各点到其邻区的分布概率。 对于每个点,计算其到所有相邻点的距离,假定其结果应该是符合特定均值和标准差的高斯分布,定义全局的可容忍的平均值和标准差,将所有不在可容忍误差内的 点都认为是噪音点而删除。

特征Features

在3D特征教程里有一个例子展示了特征的基本理论。

特征库包括数据结构和从点云建立3D特征的方法。3D特征为对于特定点其周围的可用的几何关系信息,如特定的三维点、位置或空间。对于查询点周围的点云数据通常简称为k-neighborhood

两个最广泛使用的几何点属性是曲面的曲率估计和查询点p的法线。利用点的k-neighborhood计算所得的这两个属性都可以作为本地特征。为 了确定有效的k-neighborhood点云数据,输入的点云数据通常会按空间划分为多个小块区域,如八叉树或KD-trees,然后在这些区域中查找 相邻的点数据。根据具体的应用情况,可以选择p点附近的固定数量的k个点或者是距离p点r距离内的所有点。毫无疑问,最简单的计算p点的法线和曲率变化的 方法是在k-neighborhood点曲面中将特征分解计算(例如分别计算特征向量和特征值),当特征值最小时所相关的特征向量即可近似为p点的法向 量,同时曲面的曲率变化可以通过如下公式计算得到:(曲率变化计算不理解其推导过程,后续理解后在详述)。 

关键点Keypoints

关键点库含有两个点云集的关键点检测算法。关键点(也叫做兴趣点)是指在一副图像或者一个点云集中能够利用一个明确标准检测出来的稳定的、独特的 点。一般情况下关键点的数量要远远少于点云集中的点数。通常将关键点信息和各个关键点的本地特征信息组合起来形成一组compact—yet descriptive—representation的原始数据。

注册Registration

将一些点集数据在统一的世界坐标系下组合起来即为注册。其关键在于确定各个点集之间的关联点,计算出各个关联点之间最近似的变换矩阵,对所有的原始数据集不停的重复此过程直到,直到出现各个点集之间的对齐误差小于指定的阈值,即可认为注册过程完成。

注册库包含了的大量的点云注册算法,其可以处理的点集数据不论是否为有序。例如,PCL在强注册算法下,可以将拒绝坏的点集而只将好的点集注册。

Kd树Kd-tree

Kd树的基本原理可以在其基础教程里了解。

Kd树库的基础数据结构使用了FLANN以便可以快速的进行邻区搜索。

Kd树按空间划分生成叶子节点,各个叶子节点里存放点数据,其可以按半径搜索或邻区搜索。最近邻区搜索是点云处理中的一样核心操作,在点集之间确定关联点、特征描述、点的邻区搜索时都会用到。

                            

八叉树Octree

八叉树库提供了直接从点云数据创建树的方法。其可支持的操作有:空间分割、下采样、和搜索。每个八叉树的节点都有八个子节点或者没有子节点(叶节点)。根节点包含囊括所有点的立方体空间,每层深度的子节点都是上层空间按各轴除2的子空间。

八叉树通常用来作邻区搜索,如相邻区间内搜索、K邻区搜索、指定半径内搜索。八叉树会自动的调整根据点集数据调整其空间尺度。叶节点还提供了一些额 外的操作,如空间的占有率查询、每空间单位内的点密度。库还提供了将八叉树编码为二进制文件以及从二进制文件解析为八叉树的功能。此外库中还使用了内存池 技术减少了频繁内存的申请和释放开销,提高了八叉树的效率。

下图展示了一个八叉树的最底层的子节点空间。每个斯坦福兔表面的点即红色的点都在八叉树子节点空间内,这幅图就是有八叉树的viewer创建。

切分Segmentation

切分库包主要为将一个点云切分为多个片段簇。切分最适合处理由一些空间隔离区域组成的点云,在这种情况下,点云常常被分解为一些能够独立处理的簇。

关于簇的基本原理可以到其簇的提取教程里面了解。下面两幅图分别展示了片面模型(左)的切分和圆柱模型(右)的切分。

PCL学习笔记1 —— 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. 点云学习笔记15——PCL常用的基础代码

    点云学习笔记15--PCL基础 命名规范 常用代码 1.时间计算 2.pcl::PointCloud::Ptr和pcl::PointCloud的两个类相互转换 3.如何查找点云的x,y,z的极值? 4 ...

  4. 多线程编程学习笔记——任务并行库(二)

    接上文 多线程编程学习笔记--任务并行库(一) 三.   组合任务 本示例是学习如何设置相互依赖的任务.我们学习如何创建一个任务的子任务,这个子任务必须在父任务执行结束之后,再执行. 1,示例代码如下 ...

  5. 多线程编程学习笔记——任务并行库(三)

    接上文 多线程编程学习笔记--任务并行库(一) 接上文 多线程编程学习笔记--任务并行库(二) 六.   实现取消选项 本示例学习如何实现基于Task的异步操作进行取消流程,以及在任务真正运行前如何知 ...

  6. Python学习笔记:requests库

    Python学习笔记:requests库 利用requests这个功能强大的网络请求库,可以像浏览器一样发送各种HTTP请求来获取网站的数据. 一.运行环境 1.系统版本:Windows 10 2.P ...

  7. 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例

    ** 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例. 具体knn算法是怎样的我这里就不再详细论述.在这里我注意总结我使用knn算法进行一个分类的分析 ** 分析过程 1.前期准备 引入 ...

  8. STM32 HAL库学习笔记2 HAL库介绍

    STM32 HAL库学习笔记2 HAL库介绍 CMSIS标准 一.再次认识HAL库 HAL库设计思想 HAL库实现方式 以GPIO模块为例 GPIO外设数据类型 GPIO外设接口函数 二.使用HAL库 ...

  9. (学习笔记)PCL点云库的基本使用

    目录 前言 1.理解点云库 1.1.不同的点云类型 1.2.PCL中的算法 1.3.ROS的PCL接口 2.创建第一个PCL程序 2.1.创建点云 2.2.加载点云文件 2.3.创建点云文件 2.4. ...

最新文章

  1. 云计算的7种变化方式
  2. [转]linux下fms2流媒体服务器搭建之五-----flv播放器制作篇
  3. oracle中计算某月的天数
  4. mysql_crud
  5. Hexo+GitHub 快速搭建个人博客(一)---- 基本部署
  6. asp.net mvc 应用Bundle(捆绑和微小)压缩技术 启用 BundleConfig 配置web.config
  7. Git master branch has no upstream branch的解决
  8. 大数据可视化分析方法与流程
  9. 关于Location of the Android SDK has not been setup in the preferences的解决方法
  10. 面试时企业最看中你什么能力?
  11. rename 命令批量修改后缀
  12. 区块链技术指南学习(一)未来已来
  13. 淘淘商城系列——Redis的安装
  14. 【源码更新】活动报名登记预约问卷表单系统微信小程序支持导入导出自定义表单填报字段
  15. 时隔两年之后,证监会官网再次更新瑞丰银行的IPO进度。
  16. Instrument API介绍
  17. 阿里云压缩包无法分享解决方案
  18. MySQL必知必会总结
  19. Nginx 代理minio 共享文件
  20. SpringMVC 第一篇(SpringMVC入门小案例)

热门文章

  1. error C2899: 不能在模板声明之外使用类型名称
  2. 通俗理解计算机操作系统的作用
  3. 职业访谈计算机学院老师,理想照亮现实 访谈引领未来数学计算机学院举行首届职业生涯人物访谈大赛...
  4. 无人驾驶系统是个复杂的计算机系统,无人驾驶汽车安全行驶的三大系统
  5. Python高级培训第一次作业(寒假)
  6. 面试复习题--锁的细枝末节
  7. fgetc和方fread读不到文件末尾出现ffffff或0时解决方法
  8. IOS弹出提示框(确认/取消)
  9. collections, time, queue的应用
  10. python云盘搭建教程_超简单!基于Python搭建个人“云盘”,目前最好用的个人云盘...