前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CloudCompare中CCCoreLib模块介绍

CloudCompare中CCCoreLib模块介绍

作者头像
点云PCL博主
发布2022-12-27 18:12:53
1.3K0
发布2022-12-27 18:12:53
举报
文章被收录于专栏:点云PCL点云PCL

论文阅读模块将分享点云处理,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的定义,以及点云是否可视化的定义如下:

代码语言:javascript
复制
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设置)。

代码语言:javascript
复制
    - 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 并行模式库(用于并行排序)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档