• CloudCompare——计算点云到点云的距离


    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.相关代码

    待更新。。。。

  • 相关阅读:
    Ubuntu不能上网解决办法
    2023-11-09 node.js-有意思的项目-记录
    朋友圈怎么定点发朋友圈?
    项目启动脚本解析
    13_C++_面向对象_1
    find_package深度解析及实例应用
    什么是站内搜索引擎?如何在网站中加入站内搜索功能?
    [NOI2007] 调兵遣将
    【2023研电赛】兆易创新命题三等奖: 低成本单母线电流永磁同步无感驱动器
    界面中局部(部分)区域嵌套滑动
  • 原文地址:https://blog.csdn.net/qq_36686437/article/details/133755189