博客长期更新,最近一次更新时间为:2025年4月21日。
1.概述
CloudCompare中的'Plugins -> M3C2 Distance '
功能是用来计算两组点云间的鲁棒距离的特别方法。从CloudCompare-2.9版开始,M3C2插件还包括James等人(2017)的“精度地图”(M3C2- pm)变体,用于每个点的精度估计已经可用,而不需要从粗糙度估计计算。 M3C2-pm特别适合由摄影测量处理生成的点云。
2、计算原理
M3C2点云比对算法,步骤包括选取核心点云、计算三维曲面法线、点云距离计算、确定空间变量置信区间等,如图1所示。该算法可以直接在点云上检测复杂地形的变化,无需网格划分;且进行变化计算时,受空间点密度、表面粗糙度及不同采样位置的影响较小。
由于选取合适的核心点云可显著提高计算效率,因此计算初始阶段需根据设定的距离将原始数据下采样,得到密度较低且分布均匀的核心点云,并将其作为变化识别的基础(如图1(a)所示)。该方法能够显著提升计算效率,优化时间复杂度,从而大幅缩短计算所需时间。
在选取合适的核心点云后,对于任何给定的核心点
P
c
o
r
e
P_{core}
Pcore,在半径为
D
/
2
D/2
D/2的范围内,均可与邻域其他点云数据拟合出一个平面,并由此得出两期点云的局部法向量
N
N
N。如图1(b)所示,记录核心点
P
c
o
r
e
P_{core}
Pcore半径
D
/
2
D/2
D/2范围内所有点到最佳拟合平面距离,并使用粗糙度
σ
(
D
)
σ(D)
σ(D)表征标准差大小,即
σ
(
D
)
=
∑
K
=
1
M
(
a
k
−
a
ˉ
)
2
M
σ(D)=\sqrt\frac{\sum_{K=1}^M\ (a_k-\bar{a})^2}{M}
σ(D)=M∑K=1M (ak−aˉ)2
式中,
a
i
a_i
ai为半径
D
/
2
D/2
D/2范围内第
k
k
k个点与最佳拟合平面的间距;
a
ˉ
\bar{a}
aˉ为最佳拟合平面与
D
/
2
D/2
D/2半径范围内所有点云的平均间距;
M
M
M为分布在
D
/
2
D/2
D/2半径范围内的点云总量。
沿法线方向从
P
c
o
r
e
P_{core}
Pcore所在的拟合平面出发,以
d
/
2
d/2
d/2为投影半径,存在一个通过
P
c
o
r
e
P_{core}
Pcore、以法向量
N
N
N为轴线且与两期点云相交的圆柱体。搜索柱面内包含的所有点云
n
1
、
n
2
n_1、n_2
n1、n2,沿法向量分别计算两期点云柱内的平均位置,此时两期点云在柱内的平均位置分别为
M
1
、
M
2
M_1、M_2
M1、M2,两平均位置的差值即为间距
L
M
3
C
2
L_{M3C2}
LM3C2,也即点云在
P
c
o
r
e
P_{core}
Pcore点变化的距离。对整个点云进行迭代运算直至遍历所有点,可得出整个目标区域的点云变化情况,如图1(c)所示。在计算过程中,能否设置合适的算法参数,直接影响后续的计算效果。其中,投影半径
d
/
2
d/2
d/2、法向量半径
D
/
2
D/2
D/2,以及最大计算深度
H
H
H为影响计算精度与效率的3个主要参数。
如图1(d)所示,计算点云距离后,为估计计局部距离变化量测精度,避免各种误差导致变化识别误判,需要进一步确定空间置信区间,降低误判的概率。在多次测量的误差遵从独立高斯分布的前提条件下,
n
1
、
n
2
≥
30
n_1、n_2\geq30
n1、n2≥30时采用z-双尾差异显著性检验公式计算置信水平0.95以上的置信区间,即
L
O
D
0.95
(
d
)
=
±
1.96
(
δ
1
(
d
)
2
n
1
+
δ
2
(
d
)
2
n
2
+
R
E
G
)
(2)
LOD_{0.95}(d)=\pm1.96(\sqrt{\frac{\delta_1(d)^2}{n_1}+\frac{\delta_2(d)^2}{n_2}}+REG)\tag{2}
LOD0.95(d)=±1.96(n1δ1(d)2+n2δ2(d)2+REG)(2)
式中,
n
1
、
n
2
n_1、n_2
n1、n2为
d
/
2
d/2
d/2投影半径下两期点云的核心点点数;REG 代表两期点云的配准误差;L
L
O
D
0.95
(
d
)
LOD_{0.95}(d)
LOD0.95(d)为投影半径
d
/
2
d/2
d/2下置信水平0.95 以上置信区间的最小变化距离。其中,两期点云的配准误差REG 的计算公式为
R
E
G
=
(
(
R
M
S
E
1
)
2
+
(
R
M
S
E
2
)
2
(3)
REG=(\sqrt{(RMSE_1)^2+(RMSE_2)^2}\tag{3}
REG=((RMSE1)2+(RMSE2)2(3)
式中,
R
M
S
E
1
RMSE_1
RMSE1为参照点云的均方根误差;
R
M
S
E
2
RMSE_2
RMSE2为对比点云的均方根误差。
当
4
<
n
1
、
n
2
<
30
4<n_1、n_2<30
4<n1、n2<30 时,采用t- 双尾显差异著性检验公式计算其置信区间,其自由度
D
F
DF
DF可按照如下表达式计算
D
F
=
(
δ
1
(
d
)
2
n
1
+
δ
2
(
d
)
2
n
2
)
/
(
δ
1
4
/
(
n
1
−
1
)
n
1
+
δ
2
4
/
(
n
2
−
1
)
n
2
)
(4)
DF=(\frac{\delta_1(d)^2}{n_1}+\frac{\delta_2(d)^2}{n_2})/(\frac{\delta_1^4/(n_1-1)}{n_1}+\frac{\delta_2^4/(n_2-1)}{n_2})\tag{4}
DF=(n1δ1(d)2+n2δ2(d)2)/(n1δ14/(n1−1)+n2δ24/(n2−1))(4)
式中,当
n
1
、
n
2
n_1、n_2
n1、n2小于4时,无需置信区间。
3、操作流程
1、首先选中两期需要进行比较的点云
2、找到M3C2 Distance 功能
3、进行参数设置
Main parameters
与CANUPO算法一样,为了加快计算速度,计算只能在特定的点(称为核心点)上进行。其主要思想是,虽然地面激光扫描点云通常非常密集,但没有必要在如此高的密度下测量距离(并且在实际中会非常慢)。这就是为什么用户必须选择使用'Core points'
的原因(对话框下方中有三个选项可供选择:
-
整个点云
-
下采样点
-
自定义点
-
normals
(法线尺度):是在每个核心点周围提取的球面邻域的直径,用于计算局部法线。这个法线用于确定一个圆柱体的方向,在这个圆柱体内部将搜索其他云中的等效点。关于法线,可以在“法线”选项卡中设置更高级的选项(见下文)。 -
Projection
投影尺度:是上面圆柱体的直径; -
max depth
最大深度:对应于圆柱体高度
注意:这些半径越大,局部表面粗糙度(和噪声)的影响就越小。但是计算速度就越慢。
最后,如果点云是由多测站拼接而成的并且全局配准错误,可以在“registration error”字段中输入合适的参数,这个参数在对每个点进行置信(评估相应的位移是否重要)计算时,会被考虑在内。
Normals
在M3C2中使用准确的法线信息是非常重要的。 第二个选项卡是用来指定法向量的计算方法的。
default
:法线是根据上一个选项卡中定义的法线比例参数计算的;multiscale
:对于每个核心点,法线在几个尺度上计算,并使用最‘平坦’的;vertical
:不做常规计算,只使用纯粹的垂直法线(完美的二维问题);horizontal
:法线在(XY)平面上“受限”
当点云自身包含法向量信息的时候,也可以不进行法向量的计算,通过勾选第一个选项卡上的 use cloud #1
复选框,直接使用点云自身的法向量。此外,'orientation'
选项可以帮助插件正确地定位法线:
- 通过指定全局方向(相对于给定轴或特定点)
- 或者指定一个包含所有传感器位置的点云
Precsison maps
Precision maps
选项卡允许使用存储在点云标量域中的测量精度值来计算可检测的变化,而不是通过计算粗糙度来估计。如果标量字段可用,则复选框可用于启用M3C2的' precision maps '
变体。 在这种情况下,不确定性估计将不再从主要参数选项卡中的投影比例的粗糙度估计,而是基于存储在标量字段中的3-D点精度估计。 确保为两个点云选择适当的标量字段,以在X, Y和Z中描述测量精度(sigmaX, sigmaY和sigmaZ) 如果精度值与点坐标的单位不同,比例尺可以改变。 例如,如果点坐标和精度值以米为单位,则比例尺值为1.000。 但是,如果坐标以米为单位,但是精确的标量字段以毫米为单位,则比例值应设置为0.001。
Advanced
advanced选项卡的名字能说明一切。该选项一般可忽略。
Output
可以选择生成额外的标量字段,还可以选择在哪个点云上重新投影计算测量值,如果使用与第一个输入点云不同的核心点,这一点将会特别有用。
输出结果
注意:参数可以通过专门的文本文件保存(和重新加载)。使用对话框左下角的两个图标来完成此操作。
计算距离
准备好后,只需点击“确定”按钮。完成后,对话框将关闭。必须隐藏输入点云才能查看结果,因为结果是在新点云中生成的。
注意,除了距离之外,M3C2插件还生成了其他几个标量字段:
- 距离不确定性(越接近零越好)
- 变化显著性(距离是否可能对应实际变化)
- 以及每个核心点的标准偏差和邻居数量(在“输出”选项卡中指定)。
还要注意,在其他云中没有任何对应点的点保持“灰色”(它们与NaN -不是数字-距离相关)。这意味着在搜索柱面内找不到其他云中的点。因此,灰色点意味着要么云的某些部分在其他云中没有等效(由于数据集中的隐藏部分或其他孔),要么仅仅是柱面最大长度不够长!
最终的输出结果可以根据自己的具体需求,使用颜色管理器来自定义。