论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信dianyunpcl@163.com。

摘要

CloudCompare是一个3D点云(和三角化网格)处理软件,它最初设计用于在两个3D点云之间(例如通过激光扫描仪获得的点云)或点云和三角化网格之间进行对比,它依赖于一个八叉树结构,该结构针对这个特定用例进行了高度优化,它还用于处理超大的点云(通常超过1000万个点,使用2GB内存最多可达1.2亿个点)。

基本介绍

其核心的算法库CCLib库,这个库提供用于处理三维点云数据的数据结构和算法。它是CloudCompare存储库的一部分(称为“CCLib”),也就是Cloudcompare源码中CC文件下的内容。

作者将其分离到单独的仓库中(https://github.com/CloudCompare/CCCoreLib),因为它本身很有用,而无需下载整个CloudCompare库,这使得使用CloudCompare项目的这一部分变得更容易,能够方便的使用。

接下我们以Cloudcompare中的CC文件夹为主进行一些分析和理解(有问题的地方请指教,欢迎交流),其CMake的依赖项有

(1)CGAL 计算几何算法库:是一个计算几何算法库,是一个大型 C + + 库的几何数据结构和算法,如 Delaunay 三角网,网格生成,布尔运算的多边形,以及各种几何处理算法。CGAL 是用来在各个领域:计算机图形学,科学可视化,计算机辅助设计与建模,地理信息系统,分子生物学,医学影像学,机器人学和运动规划,和数值方法。

(2)TBB:线程构建模块(Thread Building Blocks,简称TBB)是Intel公司开发的并行编程开发的工具。

头文件

接下里是根据文件的包含关系,从最底层开始介绍

CCTypes.h 定义了点云数据中每个点的数据类型,默认是using PointCoordinateType = float;以及单个字段的数据类型默认是float ,当然也可以定义为double,可配置。

CCConst.h定义了C++编程中常用的const变量,比如Pi,角度与弧度的计算,NaN的定义,以及点云是否可视化的定义如下:

constexpr unsigned char POINT_VISIBLE            =    0;                /**< Point visibility state: visible **/
constexpr unsigned char POINT_HIDDEN            =    1;                /**< Point visibility state: hidden (e.g. behind other points) **/
constexpr unsigned char POINT_OUT_OF_RANGE        =    2;                /**< Point visibility state: out of range **/
constexpr unsigned char POINT_OUT_OF_FOV        =    4;                /**< Point visibility state: out of field of view **/

CCShareable.h  这是一个由包含由CMake生成的头文件,决定是否激活共享对象的文件,也就是其他文件是否能够使用这个库的flag。

CCGeom.h 各种几何数据结构的定义,有2D vector, 3-Tuple结构,3D Vector,4-Tuple 结构等等。

GenericDistribution.h  处理概率分布的泛型类,主要就是判断点是否有限,判断点是否越界,计算点的欧式距离的泛型类。

题外话:泛型,实质上就是不使用具体数据类型(例如 int、double、float 等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务逻辑的实现。

NormalDistribution.h 正态/高斯统计分布,实现GenericDistribution接口。

GenericCloud.h 用于库和客户端应用程序之间数据通信的通用3D点云接口。

GenericOctree.h 用于库和客户端应用程序之间数据通信的通用八叉树接口。

CCPlatform.h 定义以下宏(取决于编译平台/CMake设置)。

- CC_WINDOWS / CC_MAC_OS / CC_LINUX- CC_ENV32 / CC_ENV64

CCToolbox.h 仅用于分类空类型。

GenericMesh.h 用于库和客户端应用程序之间通信的通用网格数据接口。

ScalarField.h 与点云相关联的简单标量字段的函数,比如设置字段的name,获取字段的均值和方差,获取最大和最小值,获取某一个索引对应的字段等等。

GenericProgressCallback.h 通用进度指示的接口,用于向客户端应用程序通知算法进度。实现了一个不超过100步的管理进度的类。

FastMarching.h 实现快速三角化的算法。

RayAndBox.h 实现几何中的射线结构的类,实现了《An Efficient and Robust Ray-Box Intersection Algorithm》论文中的算法。

WeibullDistribution.h   Weibull统计参数分布实现,基于GenericDistribution接口。

MeshSamplingTools.h实现mesh数据的采样,主要有计算mesh区域,计算mesh体积,计算mesh边连接的一些统计信息,采样mesh数据。

GenericTriangle.h 通用三角化接口。

GenericIndexedCloud.h 具有基于索引的点访问的通用三维点云数据。

CCMiscTools.h 其他可用功能(主要是几何元素处理)。

GenericIndexedMesh.h 由其3个顶点的索引描述的三角形。

SquareMatrix.h  方形矩阵。

MathTools.h  用于分类的空类。

DgmOctree.h 整个库中使用的八叉树结构,实现GenericOctree接口。

文章来源Corresponds to the octree structure developed during Daniel Girardeau-Montaut's PhD

AutoSegmentationTools.h 用于存储多个点子集的标准容器。AutoSegmentationTools工具箱的几种算法返回对应于每个分段零件的点子集的集合,此类集合通常存储在此类容器中。

Garbage.h 垃圾容器(销毁时自动删除指针)。

SimpleTriangle.h  三角化的类,使用对三维点的引用实现GenericTriangle类。

BoundingBox.h 包围盒的结构实现。

GenericIndexedCloudPersist.h 具有基于索引和对点的现有访问的通用三维点云,实现GenericIndexedCloud接口。

Grid3D.h 简单的3D网格结构 ,网格数据在内存中是连续的。

Jacobi.h  雅可比特征向量/值分解。

ConjugateGradient.h 执行共轭梯度优化的类,让“A*Xn=b”成为要优化的系统(在迭代n处)。首先,用户必须初始化A矩阵(N*N)和b向量(N*1)。然后使用X0初始化解算器。

StatisticalTestingTools.h 统计测试算法(Chi2距离计算、统计滤波等)。

CloudSamplingTools.h  几种点云重采样算法(基于八叉树、随机等)。

ScalarFieldTools.h 实现 K-mean类位置和边界。

ErrorFunction.h 实现 误差函数计算的相对误差。

FastMarchingForPropagation.h 表面波前传播的快速三角化算法。

SimpleMesh.h  简单的网格结构,具有基于索引的顶点访问,实现GenericIndexedMesh接口,该网格始终与存储网格顶点的(基于索引的)点云相关联。

Delaunay2dMesh.h 用于计算和处理点子集上的Delaunay 2D网格的类。

PointCloudTpl.h 存储效率高的点云结构,还可以处理无限数量的标量字段。

Neighbourhood.h 特定点可以通过结构来处理点的子集,并提供若干几何处理。

ReferenceCloud.h 实现简单的索引点云,实现GenericIndexedCloudPersist接口。一个简单的点云,将对Generic3dPoint实例的引用存储在向量中。

SaitoSquaredDistanceTransform.h  在三维网格上使用Saito算法计算平方距离场类的实现。

DgmOctreeReferenceCloud.h 一种基于DgmOctree::NeighborsSet结构的ReferenceCloud。

LocalModel.h 局部建模(通用接口),点云的局部曲面近似。

ManualSegmentationTools.h 手动分割算法的实现。

PointCloud.h 存储效率高的点云结构,还可以处理无限数量的标量字段。

Polyline.h 简单多段线类 ,多段线被视为具有打开/关闭状态信息的点云(按特定顺序)。

GeometricalAnalysisTools.h 计算点云几何特征的几种算法。

PointProjectionTools.h 几种点云重投影算法。

DistanceComputationTools.h  多种点云类到点云类距离计算算法(点云与点云、点云网格、点三角形等)。

RegistrationTools.h 基础的点云配准的算法。

KdTree.h 实现点到点距离相关功能的Kd树类。

TrueKdTree.h  KD树实现。

ParallelSort.h 并行模式库(用于并行排序)。

资源

自动驾驶及定位相关分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

自动驾驶中基于光流的运动物体检测

基于语义分割的相机外参标定

综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍

高速场景下自动驾驶车辆定位方法综述

Patchwork++:基于点云的快速、稳健的地面分割方法

PaGO-LOAM:基于地面优化的激光雷达里程计

多模态路沿检测与滤波方法

多个激光雷达同时校准、定位和建图的框架

动态的城市环境中杆状物的提取建图与长期定位

非重复型扫描激光雷达的运动畸变矫正

快速紧耦合的稀疏直接雷达-惯性-视觉里程计

基于相机和低分辨率激光雷达的三维车辆检测

用于三维点云语义分割的标注工具和城市数据集

ROS2入门之基本介绍

固态激光雷达和相机系统的自动标定

激光雷达+GPS+IMU+轮速计的传感器融合定位方案

基于稀疏语义视觉特征的道路场景的建图与定位

自动驾驶中基于激光雷达的车辆道路和人行道实时检测(代码开源)

用于三维点云语义分割的标注工具和城市数据集

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

TOF相机原理介绍

TOF飞行时间深度相机介绍

结构化PLP-SLAM:单目、RGB-D和双目相机使用点线面的高效稀疏建图与定位方案

开源又优化的F-LOAM方案:基于优化的SC-F-LOAM

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

基于鱼眼相机的SLAM方法介绍

如果你对本文感兴趣,请后台发送“知识星球”获取二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作方式:微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

CloudCompare中CCCoreLib模块介绍相关推荐

  1. python url模块介绍_python 中 urlparse 模块介绍

    urlparse模块主要是用于解析url中的参数  对url按照一定格式进行 拆分或拼接 1.urlparse.urlparse 将url分为6个部分,返回一个包含6个字符串项目的元组:协议.位置.路 ...

  2. 深度神经网络中Inception-ResNet模块介绍

    之前在https://blog.csdn.net/fengbingchun/article/details/113482036 介绍了Inception,在https://blog.csdn.net/ ...

  3. Angular中ngCookies模块介绍

    1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短 ...

  4. Python3中typing模块介绍

    typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py.此模块为类型提示(Type Hints)提供运行时支持( ...

  5. DSP F2803x中CLA模块介绍

    DSP之CLA模块 文章目录 1 概述 2 CLA接口 2.1 CLA存储 2.2 LCA内存总线 2.3 共享外设及EALLOW保护 2.4 CLA任务和中断向量 3 CLA和CPU仲裁 3.1 C ...

  6. python中wx模块介绍_python wx模块如何安装

    python wx模块如何安装 发布时间:2020-09-21 13:43:23 来源:亿速云 阅读:79 作者:Leah python wx模块如何安装?很多新手对此不是很清楚,为了帮助大家解决这个 ...

  7. Python中tqdm模块介绍

    tqdm模块简单介绍 tqdm是一个可以显示Python进度条的模块,可通过pip在终端安装 pip install tqdm 可通过 import tqdm 导入,也可通过 from tqdm im ...

  8. Python3中pickle模块介绍

          Pyhton3中的pickle模块用于对Python对象结构的二进制进行序列化(或pickling)和反序列化(或unpickling)."pickling"是将Pyt ...

  9. python fileinput模块next_Python中fileinput模块介绍

    fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作.该模块的input()函数有点类似文件 readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次 ...

最新文章

  1. Linux内核中锁机制之完成量、互斥量
  2. python文本分类评价指标 top1如何计算_python – Keras:如何计算多标签分类的准确......
  3. 重构——71将领域和表述/显示分开(Separate Domain from Presentation)
  4. ==与equals,String的equals()方法
  5. php文件运行的域名怎么改,discuz论坛更换域名,详细文件修改步骤
  6. Json、Gson、Jackson
  7. 开源jshop小程序商城
  8. Sql Server cdc变更捕获使用
  9. 移动webAPP前端开发技巧汇总
  10. 2016北理复试机试题
  11. 对HTML(HyperText Markup Language)的认识以及总结
  12. SPSS Statistics 24 软件安装教程
  13. Picasa2图片查找浏览工具
  14. 敏捷教练----敏捷项目管理-史诗、故事、主题
  15. 数学悖论与三次数学危机
  16. Android studio 导入项目详解 (简单快速)
  17. 我的计算机生涯--开始
  18. python富翁与穷人_富人家的孩子怎样看待穷人家的孩子?
  19. 雨流计数与载荷寿命之间的关系
  20. 如何将抓取下来的unicode字符串转换为中文

热门文章

  1. Foo bar 什么鬼?
  2. 利用vCard实现扫码将个人信息保存到通讯录
  3. GPT-4来了!看看她究竟强在哪里!
  4. linux 删除u盘痕迹,eraser彻底删除U盘使用痕迹的方法
  5. LiquiBase中文学习指南
  6. 解决SAP S4会计凭证不写入BSEG
  7. What/How/Why(学习技术三部曲)
  8. Android框架知识合集
  9. 什么时候会出现user_objects的invalid_夫妻之间出现这些情况,十有八九是缘分已尽了,别不在意...
  10. 微信小程序二维码生成工具,后端二维码生成工具类。