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

2023-10-10 21:45

本文主要是介绍CloudCompare——计算点云到点云的距离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

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

待更新。。。。

这篇关于CloudCompare——计算点云到点云的距离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183291

相关文章

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro