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

待更新。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130207.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对于使用win32 API获取性能计数器的理解

微软提供了获取性能计数器的接口,如下 LSTATUS RegQueryValueExA([in] HKEY hKey,[in, optional] LPCSTR lpValueName,LPDWORD lpReserved,[out, optional] LPDWORD lpType,[out, optional] LPBYTE lpData,[in, out, optional] L…

数据结构和算法(10):B-树

B-树:大数据 现代电子计算机发展速度空前,就存储能力而言,情况似乎也是如此:如今容量以TB计的硬盘也不过数百元,内存的常规容量也已达到GB量级。 然而从实际应用的需求来看,问题规模的膨胀却远远快于存储能…

Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件

文章目录 0. 背景1. 准备工作2. gin中间件2.1 中间件代码2.2 中间件使用2.3 测试中间件使用结果 3. 添加权限管理API3.1 获取所有用户3.2 获取所有角色组3.3 获取所有角色组的策略3.4 修改角色组策略3.5 删除角色组策略3.6 添加用户到组3.7 从组中删除用户3.8 测试API 4. 最终目…

Python Opencv实践 - 车辆识别(1)读取视频,移除背景,做预处理

示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。 import cv2 as cv import numpy as np#读取视频文件 video cv.VideoCapture("../../SampleVideos/Traffic.mp4") FPS 10 DELAY int(1000 / FPS) kernel cv.getStructu…

flask入门

第一个Flask项目 创建后项目如下图 static存放静态文件,templates存放Jinja2模板,app.py是整个项目的入口文件 我们略微理解下app.py这里的代码 # 从flask这个包中导入Flask类 from flask import Flask#使用Flask类创建一个app对象 #__name__:代表当前…

Python 自动化Web测试

限于作者水平有限,以下内容可能是管窥之见,希望大家高抬贵手,且让我斗胆抛砖引玉。 公司产品迪备主要是通过网页操作来进行数据库的备份与恢复,监控与管理,因此在测试的过程中,可以用python测试脚本来模拟…

开源ERP和CRM套件Dolibarr

什么是 Dolibarr ? Dolibarr ERP & CRM 是一个现代软件包,用于管理您组织的活动(联系人、供应商、发票、订单、库存、议程…)。它是开源软件(用 PHP 编写),专为中小型企业、基金会和自由职业…

一文告知HTTP GET是否可以有请求体

HTTP GET是否可以有请求体 先说结论: HTTP协议没有规定GET请求不能携带请求体,但是部分浏览器会不支持,因此不建议GET请求携带请求体。 HTTP 协议没有为 GET 请求的 body 赋予语义,也就是即不要求也不禁止 GET 请求带 body。大多数…

使用gpio子系统实现按键驱动(二)

一,gpio_keys.c介绍 Linux内核下的drivers/input/keyboard/gpio_keys.c实现了一个体系无关的GPIO按键驱动,使用此按键驱动,只需要在设备树gpio-key节点添加需要的按键子节点即可,适合于实现独立式按键驱动。 gpio-keys是基于inp…

Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。

一、执行ls -l /system/bin/ 查看一下用户和权限。 二、这些权限在哪里修改呢? 默认编译system/bin/可执行程序赋予权限的地方system\core\libcutils\fs_config.cpp 文件里面的android_files 三、使用实例,只有root和系统app权限才能执行某个命令&#x…

【C++设计模式之备忘录模式:行为型】分析及示例

简介 备忘录模式(Memento Pattern)是一种行为型设计模式,它用于保存和恢复对象的状态。备忘录模式通过将对象的状态封装成一个备忘录(Memento),并将备忘录保存在一个管理者(Caretaker&#xff…