CloudCompare点云处理:从Global shift到ICP配准
简介:面向点云处理初学者与进阶用户的 CloudCompare 中文教程,围绕这款三维点云处理与分析工具,帮助读者解决界面陌生、功能入口分散、处理流程不连贯的问题,适用于地质、建筑、测绘与工程等三维扫描场景。压缩包内为 1 个 PDF 文件,约 4.95MB,内容按模块组织:基本操作、显示与保存设置,Primitive Factory 几何体创建与采样,颜色渲染、法线估计与八叉树,Delaunay 剖分与网格操作,以及 Tools 中的去噪、配准、降采样与插件扩展。汉化方法、ICP 配准、cloud distance、merge 等技巧均配图文说明,方便随用随查。内容兼顾原理与截图示例,读者可据此走通点云导入、预处理、分析与后处理全流程,并理解八叉树、法线精细化等参数作用。目前已有 1469 人学习,适合希望系统掌握该工具的中文用户收藏备查。
1. 点云一进软件就“飘走”:先改 Global shift,再谈任何算法
从某高校实验室拷来的那份 CloudCompare 课程资源,目录里躺着 PPT、汉化说明和一堆菜单截图,新人照着从 File 点到 Plugins,一圈下来还是不知道从哪下手。真正让人卡住的往往不是功能太多,而是打开文件那三秒:带投影坐标的 LAS 一进来,点云直接飞出视图,鼠标滚轮转到手酸也找不回来;或者两个测站的点云看着重叠,一配准就飞。这类问题九成出在 File → Global shift settings 这一栏,先把它调对,后面 Octree、ICP、C2C 才有意义。这份资源的价值不在截图多,而在于它把 File、Edit、Tools、Display、Plugins 五个菜单按“数据流”串了一遍,适合刚接手点云项目、手上有一份实测数据却不知道先动哪的人。
2. 先造一个“已知答案”的点云:Primitive Factory、颜色与法线这三步
拿真实数据练手最大的问题是:你不知道结果对不对。平面到底平不平、法线朝里还是朝外、颜色渐变有没有被拉伸,全凭感觉。所以我在带人上手时,第一步永远是用 Primitive Factory 造一个几何参数完全已知的模型,再从模型上采样点云,拿它当试验台。这一章把“造数据 → 上色 → 算法线”这条链路走完,后面所有滤波、配准、距离计算的调试,都可以回到这个试验台上验证。
2.1 Primitive Factory 与采样:把参数捏在自己手里
Primitive Factory 在 File 菜单下,打开后左边是图元类型(平面、立方体、球体、圆柱、圆锥、圆环、碟形、坐标轴),右边是尺寸参数和“初始精度”。初始精度这个字段决定生成模型的面片数量,数值越大越精细,但对后面采样点云的密度影响很直接——很多教程一句“设置初始精度”就带过,实操时你会发现精度给低了,采样出来的点云在曲面上明显分层,做曲率计算全是噪点。
常见做法是:先用默认精度生成,记下三角形数量,再去 Mesh → Measure surface 看总面积,估算一下你要的点间距,反推精度。生成后的图元可以用 Edit → Apply Transformation 做刚性变换,把它摆到任意位置——这一步很关键,因为默认图元是沿 X、Y、Z 主轴对齐的,你要测倾斜面的法线,就得先把它转斜。
从模型采样点云走 Edit → Mesh → Sample points,参数只有两个:采样点总数和采样方式。这里有个容易忽略的点——采样得到的新点云默认不继承原网格的法线,如果你后面要做法线相关操作,记得勾选相关选项或单独再算一遍。
下面这段脚本用 Python 造一个带噪声的平面点云,格式存成 PLY,方便你在没有真实数据时先跑通流程:
import numpy as np # 造一个 20m x 20m 的平面,格点间距 0.05m,模拟激光扫描的均匀采样 step = 0.05 xs = np.arange(0, 20, step) ys = np.arange(0, 20, step) X, Y = np.meshgrid(xs, ys) # 平面方程 z = 0.02*x + 0.01*y,故意给一点坡度,方便后面验证法线方向 Z = 0.02 * X + 0.01 * Y # 叠加高斯噪声,模拟测距误差,σ 取 3mm rng = np.random.default_rng(42) Z_noisy = Z + rng.normal(0, 0.003, Z.shape) pts = np.column_stack([X.ravel(), Y.ravel(), Z_noisy.ravel()]) # 手写 PLY 头,避免依赖 open3d / plyfile 这类第三方包 header = ( "ply\n" "format ascii 1.0\n" f"element vertex {len(pts)}\n" "property float x\nproperty float y\nproperty float z\n" "end_header\n" ) with open("test_plane.ply", "w") as f: f.write(header) for p in pts: f.write(f"{p[0]:.4f} {p[1]:.4f} {p[2]:.4f}\n") print("points:", len(pts))逻辑说明:网格化生成 XY 平面上的规则点,Z 由平面方程给出,再叠加 3mm 标准差的高斯噪声——这个量级接近中短程地面激光扫描的测距精度。手写 PLY 头是为了免装依赖,CloudCompare 对 ascii PLY 的兼容性很好。参数上,step控制点间距,它直接决定后面八叉树体素大小的合理取值;噪声 σ 控制平面拟合 RMS 的量级,你后面用 Fit → Plane 查 RMS 时,结果应该落在 3mm 附近,对不上就说明哪一步出了问题。这就是“已知答案”的意义。
提示:如果你拿到的实测数据点数在千万级以上,先在 CloudCompare 里用 Edit → Subsample 降到几百万再操作,界面响应会顺很多,别一上来就拿全量数据做 ICP。
2.2 颜色渲染:五种方式对应五种完全不同的用途
Edit → Colors 下面那一串命令名字很像,实际用途差得远,误用会得到看起来“有颜色”但完全没信息量的结果。
Set Unique 是给整个实体刷一个纯色,用途只有一个:在多个点云叠在一起时区分谁是谁。Colorize 是把当前颜色乘上你选的颜色,红乘绿得黑——这个操作不可逆,刷之前想清楚,我见过有人把整份彩色点云刷成黑色还找不到撤销。Levels 是调色阶柱状图,本质是 RGB 通道的对比度拉伸,适合扫描件颜色发灰、需要提对比度的场景。Height Ramp 按某一维(通常是 Z)做线性、梯形或环形渐变,是快速看地形起伏最省事的办法。Convert to grey scale 转灰度,之后再用 Convert to Scalar Field 把灰度变成一个标量域,就能拿去做滤波、分割、统计——这是“颜色 → 数值”的关键一跳,很多人卡在只有颜色没有数值,没法参与运算。
我一般的工作顺序是:先 Set Unique 确认点云有没有明显错层,再 Height Ramp 看整体形态,需要定量分析时才走 Convert to Scalar Field 这条路。Interpolate from another entity 用于给低密度点云补色,采样自另一份带色点云;Enhance with intensities 是把强度信息叠加到颜色上,适合有回波强度的激光数据。
注意:Convert to Scalar Field 生成的标量域在实体被合并(Merge)之后不会自动保留,合并前先确认哪些属性是你要带走的。
2.3 法线三步走:Compute、Orient、Convert 不是同一件事
法线是 CloudCompare 里翻车率最高的环节,原因是大多数人把“算出来”当成“算对了”。实际流程是三件事:Compute 只负责给每个点估计一个法线方向和曲率;Orient 负责把这些法线的朝向统一(朝同一侧);Convert 负责把法线转成可运算的标量域或颜色。
Compute 的参数里最要紧的是邻域半径或最近邻点数。半径给小了,法线随噪声乱摆;给大了,曲面拐角被抹平。经验值是取点间距的 3~8 倍,先用 5 倍试,看结果再调。计算完之后你会看到点云变“黑”了一块,这是法线朝后的点在光照下的表现——不是数据坏了,是没做 Orient。
Orient Normals 有两个常用方法:With Minimum Spanning Tree 和 With Fast Marching。前者对闭合、结构完整的点云更稳,后者在开放曲面、法线朝向需要沿某个种子点扩散时更好用。用法上都要先给一个参考方向或者种子点,随便点一个大致朝外的点当种子,效果通常比默认好。这里没什么玄学,就是种子选偏了整片法线跟着偏。
Convert to 有三个出口:HSV 把法线方向映射成颜色,肉眼检查朝向最直观;Dip and Dip direction 输出两个标量域,做地质产状分析时用;Export normals to SF(s) 把 XYZ 三个分量各存一个标量域,方便做筛选。我通常的做法是算完先 Convert to HSV 看一眼颜色是否连贯,有突变斑块就说明邻域参数给错了或者点云本身有裂缝。
3. 八叉树、减点与网格化:内存账本要先算清楚
点云处理到一定规模,瓶颈从来不是算法慢,是内存先炸。八叉树是 CloudCompare 里几乎所有加速结构的底座——邻域搜索、重采样、距离计算、法线估计,底下都在建它。理解它的“体素”概念,比记住菜单在哪有用得多。这一章把八叉树、三种减点方式和 Delaunay 网格化放在一起讲,因为它们共用同一套空间尺度参数,参数给一次,三处都受影响。
3.1 八叉树在 CC 里到底管什么
八叉树的原理不复杂:把整个包围盒沿三个轴各切一刀,分成八个子体素,递归下去直到每个体素里的点数低于阈值或者体素尺寸小于下限。CloudCompare 的 Octree → Compute 是“强制”计算,你平时不点它,很多操作也会在后台自动建——区别在于自动建的参数是软件猜的,手动建可以自己定。
手动设的参数主要是最大体素数和最小体素数,或者直接指定八叉树层级。层级每加一级,体素数量乘八,这是指数增长,层级从 10 加到 12,体素数量翻四倍,内存和耗时会明显不一样。我在 3000 万点的实测地形数据上试过,层级给到 11 的时候界面还能拖动,给到 13 就开始卡。
Octree → Resample 是用每个最小体素的质心替代体素内所有点。注意这个操作会改变点的位置,不是简单的抽稀——原来的点被“平均”掉了,细小的特征(比如一根电缆、一个棱角)会消失。需要保特征的时候别用它,用 Subsample 里的随机或空间采样更稳妥。
八叉树可视化在 Display 里能开,效果是把体素框画出来,用来确认层级选得合不合适。层级太粗,框比房子还大;太细,满屏都是线什么都看不清。这个工具主要是给你一个直观的尺度感,实际操作中我更多是靠点间距反推。
3.2 Subsample、Octree Resample、SOR filter:三种减点各管一段
这三个功能经常被混用,但目标完全不同,用错了不是效果差一点,是数据性质变了。
| 方式 | 入口 | 作用 | 点位置是否改变 | 适用场景 |
|---|---|---|---|---|
| Subsample(随机/空间/八叉树) | Edit → Subsample | 减少点数,保留原始点 | 否 | 降内存、做配准前预处理 |
| Octree Resample | Edit → Octree → Resample | 体素质心替代体素内点 | 是 | 均匀化密度、做栅格化前的准备 |
| SOR filter | Edit → Clean → SOR filter | 按统计离群度删点 | 否 | 去飞点、去噪 |
| Noise filter | Edit → Clean → Noise filter | 低通平滑 | 是 | 平滑曲面噪声 |
Subsample 里的“空间”模式按最小点间距抽稀,这个参数和八叉树体素尺寸是一个量级的概念,但它是“保证任意两点间距不小于 d”的贪心抽稀,结果在空间上比体素质心均匀得多,也更保特征。我在做点云配准前一般用这个,把两片云的密度拉到接近,ICP 的收敛会稳。
SOR filter 的参数是两个:邻域点数 k 和标准差倍数 n。判定规则是,如果某点到它 k 个邻居的平均距离超过全局均值加 n 倍标准差,就删掉。k 一般给 6~20,n 给 1.0~2.0,n 越小删得越狠。这个操作对飞点非常有效,但对本身就有稀疏区域的数据(比如被遮挡的墙角)容易误删,删完记得对比一下点数变化比例,掉超过 5% 就要警惕。
Noise filter 是低通,会移动点的位置,签合同上写“原始坐标不可变”的项目里别用,或者用完单独另存一份。
提示:任何会改变点位置的操作(Resample、Noise filter、Smooth),做完都建议 Clone 一份原始实体对比,CloudCompare 的属性对话框里能直接看点数,但看不出点被移动了多少。
3.3 Delaunay 2.5D 的两个平面选项,以及网格后处理
Mesh → Delaunay 2.5D 有两个入口:XY plane 和 best fit plane。前者是把点投影到 XY 平面做三角剖分,后者的投影面由点云自身拟合出来。这个区别对倾斜扫描的数据是致命的:一面墙的点云,用 XY plane 剖分,得到的是墙在水平面上的“影子”,三角形全部拉得极长;用 best fit plane,才能得到贴在墙面上的网格。
判断该用哪个的办法很简单:先 Fit → Plane 拟合一下,看平面的法向和 Z 轴夹角。夹角小于 10 度,XY plane 够用;超过 30 度,必须用 best fit plane;中间地带两个都试,看哪个三角形形态更均匀。
网格出来之后常见的后续操作:Smooth (Laplacian) 做平滑,参数是迭代次数,次数多了会收缩体积,做体积测量前别用;Subdivide 递归细分三角形,直到边长小于指定值,适合把粗网格加密后做纹理映射;Measure surface 输出总面积和平均三角形面积,前者用来核对,后者用来判断网格质量——平均面积异常大,说明有长条形三角形,剖分面选错了。
Convert texture/material to RGB 是把网格的贴图信息转成逐点 RGB 字段,转完之后可以只保留点云不要网格,这条路在做“带颜色的稠密点云”时很实用。Flag vertices 会标出边界点和非流形点,检查网格是否闭合(做体积计算的前提)就靠它,输出里 1 代表边界、2 代表非流形,闭合网格应该全是 0。
4. 配准与距离:从粗配准到 ICP,再到误差怎么读
配准是整个流程里最容易“看起来成了其实没成”的一步。视图里两片云叠得挺齐,一算距离 RMS 是 8 厘米,回头查发现是 ICP 收敛到了局部最优。这一章把粗配准的三条路、ICP 的前置条件和参数、以及三种距离计算方式的适用边界讲清楚。配准做对了,后面的偏差分析才有意义;配准错了,后面所有数字都是精致的垃圾。
4.1 粗配准的三条路径,选错路径后面全白费
Tools → Registration 下面有三条粗配准路径,适用条件完全不同。
Match bounding-box centers 是把所选实体的包围盒中心对齐。它快、不需要人工,但只在两片云“形状相似、尺度相同、只是位置不同”时才有意义。两个测站扫同一栋楼的不同面,包围盒形状就不一样,硬对齐会把点云推到更远的地方。这个方法我一般只用在“同一物体的两次扫描、已知没有旋转”的场景。
Align (point pairs picking) 是手动拾取至少三个对应点。三个点不能共线,最好分散在点云的三个角落。拾取时会弹出一个对话框,左边点一片云、右边点另一片云的对应位置,拾完点 Align 出变换矩阵。这个方法稳,缺点是人工成本高,而且拾点精度直接影响初值。我的习惯是拾 4~6 个点,多出来的点用于检查残差,如果某对点的残差明显大于其他,说明点错了,删掉重拾。
New alignment tool 是半自动的,它会先在两片云里各找一批特征点,让你确认匹配关系,再算变换。相比纯手动,它在纹理弱、特征不明显的点云上更有优势,但确认环节还是要人看,别一路点确定。
粗配准的目标不是“对齐”,是把两片云拉到 ICP 的收敛半径以内。经验上,粗配准后两片云的重叠区域偏差应该在同一量级(比如都在半米以内),如果差着几米,ICP 基本必翻车。
4.2 ICP 的前置条件与那几个滑块
Fine registration (ICP) 有两个硬前提,原文里写得很清楚:两片云大体上相融;表现为同样的对象或至少有同样的形状。这两句话翻译成操作就是:粗配准已经做到大致重合,且两片云扫的确实是同一块东西。
参数上主要是这几项:参考实体(reference)和数据实体(data)的指定,谁不动谁动要想清楚,因为最终变换矩阵是作用在 data 上的;最大迭代次数,默认值一般够用,收敛慢的时候可以加到 100 以上;最终重叠度(final overlap),这个值直接决定用哪些点参与误差计算,给 100% 意味着全部点都要参与,对有遮挡的实测数据不现实,一般给 70%~90%;调整尺度(adjust scale)在两次扫描尺度一致时一定要关掉,开着会让 ICP 顺手把尺度也改了,得到一个“更优”但物理上错误的结果。
判断 ICP 是否收敛,看控制台输出的最终 RMS。但这个数要辩证看:重叠度设得越低,RMS 越好看,因为不重合的部分被排除了。我一般的做法是固定重叠度跑一次,再把重叠度调高跑一次,如果两次的变换矩阵差异很小,说明配准是稳的;差得多,说明数据本身重叠不够,得回去补扫或者换粗配准方式。
命令行做 ICP 的写法(参数名以你本地版本的-HELP输出为准):
# -SILENT 关掉交互,-O 依次打开两个文件,第一个是参考,第二个是待配准 # -ICP 触发精配准,-SAVE_CLOUDS 保存结果,输出格式由 -C_EXPORT_FMT 指定 CloudCompare -SILENT \ -C_EXPORT_FMT PLY \ -O ref.ply \ -O moving.ply \ -ICP \ -SAVE_CLOUDS逻辑说明:命令行模式下 CloudCompare 不开界面,所有操作按参数顺序执行。两个-O的先后顺序决定谁是参考谁是被变换对象,这一点和 GUI 里的行为一致,但命令行没有对话框提醒你,顺序写反了结果就是反的。-C_EXPORT_FMT要写在保存之前,否则按默认格式输出。批处理脚本里跑之前,先在 GUI 里把参数试好,再把命令抄过来,能省很多调试时间。
4.3 C2C、C2M、M3C2:三种距离各自的适用面
配准完成之后要评估偏差,Tools → Distances 下有三个主要选项。
Cloud/Cloud dist (C2C) 算的是点到点的最近距离,输出一个标量域。它的优点是快、直观,缺点是受点密度影响大——两片云密度不同的时候,稀疏那片算出来的距离会系统偏大。所以做 C2C 之前,务必先把两片云抽稀到接近的密度,否则你测的是密度差不是形变。
Cloud/Mesh dist (C2M) 算点到面的距离,把其中一片云网格化之后用。相比 C2C,它不受点密度影响,测的是真实几何距离,做墙体平整度、构件变形这类分析时更靠谱。代价是要先有一个质量过得去的网格。
M3C2 是插件(Plugins → qM3C2),算的是沿法线方向的有向距离,还会给出置信区间。它适合做时序变化检测——两次扫描之间哪里凸了、哪里凹了,方向和量值都清楚。参数主要是法线尺度、投影尺度和最小点云密度,三个值都和点间距挂钩,先用点间距的 5~10 倍试。M3C2 的置信区间很重要,变化量小于置信区间的区域不要当真实变化报出去。
注意:距离计算的标量域一定要用 Color Scales Manager 调色阶,默认色阶可能把你的有效变化范围压成一条细带,看着像“全都很接近”,实际差异不小。
5. 避坑与排查:五条踩过的记录
这一章的五条,每一条都在实际项目里浪费过半天以上。写出来不是为了吓人,是让你遇到时能三分钟内定位,而不是从头怀疑人生。
5.1 点云一片漆黑,法线算完反而更黑
现象:Compute 法线之后,点云某些区域变黑,转视角也不恢复。
原因:法线朝向不统一,背向光源的点在渲染时就是黑的。这不是渲染 bug,是法线本身没做 Orient。
解决:先 Normals → Orient Normals → With Minimum Spanning Tree,给一个种子点;如果点云是开放曲面,改用 With Fast Marching。另一种可能是有部分点的法线是 NaN(邻域内点数不足),这种情况下把 Compute 的邻域半径调大,或者先做一次 Subsample 保证密度均匀再算。判断方法:Convert to HSV,颜色出现明显分区就是朝向问题,颜色杂乱无章就是邻域参数问题。
5.2 打开 LAS 后点云消失,坐标数值大得吓人
现象:文件打开成功,视图里什么都没有,双击实体看属性,坐标是几十万、几百万的量级。
原因:数据带投影坐标(比如高斯投影的东坐标),CloudCompare 的视图是以原点为中心的,几百万的坐标直接把点云推出可视范围。另外浮点精度在这种量级下也不够,点与点之间的细微差别会被吞掉。
解决:File → Global shift settings 里设一个平移量,通常取坐标的整数部分(比如把 X 的 500000 减掉),让点云回到原点附近。这个平移量会被记录在实体属性里,导出时可以选择是否加回去,别在导出环节忘了这一步,否则成果坐标全错。经验上,坐标绝对值超过 10000 就该考虑做 shift。
5.3 汉化之后菜单对不上教程,越看越乱
现象:按教程找“工具 → 配准”,自己界面上是“Tools → Registration”,或者反过来,中文版某个词翻译得和教程里的叫法不一样。
原因:汉化是通过 Language Translation 加载翻译文件实现的,不同版本的翻译覆盖度不一样,有些词条没翻译就显示英文,有些翻译用词和通用叫法有出入。
解决:学习和查资料阶段建议用英文界面,社区里的教程、参数名、报错信息基本都是英文,对着中文界面搜索命中率低。真要汉化,走 Display → Language Translation 选简体中文,翻译不全的部分会保留英文,属于正常现象。切换语言后如果界面错乱,用 Display → Reset all GUI elements 恢复默认布局。
5.4 保存的工程再打开,标量域和法线全没了
现象:Save 之后重新打开,点云还在,但之前算的颜色、标量域、法线消失。
原因:CloudCompare 的 Save 保存的是当前工作区的实体,实体上的属性(标量域、法线、颜色)是否保留取决于保存格式。BIN 格式是原生格式,能完整保留所有属性;PLY、LAS 这些交换格式只保留各自支持的字段,PLY 能存法线和颜色但不一定存所有标量域,LAS 的字段更受限。
解决:中间过程一律存 BIN,交付成果再按客户要求的格式导出。存 BIN 的时候注意文件体积会大不少,但换来的是可以随时回到任意中间状态。另一个容易忽略的点:Merge 之后的实体如果还想保留各原始实体的标量域,合并前先确认属性名不冲突,冲突的话 CloudCompare 会覆盖。
5.5 插件列表里少了一大半,qPCL、qC2C 找不到
现象:Plugins 菜单下只有寥寥几个,教程里提到的 qPCL、qM3C2、qCSF 都没有。
原因:CloudCompare 的插件分两类,一类随主程序编译进去,一类是独立的动态库文件,需要单独下载放到程序目录下的 plugins 文件夹里。另外部分插件依赖第三方库(比如 qPCL 依赖 PCL),安装包没打包就会缺失。
解决:先去插件目录确认文件在不在,在的话检查版本是否匹配主程序版本,不匹配会静默加载失败。加载失败的信息一般在 Console 里能看到,别只看界面。命令行模式下用-PLUGIN相关参数可以列出可用插件,比在菜单里数快。
6. 批处理与可复现:把一次操作变成一条命令
GUI 点一遍能出结果,点十遍就开始出错——这是我做了几个测站对比之后的真实体会。CloudCompare 的命令行模式能把“打开、降采样、配准、算距离、导出”这一串固化成脚本,第二天换一份数据重跑,结果可比。下面这条链路是我现在做批处理的默认骨架,改数据路径就能用。
6.1 一条命令串起降采样、配准与距离
#!/usr/bin/env bash set -e # 输入:两期扫描的点云,输出:带 C2C 距离标量域的结果 REF="ref.ply" MOV="moving.ply" CloudCompare -SILENT \ -C_EXPORT_FMT PLY \ -O "$REF" \ -SS SPATIAL 0.02 \ -O "$MOV" \ -SS SPATIAL 0.02 \ -ICP \ -C2C_DIST \ -SAVE_CLOUDS逻辑说明:-SS SPATIAL 0.02是空间抽稀,0.02 表示最小点间距 2 厘米,两片云用同一个值抽稀,保证密度一致——这一步是 C2C 结果可信的前提。-ICP在前、-C2C_DIST在后,顺序不能反,距离必须在配准之后算。-SAVE_CLOUDS会把所有实体连同新生成的标量域一起写盘,文件名自动加后缀。
参数上,抽稀间距取原始点间距的 2~4 倍比较合适,太小起不到降内存的作用,太大细节没了。ICP 的默认参数在命令行下不能像 GUI 那样逐个调,需要精细控制的话,先 GUI 调好再抄命令。
6.2 用标量域做质检:把“看着差不多”变成数字
批处理跑完,最忌讳的是打开结果看一眼颜色就交差。我一般的做法是导出标量域的统计参数:Edit → Scalar fields → Compute statistical parameters,看 RMS、标准差、最大最小值。这几个数要和项目精度要求对得上,对不上就回去查抽稀间距、配准重叠度、参考数据的坐标基准。
| 检查项 | 命令/入口 | 合格判据(示例) |
|---|---|---|
| 点数变化比 | 属性面板 | 抽稀后保留 30%~60% |
| 配准 RMS | ICP 控制台输出 | 小于点间距的 2 倍 |
| 距离标量域 RMS | Compute statistical parameters | 符合项目精度指标 |
| 网格闭合性 | Flag vertices | 无非流形点(值 2) |
这张表我一般贴在项目文档里,每次跑完逐项填,填不满就不往下走。
下面是一些我在长期使用后固定下来的习惯:任何要交付的数据,导出前一定先在 BIN 里存一份中间状态,后悔药只有这一颗;任何涉及坐标的操作,做完立刻看属性面板里的坐标范围,数值不对马上停;任何标量域,算完先 Show histogram,分布有明显双峰或者长尾,说明数据里混进了不该有的东西。从那以后我每次接新数据,都会先跑一遍这个最短链路——造测试点云、算法线、抽稀、配准、算距离、看统计——把工具的脾性摸一遍再动真数据,省下来的返工时间远超这几分钟。希望帮到你。
本文还有配套的精品资源,点击获取