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基础教程(1)-介绍相关推荐

  1. OpenLayers3基础教程——OL3 介绍control

    概述: 本文讲述的是Ol3中的control的介绍和应用. OL2和OL3 control比较: 相比较Ol2的control,OL3显得特别少,下图分别为Ol2和Ol3的control: Ol2的c ...

  2. (转) OpenLayers3基础教程——OL3 介绍control

    http://blog.csdn.net/gisshixisheng/article/details/46761535 概述: 本文讲述的是Ol3中的control的介绍和应用. OL2和OL3 co ...

  3. (转)OpenLayers3基础教程——OL3 介绍interaction

    http://blog.csdn.net/gisshixisheng/article/details/46808647 概述: 本节主要讲述OL3的交互操作interaction,重点介绍draw,s ...

  4. Easy-x的基础教程使用介绍

    文章目录 前言 一.绘制   边框绘制   图形绘制   批量绘图 二.输出 三.输入 四.事件响应    鼠标事件响应    键盘事件响应 五.多媒体    图片    音频 六.其他   读写应用 ...

  5. OpenLayers3基础教程——OL3之Popup

    概述: 本节重点讲述OpenLayers3中Popup的调用时实现,OL3改用Overlay取代OL2的Popup功能. 接口简单介绍: overlay跟ol.control.Control一样,是一 ...

  6. ppt python 爬虫_python基础教程 PPT-python为什么叫爬虫

    看过了Python基础教程,接下来应该怎么做 看完基础教程代表你已经入门了,接下来就需要你做一下项目,把书本上的知识转化为自己的,活学活用,之后再进行中高级的学习! Python基础教程的介绍 本书包 ...

  7. Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

    Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示.它是对应用程序介绍的页面. 该页面源自Views文 ...

  8. Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍

    Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...

  9. LTspice基础教程-003.LTspice工具栏使用介绍

    直接上图,如下是我们必须学会的工具栏按钮,下面会详细介绍. 首先我们从放置被动器件开始,搭建一个RLC低通滤波电路,如下: 放置完器件后,我们开始连线以及放置地,当鼠标变成大十字说明进入了画线状态: ...

最新文章

  1. 【AAAI2022】GearNet:弱监督领域自适应的逐步对偶学习
  2. 镜头上的四线电机怎么驱动_2相四线,四相五线,四相六线步进电机接线及驱动方法...
  3. Linux I/O多路复用
  4. 读书笔记之快速排序(一)
  5. 函数的使用——未完待续
  6. leetcode 140. 单词拆分 II(记忆化)
  7. python 文件上传下载,python实现上传下载文件功能
  8. ARP:地址解析协议
  9. egg连接oracle,egg插件sequelize:表自连接
  10. 自学Web前端有哪些误区?自学Web需要掌握哪些技术
  11. PHP使用CodeIgniter笔记
  12. 更改窗口图标并将其显示在任务栏
  13. 矩阵(二维数组)的性质在算法求解中的应用
  14. SNMPv3对安全威胁的分类
  15. 【第四课】UAV倾斜摄影测量三维建模技术软件——Smart 3d
  16. ActiveMQ消息队列介绍
  17. AltiumDesigner14.3.X下载安装破解教程
  18. 如何重命名c盘中users文件夹下的文件名
  19. HCNE的110个知识点
  20. vi编辑器如何设置行号

热门文章

  1. Node搭建多人聊天室
  2. 第二阶段第八次spring会议
  3. 20145236《网络攻防》Exp4 恶意代码分析
  4. AVL树、splay树(伸展树)和红黑树比较
  5. Dwr 框架简单实例
  6. 抽象工厂————三层架构
  7. 移动应用开发—— 如何搭建开发大型的应用架构?
  8. Sql存储过程加密和解密
  9. 深度解析VC中的消息(上)
  10. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv1详解及复现