CloudCompare介绍——(一)源码编译

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CloudCompare介绍——(一)源码编译相关的知识,希望对你有一定的参考价值。

参考技术A

CloudCompare是一款基于GPL开源协议的3D点云处理软件,可以在Windows、MacOS和Linux上运行。我们可以通过阅读其源码来一窥3D点云处理的基本算法,也可以通过设计新的plugin来拓展本软件。本篇博文首先将介绍如何对其源码进行编译(这里默认OS为Windows)。

预热

生成项目

编译项目

OK,到这里我们就顺利完成了CloudCompare的源码编译,下一篇博文我们来了解一下如何设计一个新的plugin来拓展CloudCompare。

CloudCompare基础教程-介绍

CloudCompare是一个三维点云(网格)编辑和处理软件。最初,它被设计用来对稠密的三维点云进行直接比较。它依赖于一种特定的八叉树结构,在进行点云对比这类任务时具有出色的性能【1】。此外,由于大多数点云都是由地面激光扫描仪采集的,CloudCompare的目的是在一台标准笔记本电脑上处理大规模的点云——通常超过1000万个点云。在2005年后,cloudcompare就实现了点云和三角形网格之间的比较。随后,许多其他点云处理算法(配准、重采样、颜色/法线向量/尺度、统计计算、传感器管理、交互式或自动分割等)以及显示增强工具(自定义颜色渐变、颜色和法向量处理,校准图像处理、OpenGL着色器、插件等)

例如在一台带有双核处理器的笔记本电脑上,计算出300万个点到14000个三角形网格的距离需要10秒(笔者理解:这里是指点云到模型的配准,出现的误差通过颜色的不同可视化出差别)

CloudCompare二次开发编译篇

点云与网格

由于CloudCompare的特定历史,该软件几乎将所有的三维实体都视为点云数据进行处理。通常,三角形网格只是一个具有关联拓扑的点云(网格顶点 the mesh vertices)(与每个三角形对应的“连接”点的三元组)。这解释了网格始终有一个名为“顶点”的点云作为同级或父级(取决于加载或生成它们的方式)。虽然CloudCompare允许用户直接在网格结构(即三角化点云)上应用一些工具,但有些工具只能应用于网格顶点。一开始可能有点令人难以理解,但我们不希望用户忽略这一点:CloudCompare主要是一个点云处理软件。当然,由于CloudCompare的目的是进行变化检测(例如形变监测),而且三角形网格是表示参考形状(例如建筑物)的一种非常常见的方法,因此它非常有用,不能忽视。尽管如此,处理网格点云仍然是一个“次要”实例,尤其是CloudCompare能够直接比较两个点云,而不需要生成中间网格。

主要原因是:

  • 三角化网格通常很难在真实场景中正确生成,尤其是在使用激光扫描仪(噪声、可变密度等)扫描时

  • 由于ALS/TLS点云通常非常密集(且准确),我们已经拥有了所需的所有信息。

(笔者理解:这里说明了cloudcompare的定位是一款处理点云的软件,尽管能处理mesh数据,但是也只能处理mesh数据中顶点的点,并且是一款用于检测形变的点云处理软件)

CloudCompare技术上的优势

便携性

CloudCompare是在C++中开发的。它目前是在Windows、Linux和Mac操作系统上编译(感谢CMake)32位和64位体系结构。

在存储和速度之间进行权衡

以下是关于CloudCompare中所做技术选择的一些细节(主要是为了实现加载尽可能多的点而不降低太多性能的目标,即在存储和速度之间进行良好的权衡)

  • 所有存储值和大部分计算都使用32位浮点值完成

  • 防止对数组大小的任何限制(因为在32 位Windows上很难获得大的连续内存块),我们使用一个自定义容器,自动将数据集分块成小块(每个块64KB)。

  • 法向量(如果有)压缩到16位(实际上是15位,因为量化1的工作方式)

  • CloudCompare中使用的特定八叉树结构需要恒定的每点内存(即在32位操作系统上,每点8个字节—最大深度为10—在64位操作系统上为12个字节—最大深度为21!)。它基于三维点坐标的特定量化-一种Morton【2】排序方案-其中每个点在八叉树网格和任何级别上的位置都由单个整数代码表示。然后我们处理这些代码以实现非常高效的最近邻查询操作。然而,尽管这种八叉树结构对于计算距离非常有效,但它不适合快速显示( Level Of Detail (LOD) 等)

基于以上平衡选择的结果是CloudCompare每GB内存可以存储大约9000万个空白点(只含有XYZ的意思)。如果添加RGB颜色、法线向量、单个尺度字段,并且需要计算八叉树,则每GB最多可以加载3200万个点。在一个64位操作系统上,你可以加载任意多个点(事实上多达40亿)。但是,根据您的显卡功能,显示和交互性可能会因为这许多点而严重降低)。有了高端显卡,你可以保持一个合理的帧速率高达1.5亿个点。

参考文献

1 http://en.wikipedia.org/wiki/Quantization

2 http://en.wikipedia.org/wiki/Z-order_curve

最近的进展

虽然该项目已于2004年在EDF研发部启动,但直到2009年左右才在公共领域发布(根据GPL许可)。由于CloudCompare是开源项目,所以每个人都可以免费(也欢迎)扩展其功能。请不吝于提问和分享您的经验在论坛里【3】,并查看Github源代码【4】。

许可证

CCLib库(包含核心算法)的许可证是LGPL【5】版本2.0。

因此,CCLib可以集成到任何商业或非商业项目中。你只要和别人分享,就可以和作者一起修改代码。

其他组件的许可证为GPL【6】(2.0版):

•qCC_db(数据库)

•qCC_io(文件I/O库)

•qCC_gl(基于OpenGL的3D显示库)

•CloudCompare和ccViewer(独立应用程序)

因此,只有与GPL兼容(即开源但不一定意味着免费)的项目可以使用这些组件。

最新版本的用户文档可在以下网址找到:

http://www.cloudcompare.org/doc/wiki/

官方汉化步骤

http://www.cloudcompare.org/forum/viewtopic.php?f=3&t=1444

参考文献

3 http://www.cloudcompare.org/forum

4 https://github.com/cloudcompare/trunk

5 http://www.gnu.org/licenses/lgpl-2.0.html

6 http://www.gnu.org/licenses/gpl-2.0.html

资源

三维点云论文及相关应用分享

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

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

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

SLAM及AR相关分享

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

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

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

SLAM和AR综述

常用的3D深度相机

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

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

Kimera实时重建的语义SLAM系统

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

易扩展的SLAM框架-OpenVSLAM

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

SLAM综述之Lidar SLAM

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

往期线上分享录播汇总

第一期B站录播之三维模型检索技术

第二期B站录播之深度学习在3D场景中的应用

第三期B站录播之CMake进阶学习

第四期B站录播之点云物体及六自由度姿态估计

第五期B站录播之点云深度学习语义分割拓展

第六期B站录播之Pointnetlk解读

[线上分享录播]点云配准概述及其在激光SLAM中的应用

[线上分享录播]cloudcompare插件开发

[线上分享录播]基于点云数据的 Mesh重建与处理

[线上分享录播]机器人力反馈遥操作技术及机器人视觉分享

[线上分享录播]地面点云配准与机载点云航带平差

扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:

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

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

扫描二维码

                   关注我们

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

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

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

以上是关于CloudCompare介绍——(一)源码编译的主要内容,如果未能解决你的问题,请参考以下文章

一:spring源码介绍和编译

CloudCompare基础教程-介绍

CloudCompare第一步

CloudCompare第一步

编译和安装gdb源码详细步骤介绍

FastDFS源码学习FastDFS介绍及源码编译安装