简介:CloudCompare使用教程面向从事三维点云处理的地质、建筑、测绘与工程技术人员,以及刚接触点云软件的学生和初学者,帮助其从零建立完整的操作框架。教程围绕软件界面与功能菜单展开,涵盖File文件读写与Global shift坐标设置、Display显示与多视图观察、Primitive Factory几何体生成、Edit颜色渲染与法线估计、Octree八叉树计算与重采样,以及Tools中的去噪、配准、降采样、分割拟合与Plugins插件扩展等内容,并附有汉化方法及ICP配准、cloud distance等实用技巧。压缩包内为1份PDF文档,约4.95MB,按基础操作到进阶工具的顺序编排,配有功能路径与参数说明,便于边读边在软件中对照练习。目前已有1459人学习,适合作为日常查阅的操作手册与入门到进阶的过渡读物。
1. 两片点云配了四十分钟残差不动:这份 CloudCompare 教程能省掉哪些返工
搜索 CloudCompare 使用教程的人,绝大多数不是想学点云理论,而是手里有一份数据打不开、打开了只剩一个点、配准残差死活降不下来。我碰到过一个典型情况:两站地面扫描数据导进去看着都正常,ICP 精配准跑了四十分钟,残差卡在 0.3 米就是不动,最后定位到问题是 Global shift 没设,两片云的坐标基准差了五百多公里,浮点精度在进软件那一刻就被吃掉了一截。这份教程的价值不在功能罗列,而在于它把 File、Edit、Tools、Display、Plugins 五层菜单和实际操作之间的因果关系串起来了——从几何体生成、颜色渲染、法线估计、八叉树降采样,到配准、距离计算、分割拟合、插件扩展。适合两类人:刚接手点云数据、需要一周内出第一张偏差图的工程人员;以及用了一段时间但只会点按钮、参数全凭默认的熟手。下面按进门、预处理、配准、避坑、进阶的顺序拆。
2. 进门第一关:Global shift、界面语言与 Primitive Factory 的四个参数
数据导入这一步决定了后面所有操作的上限。点云软件不像 CAD,它对坐标量级极其敏感,因为内部大量运算走的是单精度浮点,七位有效数字一旦被投影坐标的百万量级占满,小数点后精确到毫米的部分就没了。这一章处理三件事:界面语言、坐标基准、以及用内置几何体造一个可复现的测试对象。
2.1 中文界面是设置出来的,不是装出来的
CloudCompare 的界面语言走的是运行时翻译,不依赖安装包。菜单路径在 Display 下找 Language Translation(不同小版本位置可能挪到 Display settings 附近),切到简体中文后重启生效。这里有两个现实约束:一是翻译覆盖不完整,插件面板、部分对话框标题、控制台输出仍然是英文,报错信息尤其如此,所以中文界面下排查问题时仍然要认识英文关键词;二是翻译是社区维护的,版本升级后可能出现条目回退,某些新版界面里个别菜单会退化成英文,这是正常现象,不是安装出错。
建议的做法是先用英文界面跑通一遍完整流程,把菜单项的位置和英文名记住,再切中文。理由是网上能搜到的报错、参数说明、社区讨论几乎全是英文术语,中文界面里找不到对应词,反而增加排查成本。我一般保留英文界面,只在给同事演示时切中文。
2.2 Global shift settings:大坐标点云进门前的第一道闸
打开 File 菜单下的 Global shift settings,会看到三个核心量。它们的作用是:当实体的绝对坐标超过阈值时,软件自动从每个点上减去一个平移量,只把相对坐标送进计算,显示和导出时再加回去。
| 参数 | 作用 | 实践取值 |
|---|---|---|
| Max absolute coordinate | 单个坐标分量的允许上限,超过即触发平移提示 | 界面默认为万米量级,按项目坐标系量级确认 |
| Max entity diagonal | 实体包围盒对角线允许上限 | 与测区尺度匹配,跨市测区要放大 |
| Suggested shift | 软件按首个导入实体的包围盒中心算出的建议平移量 | 取整到 100 米或 1000 米,不要用零碎小数 |
操作顺序是这样的:先设好上面两个阈值,再导入第一个文件,弹出的对话框里选 Yes 应用建议 shift,并记下这个平移量的数值。之后同一测区的所有数据必须用同一个 shift,否则两片云在软件里看着重合,导出后却是错开的。这一点在多人协作时最容易出问题——A 同学按建议值导入,B 同学手动填了另一个整数,合并时就会出现整体错位,而且错得很有规律,看起来像配准算法失效。
导出环节要特别注意:勾选保存时是否把 shift 加回坐标。如果下游软件(建模、GIS、剖面出图)需要真实投影坐标,必须加回;如果只是拿回 CloudCompare 继续处理,保持 shift 一致更省事。这个选项在导出对话框里通常叫 "keep global shift" 或类似表述,不同版本措辞有差异,导出前扫一眼坐标数值量级就能确认——导出后坐标只有几百米,说明 shift 没加回去。
2.3 Primitive Factory:造一个可控的测试对象
新手最缺的不是功能,是知道"正确结果长什么样"。Primitive Factory 就是干这个的:生成平面、立方体、球体、圆柱、圆锥、圆环、碟形、坐标轴八类基本体,尺寸和初始精度都能编辑。
操作路径是打开 Primitive Factory,在左侧选图元类型,中部编辑尺寸参数,右侧设初始精度——这个精度指的是生成模型时三角面片的细分程度,数值越大面片越密、模型越圆滑,但文件也越大。点 Create 生成,可以连续造多个,Close 退出。生成的基本体默认沿 X、Y、Z 主轴对齐,需要摆到任意姿态就用 Edit 菜单下的 Apply Transformation 做刚性变换,输入 4×4 矩阵或欧拉角都行。
从模型采样点云是这一步的关键用途:选中生成的网格,进 Edit 菜单找 Mesh 下的 Sample points,设定采样点数或采样密度,就能得到一个几何形状已知、点分布可控的点云。拿它去练法线估计、练八叉树降采样、练 ICP 配准,你能立刻判断结果对不对——球面的法线应该全部指向球心或全部背离球心,平面点云的法线应该完全一致。这比拿真实数据试错高效得多,也是我在教新人时强制要求先做的一步。
2.4 保存与工程组织
File 下的 Save 保存的是整个工程的二进制文件,会连同数据库树(DB tree)里的所有实体、显示状态、标量域一起存下来,下次打开能直接接着干。Clone 和 Merge 要注意区别:Merge 合并多个实体时,点云合并后原始点云会被删除,网格合并则不改动原始网格、另外生成一个新的网格结构。做批量处理前先 Clone 一份留底,这是基本习惯——CloudCompare 的撤销栈不深,一次误操作的代价可能是重跑半小时。
3. 颜色、法线与八叉树:预处理三件套的参数与判读标准
预处理决定了后续配准和测量的可信度。颜色影响目视判读,法线影响渲染和基于法线的滤波、重建,八叉树决定大规模数据的处理速度。这三件事的顺序有讲究:先算八叉树(后续法线计算会用到空间索引),再算法线,颜色随时可调。
3.1 Colors 菜单:五种着色方式的适用边界
Edit 下的 Colors 子菜单提供了完整的颜色操作链,但真正日常用的是其中四个。
Set Unique 给整个实体刷一个纯色,用于把配准后的两片云区分开,一眼看出重叠区域。Colorize 的语义要特别注意:它把当前颜色与所选颜色做 RGB 逐通道相乘,红色乘绿色得到黑色,不是叠加也不是替换。我第一次用的时候以为是把云染成绿色,结果整片变黑,排查了半天。正确用法是拿它做衰减或遮罩,比如用浅灰去压暗整体亮度。
Levels 通过调整颜色直方图的输入输出区间来改对比度,适合把一片灰蒙蒙的扫描数据拉出层次。Height Ramp 按指定方向(通常是 Z 轴)生成线性、梯形或环形渐变,是出图时最常用的一种——按高程着色能直观暴露地形起伏和建筑立面。Convert to grey scale 直接把 RGB 压成灰度,后续做灰度共生矩阵或者简单目视检查时用。
还有三个容易被忽略但很有用的:Convert to Scalar Field 把 RGB 三个通道转成标量域,之后就能用标量域的滤波、直方图、色阶管理一整套工具处理颜色;Interpolate from another entity 把另一个实体的颜色插值到当前实体上,配准时用它把参考云的颜色迁移到待配准云;Clear 清空颜色域,注意清空后不能靠撤销完全恢复,重要数据先 Clone。
3.2 法线估计:邻域半径和方向一致性是两个独立问题
Normals 下的 Compute 会弹出一个对话框,核心参数两个:局部邻域半径(或邻域点数)和局部模型类型(平面、三角化、二次曲面)。
| 参数 | 含义 | 取值建议 |
|---|---|---|
| Local neighborhood radius | 参与拟合的邻域范围 | 取点间距的 3~10 倍;噪声大取大值 |
| Local model | 邻域内拟合用什么面 | 平坦面用平面;曲面用二次曲面;稀疏用三角化 |
| Orientation | 法线朝向参考 | 有明确视点选传感器方向;地表选 +Z |
邻域半径给太小,法线会被噪声带偏,出现方向杂乱的"刺猬";给太大,台阶边缘、建筑棱角处的法线会被两侧平面平均掉,边缘变糊。实用的判断方法是:拿一个已知平面(比如 Primitive Factory 生成的立方体某个面)试参数,调到该面法线方向完全一致为止,这个半径就是本批数据的下限。真实数据在此基础上放大 1.5~2 倍。
第二个问题是方向不一致。Compute 算出来的是无向法线,朝向是随机的,渲染时法线背对光源的点会变黑,一整片云看起来一半亮一半暗。解决靠 Normals > Orient Normals 下的两个算法:With Minimum Spanning Tree 用最小生成树把邻域法线朝向统一传播,适合闭合曲面和小规模数据,效果稳但慢;With Fast Marching 用快速行进法从种子点向外传播朝向,适合大规模、有明确视点的扫描数据。数据量过万点以上优先试后者。
算完之后还有几个转换值得记住:Convert to HSV 把法线方向映射成颜色,X、Y、Z 三个分量对应色相,用来目视检查朝向分布是否合理;Convert to Dip and Dip direction SFs 输出两个标量域,做地质产状分析时直接读走向和倾角;Export normals to SF(s) 把法线的三个分量分别写成标量域,方便后续做条件筛选。Normals > Invert 整体翻转朝向,只在确认全片一致反向时用,局部反向要靠重新 Orient。
3.3 八叉树:层级、体素尺寸和重采样是三件事
八叉树的原理不复杂:把包围盒不断八等分,直到每个体素内的点数低于阈值或达到指定层级,形成一个自适应的空间索引。CloudCompare 里 Octree > Compute 强制计算指定实体的八叉树,大部分操作(法线、距离、分割)会自动构建,所以手动计算主要用于两步:一是提前建好索引加速后续批处理,二是用 Octree > Resample 做重采样。
层级和体素尺寸是换算关系:体素边长约等于包围盒对角线除以 2 的层级次方。所以层级每加一,体素缩小一半,点数和内存占用大致翻倍。实际调参时反过来推更快——先想清楚需要的体素边长(比如做 2 cm 精度的偏差分析,体素不能粗于 2 cm),再反算层级,看界面预估的点数是否可接受。
Octree Resample 的语义要搞清:每个最小体素内的所有点用它们的质心替代,原始点云被替换掉。这和 Edit 下的 Subsample 不一样——Subsample 支持随机、空间、八叉树三种方式,产出的是一份保持原始标量、颜色、法线属性的子样本,原云保留。要留底就用 Subsample,只是为了让后续计算跑得快、不介意丢原始精度才用 Resample。降采样的间距选择和八叉树体素一致,采太狠会把细部特征磨平,采太轻又起不到加速作用,一般取目标分析精度的 1/2 到 1/3。
4. 配准与偏差分析:从包围盒粗配到 ICP 精配再到 C2C 云图
配准是 CloudCompare 使用频率最高、也最容易出错的环节。Tools 菜单下的 Registration 提供三个层级的方法,对应从完全不知道相对位置到已经很接近的三种起始状态。
4.1 三级配准路线:中心对齐、点对选取、ICP 精配
第一级是 Registration > Match bounding-box centers,把选中实体的包围盒中心挪到同一点。它只处理平移,不处理旋转和尺度,精度很差,但对"两片云相隔几十米、根本不在一个视窗里"的情况是必要的第一步,否则后面的 ICP 会在错误的初始位置附近收敛到局部极小。同时可用的还有 Match scales,处理两片云存在已知缩放关系的情况。
第二级是 Align (point pairs picking),在两片云上手动挑至少三对对应点,软件解算刚体变换。这是半自动方法,精度取决于点挑得准不准,但非常稳健,适合建筑角点、标志物明显的场景。操作顺序有个细节:选点时先选待移动的那片云上的点,最后选参考云上的点,软件默认把最后选中的实体当作参考。顺序反了会导致参考云被移动,现场数据里这个错误很难立刻发现——因为两片云确实对齐了,只是坐标系变了。
第三级是 Fine registration (ICP),前提条件写得很清楚:两片云大体上已经重合,且表现为同样的对象或至少有同样的形状。不满足这个前提就上 ICP,结果一定是转了几百轮之后残差不动。
4.2 ICP 的四个参数与失败判读
Fine registration 对话框的核心参数如下表。
| 参数 | 含义 | 调整策略 |
|---|---|---|
| Random sampling limit | 每轮随机抽取参与计算的点数上限 | 大云先设 50000 左右提速,最终精配准调大 |
| Final overlap | 假定两片云最终的重叠比例 | 有先验时填实际值,能显著提升收敛质量 |
| Adjust scale | 是否允许缩放 | 同设备同测站一律关闭,跨源数据才考虑 |
| Max iterations / error difference | 收敛判据 | 默认值够用,卡住时先看残差曲线再改 |
判断 ICP 是否真的收敛,不能只看最终 RMS 数值大小,要看残差随迭代下降的趋势:正常情况是前二十轮快速下降,之后缓慢收敛到平台。如果残差从第一轮就在原地震荡,说明初始错位太大,回到粗配准;如果残差稳定下降到某个常数不再变化但数值仍然偏大,多半是重叠率设错了——把 Final overlap 从默认值改小,让算法忽略不重叠区域,往往能继续下降一大截。还有一种是两片云来自不同设备、点密度差了一个数量级,ICP 会被密集那侧的噪声带偏,这时先降采样到相近密度再配。
旋转约束那几个勾选框(锁定绕 X/Y/Z 轴旋转)在有先验时非常有用,比如两站扫描的仪器都调平过,垂直轴方向已知,锁住绕水平轴的旋转能防止算法在错误自由度上跑飞。这是熟手和新手在用同一套算法时结果差异最大的地方。
4.3 距离计算:把配准残差变成可视化云图
配准做完了,量化误差靠 Tools 菜单下的 Distances。Cloud/Cloud dist. 计算两片云之间的距离,Cloud/Mesh dist. 计算点云到网格的距离,Closest Point Set 则直接输出最近点集合,可以当作配准结果另存。
Cloud/Cloud distance 的参数里,Local modeling strategy 决定局部距离怎么估:NONE 就是纯粹的点到点最近距离,速度快但对点密度差异敏感;Least Square Plane 在邻域内拟合平面再算点到面距离,平滑但对曲率大的地方有偏;2.5D Triangulation 适合近似单值曲面;Quadric 拟合二次曲面,精度最高也最慢。做竣工对比、形变分析这类对绝对数值有要求的场景,我一般用 Least Square Plane 并把 Local model max size 设成分析特征尺度的两倍左右。
Octree level 决定搜索最近点的粒度,自动值通常够用,追求速度时手动调低会带来搜索误差。Max distance 是截断距离,超过这个值的点不参与计算,直接设成关心的最大偏差量级,能省大量时间也能避免极端离群值污染色阶。算出来的结果是标量域,接着用 Scalar fields > Show histogram 看分布形态,用 Compute statistical parameters 拟合高斯或威布尔分布拿均值和标准差,最后用 Color Scales Manager 调色阶出图。
这里有个容易被忽略的选项:Signed distance。勾上之后距离带符号,正值和负值用不同颜色表示,能直接看出哪一侧凸出、哪一侧凹陷。做形变监测时这个信息比绝对距离有用得多。
5. 避坑与排查:五条在项目现场反复出现的翻车记录
参数调对了但结果不对,通常不是算法问题,是输入或操作顺序的问题。下面五条是反复出现的,按现象、原因、解决三段式记。
5.1 导入、显示与坐标类
现象一:文件打开成功,视窗里只有一个点,或者一片密密麻麻的黑块。原因是坐标量级超出单精度浮点的有效范围,或者 Global shift 没被应用而数据本身又带着百万量级的投影坐标——所有点被压进了同一个浮点格子里,看起来就剩一个。解决是把数据关掉,先在 Global shift settings 里确认阈值,重新导入并在弹窗里明确应用建议 shift,导入后立刻看点的坐标数值是不是降到了几百到几千米量级。如果原始文件本身坐标就异常(比如已经被人为做过截断),只能用文本方式抽查几行头部数据确认。
现象二:导出后点云颜色全没了,只剩一片灰。原因是把颜色存进了标量域而不是 RGB 通道,或者导出格式本身不支持颜色字段而导出时没有勾选。解决顺序是先 Scalar fields 菜单里看有没有活动的标量域,用 Convert to RGB 转成颜色域,再在导出对话框里确认颜色、法线、标量域三项的勾选状态。ASCII 格式导出尤其容易丢字段,导出前拿一个几百点的小文件试一次,比导完几十万点再发现要划算。
现象三:几百万点的文件一拖动就卡死,旋转视角要等好几秒。原因是显示点数上限这个设置被放得太宽,软件每帧都在重绘全部点。解决是进 Display settings 调整显示的点数上限(通常有最大显示点数这一项),把它压到几十万级别,处理精度不受影响,因为计算仍然用全量数据。另外关掉不需要的叠加显示——色阶、标签、包围盒在旋转时会一起重算,四个都开着的话流畅度掉得很明显。
5.2 法线、网格与配准类
现象四:算完法线之后点云一半亮一半暗,旋转视角时明暗跟着翻转。原因是法线朝向不一致,Compute 只负责算方向不负责统一朝向。解决是紧接着跑 Orient Normals:闭合小数据用 Minimum Spanning Tree,大规模扫描数据用 Fast Marching。如果统一之后仍然局部反黑,说明该区域点密度太低、邻域内点数不足以支撑方向传播,先做一次空间降采样提高局部密度,或者把邻域半径放大再重算。
现象五:Delaunay 2.5D 三角剖分出来一张揉皱的纸,网格互相穿插、面片折叠。原因是 2.5D 剖分假设点云在投影方向上是单值曲面,而实际数据里存在立面、树木、双层面结构,投影到同一平面后出现多个 Z 值。解决是先做切片或分割,把垂直结构拆出来单独处理;或者改用 best fit plane 版本,让剖分平面贴合主平面方向;再或者换用 Poisson 重建这类不依赖单值假设的算法。判断标准很简单:剖分前用 Height Ramp 按 Z 着色看一眼,如果有大面积的同一 XY 位置多色叠加,就不该直接上 2.5D。
现象六:ICP 迭代到最后,两片云肉眼看着重合,但偏差图的均方根有几十厘米。原因是局部收敛到了错误的位置,或者两片云之间的真实重叠区远小于默认假设。解决是回到 Match bounding-box centers 重新粗配,手动挑三对点用 Align 给一个可靠初值;ICP 时把 Final overlap 设成估计的实际重叠比例(盘点数据里经常只有三四成),并开旋转约束锁住不该动的自由度。配完必须用 Cloud/Cloud distance 出一张偏差图核对,只看控制台输出的 RMS 数值是不够的。
6. 分割拟合与插件流水线:一套能重复跑的验证动作
从配准到出报告之间还差两步:把大场景切成关心的局部,以及从局部里拟合出可量化的几何要素。分割用 Tools 菜单下的 Segmentation > Cross Section,定义一个带厚度和方向的裁剪框,沿指定轴反复切片,滑动厚度还能顺便拿到剖面轮廓;Label Connected Components 设一个最小间距,把点云拆成互不相连的团块,做单株、单构件分离时很顺手,间距设大了会把相邻两个构件粘成一个,设小了会把一个构件拆成碎片,通常取构件间净距的一半。
拟合走 Tools 菜单下的 Fit,平面拟合输出 RMS、法向、地质上的倾角和倾向,球拟合输出球心和半径,2D Polygon 拟合可以拿来做平面点云的边界提取。拟合结果进 Batch export 里的 Export plane info 能直接导出成表格,比手工抄控制台快得多。要复核拟合是否可靠,把 RMS 和点云的局部厚度对比一下——RMS 超过厚度的一半,说明这个面根本不平面,别拿去做尺寸量算。
插件里 qPCL 是使用率最高的一个,它封装了快速全局配准、法线和曲率计算、离群点去除、移动最小二乘平滑几个接口,快速全局配准能在完全没有初值的情况下给一个可用的起始姿态,比手动挑点快很多。qCSF 做地面点和非地面点分离,qM3C2 做两期点云的有向稳健距离,qCANUPO 做点云分类。插件按需启用,开太多会拖慢启动,用不上的在插件管理里关掉。
大批量重复任务建议直接走命令行模式,把参数固化成脚本,省掉每次点菜单的时间:
# 无界面批量处理:加载两片云,统一降采样到 2cm 间距,按 LAS 导出 CloudCompare -SILENT \ -O "site_a.las" \ -O "site_b.las" \ -C_EXPORT_FMT LAS \ -SS SPATIAL 0.02 \ -SAVE_CLOUDS-SILENT关掉界面,适合挂在批处理里跑;-O逐次加载文件,顺序与脚本里的顺序一致;-C_EXPORT_FMT指定后续所有导出使用的格式;-SS SPATIAL 0.02对所有选中实体做空间降采样,后面的数字是体素间距,单位跟随数据本身;-SAVE_CLOUDS把结果落盘。注意命令行的降采样会直接替换内存中的点云,原始文件不受影响,但脚本里如果还要做别的操作,得把顺序排好,降采样放最后。
真正让我改掉坏习惯的是一次返工:配准和距离都算完了,出图前顺手关掉了工程文件,第二天打开发现颜色域被清过、色阶是默认的,所有图得重出一遍。从那以后每次开新项目,我都强制走一遍「Clone 留底、Save 存二进制工程、Export 出一份带完整字段的 LAS」三个动作,花不了两分钟,但把后悔药提前备好了。
希望帮到你。
本文还有配套的精品资源,点击获取