目录
- 1.Cloud-cloud distances
- 2.操作流程
- 3.完整操作
- 4.相关代码
1.Cloud-cloud distances
Cloud-cloud distances 可以通过选择两个点云,然后点击如下图所示的图标来计算。
或者在功能按钮中找到该功能:
要启动这个工具,用户必须选择两个点云,而且只能选择两个。
计算最近邻点的距离
计算两个点云之间距离的默认方法是“最近邻距离”:对于比较点云中的每个点,CloudCompare在参考点云中搜索最近的点并计算它们之间的(欧几里得)距离。这对应于(默认)将本地模型设置为'NONE'
的情况。
计算点到拟合面的距离
如果参考点云足够密集,则接近从比较点云到由参考云表示的下伏表面的距离是可接受的。但如果参考云不够密集,则最近邻距离有时不够精确。因此,有必要获得更好的表面模型。当然,如果可以轻松获得表面的全局模型,则直接计算从比较点云到该模型的距离会更加简单且可能更准确。但是,获得一个干净和适当的全局模型通常并不容易。因此,CloudCompare提供了一种中间方法,可以更好地逼近与参考曲面的真实距离。不像真正的全局模型那么精确,但更容易计算。当CloudCompare确定参考点云中的最近点时,通过在“最近”点及其几个邻居上拟合数学模型来对参考点云表面进行局部建模。从比较点云的每个点到参考点云中最近点的距离,用比较点云到该模型的距离代替。这在统计上更精确,更少依赖于云采样(因为建模阶段非常有限,可能在局部模型中不够准确,但它在全局范围内有更好的结果)。
数学模型: 最小二乘最佳拟合平面,2D1 / 2 Delaunay三角剖分,或二次曲面函数。
2.操作流程
1、选择点云
在显示工具对话框之前,CloudCompare将要求您定义每个点云的角色:
- 比较点云是用来计算距离的点云。CloudCompare将计算比较点云中每个点相对于参考点云的距离(见下文)。生成的标量字段颜色差异将在比较点云上显示。
- 参考点云是将用作参考的点云,即距离将相对于其点计算。如果可能的话,这个点云应该有最广泛的范围和最高的密度(否则应该使用局部建模策略——见下文)。
2、近似的距离
当Cloud/Cloud距离计算对话框出现时,CloudCompare将首先计算近似距离(这在内部用于自动设置执行实际距离计算的最佳八树级别-见下文)。参考点云被隐藏,比较点云被用这些近似距离着色。
关于这些近似距离的一些统计数据显示在“近似”中。结果选项卡(但不应将其视为适当的测量值!)。这些统计数据仅提供给希望将八叉树级别设置为的高级用户。
计算的主要参数有:
Octree level:
这是将执行距离计算的八叉树的细分级别。默认情况下,它是由CloudCompare自动设置的,应该保持原样。修改此参数只会改变计算时间。主要思想是,细分级别越高,八叉树单元越小。因此,每个单元格中的点越少,找到最近的点所需要做的计算就越少。但反过来说,单元格越小,需要迭代搜索的单元格就越多,如果点相距很远(即比较点离最近的参考点很远),这可能会变得非常慢。所以大的点云需要高的八叉树级别,但是如果比较点云的点离参考点云很远,那么低的八叉树级别更好。Max dist.:
如果两个点云之间的最大距离很大,计算时间可能会非常长(因为点越远,确定它们最近的邻居所需的时间就越多)。因此,将搜索限制在一个合理的值以下以缩短计算时间可能是一个好主意。所有比这个距离更远的点都不会计算它们的真实距离——而是使用阈值。signed distances:
not available for cloud-to-cloud distance.flip normals:
not available for cloud-to-cloud distance.multi-threaded:
是否使用所有可用的CPU内核(警告:计算机在计算期间可能无法完全响应)split X,Y and Z components:
再生成3个标量场,对应于每个维度上每个比较点与其最近的参考点之间的(绝对)距离(即对应于偏差向量的3个分量)。
3、局部模型·
当不使用局部模型时,点云到点云的距离就是最近邻距离(使用一种Hausdorff距离算法)。问题是,最近的邻居不一定是(事实上很少)点云表示的表面上最近的点。如果参考点云密度低或有大洞,这一点尤其正确。在这种情况下,使用“局部建模策略”是一个好主意,它包括在最近的点周围计算一个局部模型,以便近似真实表面,并获得更好的“真实”距离估计。
局部模型可计算为:
- 要么在给定数量的邻居上(这通常更快,但只对密度恒定的云有效)
- 或者默认为球形邻域(其半径通常取决于您期望捕获的细节和点云噪声)。
目前有三种本地模式。3种模型均基于经过最近点及其相邻点的最小二乘最佳拟合平面: Least squares plane:
直接用这个平面来计算距离2D1/2 triangulation:
使用点在平面上的投影来计算Delaunay三角剖分(但我们使用原始的3D点作为网格的顶点,从而得到2.5D网格)。Quadric (formerly called 'Height function'):
二次曲面拟合来计算最近邻点的Z值,用计算出来的Z值代替原始点的高程,在进行距离计算。
局部模型的排序增加了对局部几何的“保真度”(同时也增加了计算时间)。人们还应该考虑局部几何是否大部分是光滑的还是有尖锐的边缘。因为Delaunay三角剖分是理论上唯一可以表示尖锐边缘(假设边缘上有点)的模型,而二次函数是唯一可以表示光滑/弯曲表面的模型。默认情况下,建议使用二次曲面模型,因为它更通用。
由于局部近似,一些建模畸变可能会发生(即使它们通常很罕见)。计算出的距离在统计上要准确得多,但局部距离值可能比最近邻距离差。这意味着在其分析中不应该考虑单个点的距离,而应该考虑局部趋势(无论如何,这与最近邻距离相同)。为了部分解决这个问题,从2.5.2版本开始,我们现在为每个点保持最小的距离。
“局部建模”策略旨在处理与采样相关的问题(要么是全局密度过小,要么是参考云密度的局部变化过高)。使用密度最大的云作为“参考”总是一个好主意。
4、计算结果
3.完整操作
4.相关代码
待更新。。。。