Super 4PCS配准算法

news2024/11/28 6:30:43

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.coloradmin.cn/o/1951880.html

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

相关文章

LeetCode Hot100 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…

自动化测试 pytest 中 scope 限制 fixture使用范围!

导读 fixture 是 pytest 中一个非常重要的模块,可以让代码更加简洁。 fixture 的 autouse 为 True 可以自动化加载 fixture。 如果不想每条用例执行前都运行初始化方法(可能多个fixture)怎么办?可不可以只运行一次初始化方法? 答&#xf…

学习笔记:《用Python进行数据分析》之通用函数

通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。你可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。 许多ufunc都是简单的元素级变体,如sqrt和exp&a…

HTML前端面试题之<iframe>标签

面试题:iframe 标签的作用是什么?有哪些优缺点 ? 讲真,刷这道面试题之前我根本没有接触过iframe,网课没讲过,项目实战没用过,但却在面试题里出现了!好吧,我只能说:前端路漫漫&…

通过 C# 写入数据到Excel表格

Excel 是一款广泛应用于数据处理、分析和报告制作的电子表格软件。在商业、学术和日常生活中,Excel 的使用极为普遍。本文将详细介绍如何使用免费.NET库将数据写入到 Excel 中,包括文本、数值、数组、和DataTable数据的输入。 文章目录 C# 在Excel单元格…

uniapp map组件自定义markers标记点

需求是根据后端返回数据在地图上显示标记点&#xff0c;并且根据数据状态控制标记点颜色&#xff0c;标记点背景通过两张图片实现控制 <mapstyle"width: 100vw; height: 100vh;":markers"markers":longitude"locaInfo.longitude":latitude&…

Python 实现股票指标计算——DMA

DMA (Deviation Moving Average) - 平均差 1 公式 DMA 收盘价N1日简单平均 - 收盘价N2日简单平均 AMA M日DMA简单平均 2 数据准备 我们以科创50指数 000688 为例&#xff0c;指数开始日期为2019-12-31&#xff0c;数据格式如下&#xff1a; 3 计算过程 def calculate_d…

构造+有序集合,CF 1023D - Array Restoration

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1023D - Array Restoration 二、解题报告 1、思路分析 先考虑合法性检查&#xff1a; 对于数字x&#xff0c;其最左位置和最右位置 之间如果存在数字比x小&#xff0c;则非法 由于q次操作&#xff0c;第q…

Dav_笔记11:SQL Tuning Overview-sql调优 之 5

构建SQL测试用例 对于许多与SQL相关的问题&#xff0c;获得可重现的测试用例可以更轻松地解决问题。从11g第2版&#xff08;11.2&#xff09;开始&#xff0c;Oracle数据库包含SQL测试用例构建器&#xff0c;它可以自动完成收集和复制尽可能多的有关问题及其发生环境的信息的难…

Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应

什么是授权&#xff08;Authorization&#xff09;&#xff1f; 在 ASP.NET Core 中&#xff0c;授权&#xff08;Authorization&#xff09;是控制对应用资源的访问的过程。它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作。授权通常与身份验证&#xff08;Auth…

vue3 vxe-table 点击行,不显示选中状态,加上设置isCurrent: true就可以设置选中行的状态。

1、上个图&#xff0c;要实现这样的&#xff1a; Vxe Table v4.6 官方文档 2、使用 row-config.isCurrent 显示高亮行&#xff0c;当前行是唯一的&#xff1b;用户操作点击选项时会触发事件 current-change <template><div><p><vxe-button click"sel…

大模型算法面试题(十二)

本系列收纳各种大模型面试题及答案。 1、领域模型Continue PreTrain数据如何选取 在领域模型的Continue PreTrain&#xff08;持续预训练&#xff09;过程中&#xff0c;数据选取是一个至关重要的步骤&#xff0c;它直接影响模型在特定领域上的性能和泛化能力。以下是一些关于…

【资料分享】2024钉钉杯大数据挑战赛A题思路解析+代码演示

2024第三届钉钉杯大学生大数据挑战赛今天已经开赛&#xff0c;【A题】思路解析代码&#xff0c;资料预览&#xff1a;

京东发行稳定币的背后

加密市场很热&#xff0c;京东也要来分一杯羹&#xff1f; 7月24日&#xff0c;据财联社报道&#xff0c;京东科技旗下的京东币链科技 ( 香港 ) 将在香港发行与港元 1:1锚定的加密货币稳定币&#xff0c;在市场上掀起广泛热议。 由于众所周知的监管原因&#xff0c;国内大厂在早…

Window下CLion实现本机通过socket通信-C++

1.引言-什么是socket socket即套接字&#xff0c;用于描述地址和端口&#xff0c;是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。 sockets(套接字)编程有三种&#xff0c;流式套接字&#xff08;SOCK_STREAM&#xff09;&#xff0c;数据报套接字&#xff…

Ubuntu18.04.6 LTS安装opencv3.3.0(详细步骤教程)

本章教程在Ubuntu18.04.6LTS上安装opencv3.3.0版本,亲测已安装成功。 一、下载opencv安装包 1、下载 wget https://github.com/opencv/opencv/archive/3.3.0.zip2、解压 unzip opencv-3.3.0.zip如果没有unzip命令,需要先安装一下 apt install unzip

2024第八届自然语言处理与信息检索国际会议 (NLPIR 2024)即将召开!

2024第八届自然语言处理与信息检索国际会议 (NLPIR 2024)将于2024年12月13-15日在日本冈山的冈山大学举行。NLPIR 2024将为自然语言处理与信息检索领域的专家学者提供一个交流与合作的平台&#xff0c;推动该领域的学术进步和技术创新。同时&#xff0c;本次会议也将为相关企业…

Spring -- 使用XML开发MyBatis

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 MyBatis XML配置文件开发配置连接字符串和MyBatis写Mapper层代码添加mapper接口添加UserInfoXmLMapper.xml 操作数据库INSERTDELETE & UPDATE MyBatis XML配置文件开发 实际上,除…

JAVA基础 - 枚举类

目录 一. 简介 二. 声明 属性 方法 三. 常用方法 四. 使用技巧 五. 使用情景 六. 总结 一. 简介 在 Java 中&#xff0c;枚举类&#xff08;Enum Class&#xff09;是一种特殊的类&#xff0c;用于定义一组有限的、预定义的常量值。 枚举类的主要特点和优势包括&#x…

Cyberchef基础概念之-循环语句操作-Jump/Label

在本专栏的前面的文章介绍了fork,merge,subsection,register等多种概念来解决实际场景的问题。本文将介绍的Jump/Label的操作类似于编程语言中的for和while的功能&#xff0c;相信在学会使用jump操作后&#xff0c;将有助于解决更为复杂的数据处理问题。 本文将详细的介绍该操…