当你知道一切都不重要时,世界就是你的了。——《瑞克和莫蒂》S3E8

PCL介绍及主要模块分类

  • 一、PCL简要介绍
  • 二、PCL中的重要模块介绍
    • 1、点云滤波模块:去噪声和离群值(一般用于预处理)
    • 2、点云特征模块:计算几何图形特征
    • 3、点云关键点模块:提取角点或其他独特的点(一般用于预处理)
    • 4、点云配准模块:将几片点云组合成全局一致的点云集合
    • 5、kdTree KD树模块:一种树状数据结构可提高点云搜索速度
    • 6、octree 八叉树模块:一种树状数据结构,支持点云数据空间划分、下采样和搜索操作
    • 7、点云分割模块:多种不同分割算法的组合,在物体分离问题中常用
    • 8、样本一致性模块:多用于圆柱、平面等规则几何体的拟合或分割检测。
    • 9、点云重建表面模块:
    • 10、点云识别模块:类似于模板匹配
    • 11、点云输入输出IO模块:最为常用,PCL库的基础模块
    • 12、点云可视化模块:较为常用,用于输出可视化点云,可以调整可视化颜色等参数

一、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库及其相关数学知识以备使用。谨此将自学过程与君共享。
博主才疏学浅,尚不具有指导能力,如有问题还请各位在评论处留言供大家共同讨论。

若前辈们有工作机会介绍欢迎私信。

【PCL自学:目录】PCL简介及主要功能模块介绍 (持续更新)相关推荐

  1. Ranger 和 Ranger Audit 审计功能模块介绍

    目录 一.Ranger 介绍 1.Ranger概念 2.权限模型 二.Ranger Aduit审计功能模块详解 1.Ambari 中 Ranger config 2.Ranger Audit 功能模块 ...

  2. 自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新...

    笔记为自学时随手记录,如有错误,欢迎指正,不胜感激!现已广州转移至上海,欢迎小伙伴们加qq或微博沟通交流(QQ,微博和博客同名) 笔记分享:自学it18大数据笔记-第一阶段Java-day16-day ...

  3. 八字算命网站源码技术细节解析:使用PHP和JAVA实现的MVC架构、MySQL数据库设计和功能模块介绍

    技术文档:八字算命网站源码 1. 简介 本文档介绍了八字算命网站源码的技术细节,包括使用的技术.架构.数据库设计.代码结构和功能模块等. 2. 技术选型 本网站采用PHP和JAVA两种技术开发,具体如 ...

  4. 针对Vue的后台权限功能实现思路(持续更新)

    2019独角兽企业重金招聘Python工程师标准>>> 权限是一块设计挺繁琐的功能,尤其是设计到前端SPA应用,前后端的耦合性太强,先屡屡思路,再实现,如果您有好的建议,也可评论留言 ...

  5. 代驾小程序开发功能模块介绍

    代驾小程序开发,代驾小程序开发功能,代驾小程序开发功能模块.伴随着时下在我国车辆市场的需求的完善与驾驶安全防范意识的不断提升,及其交通法规愈来愈标准,愈来愈认真细致,"代驾"领域已 ...

  6. linux flash 制作工具,AM335x Flash Tool -- UniFlash 烧写工具使用简介及问题解决方案汇总(持续更新中…)...

    大家好,目前很多人都在关注AM335x flash tool(UniFlash)的进展情况,这篇帖子会对当前的进展情况进行汇总,并就客户使用过程中遇到的问题,给出了相应的解决方案.欢迎大家加入讨论,给 ...

  7. 微信小程序常用功能总结(持续更新中~)

    分享我在商城类微信小程序项目中用到的功能~(uniapp) 1. 分享小程序某个页面到微信好友或群聊 onShareAppMessage() {let imagePath = 'https://tid ...

  8. Burp suite工具使用及功能模块介绍

    安全渗透界使用最广泛的漏扫工具之一,能实现从漏洞发现到利用的完整过程.功能强大.配置较为复杂.可定制型强,支持丰富的第三方拓展插件.基于Java编写,跨平台支持,分为free (社区版)Profess ...

  9. flutter boost使用简介(踩坑记录,持续更新)

    前言 最近在研究android和flutter的混合开发.插件模式调用原生的混合模式已经在项目中使用,也暴露出一些问题, 最突出的问题就是flutter中对webview的支持,会出现各种各样奇怪的问 ...

  10. S2B2C商城系统平台功能模块分析,加速医药制造企业数字化转型落地

    目录 医药制造业在数字化方面存在的问题 S2B2C系统网站功能模块介绍 1.分销管理 2.商品管理 3.订单管理 4.物流管理 5.合同管理 作为国民经济的重要组成部分,医药制造业在我国整个消费市场中 ...

最新文章

  1. gdo图形引擎中的旋转角
  2. python function terminated_calibre 打不开也转不了 并且出现错误 mobi转docx
  3. equals和=,==的区别
  4. 2015计算机类专业课类试卷,2015计算机专业知识试题.doc
  5. 原创内容将成网络视频的一支奇军
  6. c++数据结构中 顺序队列的队首队尾_用队列实现栈,用栈实现队列,听起来有点绕,都搞懂了就掌握了精髓
  7. mac常用设置(新建、显示隐藏文件、任意位置开启终端等)
  8. docker入门(基于虚拟化技术)
  9. Hadoop日记Day13---使用hadoop自定义类型处理手机上网日志
  10. pycharm双击没有反应(Idea机制与之相同)
  11. android 崩溃捕获_Android从相机和图库捕获图像
  12. 爬虫 selenium
  13. java音频下载_java 实现网易云音乐下载和播放
  14. 计算机械效率的简便公式,机械效率公式
  15. Chrome浏览器翻译无法使用和ide谷歌翻译插件【更新 TKK 失败,请检查网络连接】解决办法
  16. php 抓取搜狗页面,爬虫解决方案之爬取“搜狗引擎”
  17. 有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
  18. 数据结构及算法之异或
  19. YUTUc++沙盒小游戏5.0(亲测可运行)
  20. PyCharm谷歌翻译插件Translation提示:更新 TKK 失败,请检查网络连接

热门文章

  1. 大连到日本出差/旅游注意事项
  2. 常用的计算机优化软件有哪些,计算机常用的硬件和软件优化软件和优化方法有哪些,如何提高WindowsXP系统的运行速度和稳定性...
  3. win7如何设置以管理员身份运行程序
  4. linux更改ntfs格式权限,Gentoo Linux下读写NTFS格式分区(ntfs-3g解决NTFS只读不可写的问题)...
  5. Docker目录映射
  6. c# 时间戳的使用,日期判定(时间戳获取、 时间戳和DateTime的转换、时差计算)
  7. android日期时间的获取与时差计算
  8. 计算机蓝牙快捷键,电脑蓝牙在哪里开?蓝牙快捷方式介绍
  9. GDAL自带的 rpc纠正和金字塔文件生成方法
  10. Liux 五种I/O模型概念梳理,及对比