Super 4PCS配准算法

Nicolas Mellado,CNRS(Centre national de la recherche scientifique,法国国家科学研究中心)的研究员,在IRIT(Institut de Recherche en Informatique de Toulouse,图卢兹计算机科学研究所)实验室的STORM研究小组工作,从事计算机图形学研究。也是Archeovision的副研究员,Archeovision是一个CNRS实验室,研究如何通过获取,建模和处理3D数据来用于文化遗产研究。研究兴趣集中在分析通过获取物理对象或场景生成的非结构化数据(通常是点云),这是几个研究社区(计算机&图形学,模式识别等)和行业中非常热门的话题。作者个人主页:https://www.irit.fr/recherches/STORM/MelladoNicolas/

        四点一致集算法4PCS(4-Points Congruent Sets)由Dror Aiger于2008年提出,2014年Mellado对其进行了改进,降低了搜索阶段的复杂度,提高了配准效率,形成了Super 4PCS(Super 4-Point Congruent Sets)算法。4PCS与Super 4PCS算法基本思想都是基于RANSAC(随机抽样一致)算法,4PCS算法对确定对应点对的策略进行了优化,将原本的随机选择三个不同的点修改为以源点云中共面的四点为基,在目标点云中确定对应的四点,以构成对应四点集,这样需要验证的点集会大大减少,并且能更快的找到两组点云的最佳匹配,同时,由于四点集具有仿射不变性,在一定程度上可增强算法的鲁棒性。但是4PCS算法在搜索共面四点集过程中要耗费大量的时间,并且在找到的全等集合U中包含大量的冗余点集,需要浪费大量的时间去验证这些冗余点集(点云重叠率的计算比较耗时),因此4PCS算法很难做到快速实时的配准。针对4PCS算法配准速度非常慢的缺点,Mellado提出了Super 4PCS算法,利用智能索引使4PCS算法的计算复杂度显著降低。该方法适用于重叠区域较小或者重叠区域发生较大变化场景点云配准,无需对输入数据进行预滤波和去噪,能够快速准确的完成点云配准。

4PCS算法主要是根据共面四点之间的仿射不变关系来确定对应点的,如图所示,在仿射变换中,由三个确定的共线点a、b和c所确定比例r是不变的,对于给定的非全共线的共面四点a、b、c和d,有ab与cd相交于点e,可确定两个比例r_1和r_2 。 r_1和r_2在仿射变换中是不变的,即由源点云P中的四个共面点B={a,b,c,d}所确定的和由目标点云Q中对应的四个点所确定的是相同的。

r_1=||a−e||/||a−b|| r_2=||c−e||/||c−b||

365a5c9e7885496082a0c8f7576dbf03.png

然后根据这两个仿射不变量寻找对应的四点集,如图6所示,对目标点云Q中的任意两点计算可能存在的交点e_1和e_2: e_1=q_1+r_1(q_2−q_1) e_2=q_1+r_2(q_2−q_1)

80bf44433c104bd08c39687139f77875.png

若一对点计算出的e_1和另一对点计算出的e_2近似相等,如图所示,其中灰色点代表e_1,黄色点代表e_2,则q_5、q_3、q_4、q_1与a、b、c、d相对应。另外,对于刚体变换来说对应点对之间的距离不变,所以在刚体变换的情况下寻找对应四点集还时还应加上如下约束条件: d_1^′=||a^′−b^′||≈||a−b||=d_1                   d_2^′=||c^′−d^′||≈||c−d||=d_2

0b18652414994ad9879b11a8c18fa622.png

找到所有与B对应的四点集U={U_1,U_2,...,U_n},则根据基B和与其对应的每一个四点集U_i都可以计算出一个刚体变换矩阵T_i,将T_i应用于源点云进行变换,并通过比较最大公共点集(Largest Common Pointset,LCP)确定最终的变换矩阵。但是4PCS算法在搜索共面四点集过程中要耗费大量的时间,并且在找到的全等集U中包含大量的冗余点集,需要浪费大量的时间去验证这些冗余点集,因此4PCS算法很难做到快速实时的配准。 为了解决这两个问题,Super 4PCS算法使用了智能索引使4PCS算法的计算复杂度显著降低。4PCS算法的时间复杂度是O(n^2+k),n是目标点云Q中点的数量,k是近似全等点集的数量。Super 4PCS算法使用智能索引对4PCS算法做了两个方面的改善:(1)利用栅格化点云的方法加速了根据距离搜索匹配点对的过程;(2)对找到点对中的冗余点对进行剔除。通过上面两个改进,将算法的时间复杂度降到最优线性复杂度O(n+k_1+k_2),其中n是目标点云Q中点的数量,k_1是点云Q中相距为d的点对的数量,k_2是经过滤波后得到的全等集合的数量。

针对改进(1),两个点云P和Q,首先从P中找到一个平面四点集B={p_1,p_2,p_3,p_4},算法的目标是在Q中提取所有与B全等的共面四点集。定义d_1=||p_1−p_2||,d_2=||p_3−p_4||,对于任意q_i∈Q,需要找到所有距离为d_1±ε和d_2±ε的点。如图所示,Super 4PCS算法对这个问题使用栅格化处理的方法,首先将Q标准化,把Q中所有点放到网格G中,然后对G进行栅格化处理,栅格大小为ε,然后以每个点为球心画半径为d±ε的球。通过在网格上执行超球面的同步自适应栅格化,递归地细分包围Q的空间,并计算一组超球体与细分体之间的交点,然后在球心和相交的点之间实现点对提取。记q_i与那些落在[d_1−ε,d_1+ε]范围内的点组成的点对集合为S_1,而q_i与那些落在[d_2−ε,d_2+ε]范围内的点组成的点对的集合为S_2,公式如下。 S_1={(q_i,q_j)│q_i,q_j∈Q,||p_i−p_j||∈[d_1−ε,d_1+ε]} S_2={(q_i,q_j)|q_i,q_j∈Q,||p_i−p_j||∈[d_2−ε,d_2+ε]}

e8e56c6cd8534279aa21295bfc673fc4.png

针对改进(2),4PCS算法找到了和点集B近似全等的四点集U,但是U中的点集并不全都与B全等,这些不全等的点集就是冗余点集。如图所示,点集{(p_1,p_2),(p_3,p_4)}对应{(q_1,q_2),(q_3,q_4)}和{(q_1^′,q_2^′),(q_3,q_4)},但是{(q_1^′,q_2^′),(q_3,q_4)}和{(p_1,p_2),(p_3,p_4)}并不全等,因此{(q_1^′,q_2^′),(q_3,q_4)}是冗余点集,这就导致了4PCS算法的低效,浪费了大量时间去验证这些冗余点集。因此,Super 4PCS算法通过从点云Q中提取对应于线段之间的相同角度,相同距离以及相同不变量的四个共面点来解决此问题。设B={p_1,p_2,p_3,p_4}为从P中提取的共面四点集,e为线段p_1p_2和p_3p_4的交点,定义距离d_1=||p_1−p_2||,d_2=||p_3−p_4||,不变量r_1=||p_1−e||/d_1,r_2=||p_1−e||/d_2,由上述方法已在Q中找到了分别相距d_1和d_2的两个点对集合S_1和S_2。 S_1={(q_i,q_j)│q_i,q_j∈Q,||p_i−p_j||∈[d_1−ε,d_1+ε]} S_2={(q_i,q_j)|q_i,q_j∈Q,||p_i−p_j||∈[d_2−ε,d_2+ε]}

e2fccbc99412473e98f29ccad9027244.png

将角度匹配问题映射到一组法线的索引中,这样对于任何给定的查询法线n和角度θ,可以快速查询到所有与n存在角度偏差为θ的法线。将法线视为单位球(高斯球)上的一个点,查询一个单位圆上的所有点。如下图点c,圆由相对于查询法向n角度偏差为θ的法线定义。对于近似参数ε,我们栅格化一个圆,设置其单元格大小为ε。查询法线n由一个箭头表示,它定义了单位球体上的圆,该圆包含与n成角度θ的所有点。之后做全等四点集提取,构造一个单元大小为ε的网格,并在每个网格中存储如上所述的法线索引。对一个有序点对(p_1,p_2)进行方向描述方,并且对另一个点对进行同样的方向描述。通过遍历S_1中的所有点对,并计算一个新的点e,对应不变量r_1。在映射到网格的单元格中添加e,并在R^3中添加一个向量,表示从p_1到p_2的归一化方向。随后将向量插入增广法线索引中。在这一阶段的最后,所有与不变量r_1对应的点e_i都存储在网格单元中,它们的法线存储在每个单元的法线索引中。对于给定的点集B,有相交线之间的夹角θ来提取S_2中与这个夹角一致的点对,即它们与S_1中对应的对之间的夹角近似为θ。在这一阶段的最后,我们有一个Q中的4点集,它们全等于点集B,它是实集,不是超集。

b33ecd69ed554d3a99d2d29b0157532e.png

 

e230283c01a04609926af27253b3118e.png

 

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

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

相关文章

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中,Fragments 是一种轻量级的 UI 组件,类似于视图(Views),但它们没有自己的控制器(Controller)。Fragments 通常用于定义可以在多个视图中重用的 UI 片段,从而提…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…

如何录制电脑内部声音?全方位介绍电脑录音软件:8款在线录音!(2024重新整理)

如何录制电脑内部声音?不管是娱乐圈还是现实生活,【录音】这个功能的重要性不言而喻。而电脑录音已在影视配音、音视频剪辑、会议记录、在线教育等多个领域发光发热! 本文将为您推荐8款电脑录音软件,并详细介绍电脑录音的多种方式…

Git 从入门到精通:全面掌握版本控制(IntelliJ IDEA 中 Git 的使用指南)

引言 Git 是目前世界上最流行的版本控制系统,由 Linux 内核的创始人 Linus Torvalds 开发。它不仅拥有强大的分支管理功能,还具备了优秀的合并能力。本文将从 Git 的基本概念开始,逐步深入到 Git 的使用和一些高级技巧。 Git 简介 Git 是一…

Python番外篇:变量是盒子还是标签

引言 前面通过几十篇文章,大概把Python的一些比较实用的基础做了一些介绍,学会这些,基本能应付日常的小的需求开发了,写一些小工具,提高工作的处理效率。 接下来,准备开始进入一个新的篇章,也…

del 语句

使用 del 语句可以删除任何对象,包括字典对象。删除之后,之前的引用将失效,尝试使用该对象会导致 NameError 错误。因此,删除字典对象的命令是 del myDict。 元组 (Tuple) 元组是不可变的,因此你不能修改元组的内容&a…

C#如何引用dll动态链接库文件的注释

1、dll动态库文件项目生成属性中要勾选“XML文档文件” 注意:XML文件的名字切勿修改。 2、添加引用时XML文件要与DLL文件在同一个目录下。 3、如果要是添加引用的时候XML不在相同目录下,之后又将XML文件复制到相同的目录下,需要删除引用&am…

MySQL之索引优化

1、在进行查询时,索引列不能是表达式的一部分,也不能是函数的参数,否则无法使用索引 例如下面的查询不能使用 actor_id 列的索引: #这是错误的 SELECT actor_id FROM sakila.actor WHERE actor_id 1 5; 优化方式:…

微信小程序安装vant组件库和使用

第一步打开终端输入 npm install vant/weapp --save 第二步 npm cache clean --force 第三步 npm i vant/weapp -S --production 第四步在app.json中的usingComponents输入 "van-button": "vant/weapp/button/index" 第五步直接在页面使用 <v…

SSM(Spring + Spring MVC + MyBatis)框架面试三道题

以下是三道关于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的面试题&#xff0c;由简单到困难进行排列&#xff1a; 1. 简答题&#xff1a;请简述Spring框架的核心特性。 答案&#xff1a; Spring框架的核心特性主要包括以下几个方面&#xff1a; 控制反转…

当设计模式牵手LLM

模版方法模式 何为模版设计模式 想象一下 如果我们要泡一杯茶 我们要循序渐进地 煮水温杯注水浸茶茶水入杯加点配料 如此&#xff0c;泡茶的工序就完成了&#xff0c;那么模板方法模式&#xff0c;相信各位也有了一定的概念&#xff1a;定义了一个算法的骨架&#xff0c;而…

UDP的报文结构及其注意事项

1. 概述 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的数据传输服务&#xff0c;不保证数据的可靠传输。在网络通信中&#xff0c;UDP通常用于一些对实时性要求较高、数据量较小、传输延迟较低的应用&#xff0c…

创建一个程序来记录每天的工作日常—6。与chatgpt结合 找一些集 来训练 ,它能自动分类到 其中一个,例如 “打扫卫生” 它会自动分类到 “家务”

改进步骤 数据增强&#xff1a;使用GPT模型生成更多的训练数据。使用更高级的模型&#xff1a;使用BERT或其他预训练的语言模型进行文本分类。经验条和经验值显示&#xff1a;在网页端显示当前的经验值&#xff0c;并添加一个经验条。 数据增强和训练数据集 我们可以通过Ope…

【JVM基础07】——类加载器-什么是类加载器?类加载器有哪些?双亲委派了解吗?

目录 1- 引言&#xff1a;类加载器1-1 类加载器是什么&#xff1f;(What)1-2 为什么要用类加载器&#xff1f; 作用&#xff1a;类加载的过程&#xff1f;(Why) 2- ⭐核心&#xff1a;类加载器详解(How)2-1 类加载器分类2-2 什么是双亲委派模型&#xff1f;2-3 为什么采用双亲委…

Pytorch基础:Tensor的squeeze和unsqueeze方法

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中&#xff0c;squeeze和unsqueeze是Tensor的一个重要方法&#xff0c;同时它们也是torch模块中的一个函数&#xff0c;它们的语法如下所示。 Tensor.…

【SpringBoot】1 Gitee

本项目 Gitee 地址&#xff1a;https://gitee.com/Lin_DH/system idea中可能装个gitee的插件&#xff0c;这样操作起来比较方便。 1&#xff09;登录 Gitee 官网&#xff08;https://gitee.com/&#xff09;&#xff0c;新建仓库。 2&#xff09;复制新建的 Gitee 仓库地址&am…

Unity3D之TextMeshPro使用

文章目录 1. TextMeshPro简介2. TextMeshPro创建3. TextMeshPro脚本中调用4. TextMeshPro字体设置及中文支持过程中出现的一些问题 1. TextMeshPro简介 【官网文档】https://docs.unity.cn/cn/2020.3/Manual/com.unity.textmeshpro.html TextMeshPro 是 Unity 的最终文本解决…

软件测试---Linux

Linux命令使用&#xff1a;为了将来工作中与服务器设备进行交互而准备的技能&#xff08;远程连接/命令的使用&#xff09;数据库的使用&#xff1a;MySQL&#xff0c;除了查询动作需要重点掌握以外&#xff0c;其他操作了解即可什么是虚拟机 通过虚拟化技术&#xff0c;在电脑…

第九十七周周报

学习时间&#xff1a; 2024.7.20-2024.7.26 学习产出&#xff1a; 这周科研暂时没有进展&#xff0c;因为服务器这周都进不去&#xff0c;周一的时候上周跑的节点还被停了&#xff08;机房太热&#xff09;&#xff0c;然后这周主要在改吉安县小程序的bug&#xff0c;因为要…

刷新当前页面

一, reload 直接刷新页面 window.location.reload(); $router.go(0);相当于按了 F5, 因此缺点也很明显, 体验感不佳, 因为要加载所有页面资源相对较慢, 比较耗时. 二, Vue Router 刷新当前页面 这个时候, 我们通过 $router.push 一个 refresh 路由的形式实现, 具体步骤如下:…