CloudCompare——M3C2计算两点云之间的鲁棒距离

目录

  • 1.概述
  • 2、计算原理
  • 3、操作流程

在这里插入图片描述

本文由CSDN点云侠原创,原文链接。爬虫网站请自重。

M3C2 (plugin)

1.概述

  CloudCompare中的'Plugins -> M3C2 Distance '功能是用来计算两组点云间的鲁棒距离的特别方法。从CloudCompare-2.9版开始,M3C2插件还包括James等人(2017)的“精度地图”(M3C2- pm)变体,用于每个点的精度估计已经可用,而不需要从粗糙度估计计算。 M3C2-pm特别适合由摄影测量处理生成的点云。
在这里插入图片描述

2、计算原理

  M3C2点云比对算法,步骤包括选取核心点云、计算三维曲面法线、点云距离计算、确定空间变量置信区间等,如图1所示。该算法可以直接在点云上检测复杂地形的变化,无需网格划分;且进行变化计算时,受空间点密度、表面粗糙度及不同采样位置的影响较小。
在这里插入图片描述

图1 M3C2算法原理

  由于选取合适的核心点云可显著提高计算效率,因此计算初始阶段需根据设定的距离将原始数据下采样,得到密度较低且分布均匀的核心点云,并将其作为变化识别的基础(如图1(a)所示)。该方法能够显著提升计算效率,优化时间复杂度,从而大幅缩短计算所需时间。
  在选取合适的核心点云后,对于任何给定的核心点 P c o r e P_{core} Pcore,在半径为 D / 2 D/2 D/2的范围内,均可与邻域其他点云数据拟合出一个平面,并由此得出两期点云的局部法向量 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)=MK=1M (akaˉ)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 为分布在 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 1 、 n 2 n_1、n_2 n1n2,沿法向量分别计算两期点云柱内的平均位置,此时两期点云在柱内的平均位置分别为 M 1 、 M 2 M_1、M_2 M1M2,两平均位置的差值即为间距 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 n1n230时采用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 n1n2 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<n1n2<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/(n11)+n2δ24/(n21))(4)
式中,当 n 1 、 n 2 n_1、n_2 n1n2小于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 -不是数字-距离相关)。这意味着在搜索柱面内找不到其他云中的点。因此,灰色点意味着要么云的某些部分在其他云中没有等效(由于数据集中的隐藏部分或其他孔),要么仅仅是柱面最大长度不够长!
  最终的输出结果可以根据自己的具体需求,使用颜色管理器来自定义。

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

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

相关文章

隐私计算大会亮点前瞻:《隐私计算应用研究报告(2023年)》发布预告

7月26日&#xff0c;2023隐私计算大会将于青岛正式扬帆&#xff0c;本次大会将齐聚业内专家大咖共论行业最新进展&#xff0c;洞察未来发展趋势&#xff0c;共同推进隐私计算行业蓬勃发展。 本次大会将公开正式发布《隐私计算应用研究报告&#xff08;2023&#xff09;》、“隐…

leetcode 9 回文数

class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}int num x;int value 0;while(num > 0){value value * 10 num % 10;num num / 10;}return value x;} }

阿里云RockMQ与SpringBoot的整合

前言&#xff1a; 开源版本Rocket和商业版本的RocketMQ有些不同&#xff0c;研究的是商业版本的RocketMQ&#xff0c;阿里云的官方文档&#xff0c;感觉有点乱。看不咋明白&#xff0c;网上虽然有教程&#xff0c;大都还是有点缺少&#xff0c;有时候会突然跳了步骤&#xff0c…

Java 设计模式——观察者模式

目录 1.概述2.结构3.案例实现3.1.抽象观察者3.2.观察对象3.3.具体观察者3.4.具体观察对象3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——Observable / Observer6.1.Observable 类6.2.Observer 接口6.3.案例 1.概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#…

数据结构与算法——顺序表(顺序存储结构)及初始化详解

顺序表&#xff0c;全名顺序存储结构&#xff0c;是线性表的一种。通过《什么是线性表》一节的学习我们知道&#xff0c;线性表用于存储逻辑关系为“一对一”的数据&#xff0c;顺序表自然也不例外。 不仅如此&#xff0c;顺序表对数据的物理存储结构也有要求。顺序表存储数据…

HIVE SQL实现通过两字段不分前后顺序去重

--数据建表 drop table if exists db.tb_name; create table if not exists db.tb_name ( suj1 string,suj2 string ) ;insert overwrite table db.tb_name values ("语文","数学") ,("语文","英语") ,("数学","语文&…

Linux 漏洞扫描

Linux 漏洞扫描程序会仔细检查基于 Linux 的系统&#xff0c;以减轻潜在的风险和漏洞。 什么是 Linux 漏洞扫描程序 Linux 漏洞扫描程序是一种专门的漏洞扫描工具&#xff0c;旨在识别基于 Linux 的系统中的安全漏洞和弱点,它会扫描配置错误、过时的软件版本和已知漏洞。 为…

何时使用Windbg静态分析?何时使用Windbg动态调试?

目录 1、概述 2、使用Windbg静态分析dump文件 2.1、异常捕获模块自动生成dump文件 2.2、从Windows任务管理器中导出dump文件 2.3、从正在动态调试的Windbg中使用命令导出dump文件 2.4、使用Windbg静态分析dump文件的一般步骤 3、使用Windbg动态调试目标进程 3.1、程序发…

OpenCV的HSV颜色空间在无人车中颜色识别的应用

RGB属于三基色空间&#xff0c;是大家最为熟悉的&#xff0c;看到的任何一种颜色都可以由三基色进行混合而成。然而一般对颜色空间的图像进行有效处理都是在HSV空间进行的&#xff0c;HSV(色调Hue,饱和度Saturation,亮度Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角…

【技巧】Maven重复依赖分析查找

【技巧】Maven重复依赖分析查找 遇到奇葩的错误可以考虑是不是依赖冲突了 比如同一段代码 再这个项目中好好的 另一个项目中不能用等 idea安装插件 maven helper 打开pom文件 输入要查找的依赖 将不用的排除掉 右键排除即可

Pandas Groupby:在Python中汇总、聚合和分组数据

GroupBy是一个非常简单的概念。我们可以创建一个类别分组&#xff0c;并对这些类别应用一个函数。这是一个简单的概念&#xff0c;但它是一种在数据科学中广泛使用的非常有价值的技术。在真实的的数据科学项目中&#xff0c;您将处理大量数据并一遍又一遍地尝试&#xff0c;因此…

旅游卡小程序软件招商加盟代理

旅游卡小程序软件招商加盟代理 我国人民生活水平的提高&#xff0c;旅游业成为了人们生活中必不可少的一部分。旅游卡小程序软件作为旅游行业的重要组成部分&#xff0c;也日益受到人们的关注。如今&#xff0c;旅游卡小程序软件招商加盟代理已经成为了一个热门的投资创业项…