当前位置: 首页 > news >正文

『OPEN3D』1.8 点云的配准理论

点云的配准是将不同的3D点云对齐成一个完成的点云模型;配准的目标是找到两帧点云之间的相对旋转(rotation)与平移(translation),使得两份点云中有重叠的区域能够完好拼接。

点云配准示例图(来自PCL) 

上图为初始的5份点云数据,需要将着几份点云数据拼接成如下图中完整的模型

点云动态配准示例

常见的点云配准方式主要包含ICP配准以及NDT配准以及他们的配准,当然还包括神经网络的点云配准方式。

1、点云配准理论

点云配准需要找到两份点云数据之间点的对应估计,也就是找到两份点云中重叠的部分才可以进行配准,这类配准,对于有确定对应点的配准拥有闭式解(closed form solution)不需要迭代求解即可获取最优值。

       对应点的寻找方式:

1 若为深度相机,则可以借助图像信息来寻找对应的匹配点并投影回3d空间

2 若为两帧点云信息,则可以借助点云特征点来进行确立

不过上诉方法都会出现误匹配,一般会借助RANSAC(随机采样一致性)来得到更为robust的估计。

1 ICP主要为point2point ICP和point2plane两种ICP方式

ICP配准点云时需要有较为准确的初始位姿后再使用该方法进行精配准;ICP的点云配准大体步骤分为如下几步:

1 点的匹配(可以从图像中来或者点云中来)

        1.1 在两帧点云中找到对应的关键点,点云中的关键点一般为特定的几何结构,比如书本的边角,与图像类似;点云中的关键点包括NARF;SIFT;FAST;当然也可以不适用关键点;使用每一个点或者点云中的一部分点来进行配准;不过那样的话会导致计算量过大。

        1.2 特征的描述子;与图像类似,再找到点云的关键点后,需要提取该关键点的描述子信息;通过组合该结构的信息来生成对应的向量用于比对;点云的中描述子包括NARF;FPFH;BRIEF;SIFT等。

2 匹配点估计;给定两帧点云的特征向量集合;通过关键点与描述子来找到重叠区域中相互对应的关键点:对于关键点或特征的匹配,可以使用暴力搜索;kd-tree(FLANN)等方式来进行匹配

3 匹配点对估计;类似与图像中关键点匹配;点云中的关键点匹配也存在许多误匹配;误匹配会影响最终的配准结果;因此此处可以使用ransac或者根据匹配点对的百分位进行截取等方式来进行优化;如果一帧中的某个关键点与另一帧中的多个关键点匹配;则会取最小距离来确定匹配点

4  变换矩阵计算;再得到准确的相互匹配的点云后;则可以计算变换矩阵;

        其中point2point的评估误差为

        point2plane的评估误差为(其中np为点P的法线信息)

        

估计两个点集的R和t可以使用使用SVD或者非线性优化求解; 

1 SVD方法

        给定两对匹配点的点集p{}p{}',对其中第i对匹配点的误差项为:

e{_i} = p{_i} - (R p{_i}'+t)

因此可以对所有点构建最小二乘问题,求得使误差平方和达到极小的R和t:

min{(_R,_t)}\frac{1}{2}\sum_{i=1}^{n}\left \| (p{_i} - (Rp{_i}'+t) ) ) \right \|{_2^2}

分别定义两组点的质心为(此处使用不带下标的项来代表质心):

p = \frac{1}{n}\sum_{i=1}^{n}(p{_i})

p' = \frac{1}{n}\sum_{i=1}^{n}(p{_i}')

在误差函数中进行展开

展开后最后一项元素求和为0(所有p{_i}元素相加减去n个p{_i}的质心p为0),因此优化的结果仅与前两项相关,即

min_{(R,t)}J = \frac{1}{2} \sum_{i=1}^{n}\left | \left | p{_i} - R(p{_i}'-p') \right | \right |^2 + \left \| p -Rp'-t \right \|^2

上式中,只有左边和旋转矩阵R相关,右侧同时R与t。因此只要求得R后令右式为0即可求出t。

ICP的SVD方法流程如下

        1、计算两组匹配点的质心pp',  然后将每个点减去质心得到去质心的坐标:

q{_i} = p{_i} - p

   q{_i}' = p{_i}' - p'

        2、根据上述阐述的优化,计算旋转矩阵:

R{*} =argmin{_R} (\frac{1}{2} \sum_{i=1}^{n}\left | \left | q{_i} - R(q{_i}') \right | \right |^2)

        3、根据计算得到的旋转矩阵计算平移向量t

                t* = p-Rp'        

因此,按照上面的步骤,要先求取两组点集之间的旋转矩阵,所以下面说重点一下R的计算:

\frac{1}{2} \sum_{i=1}^{n}\left | \left | q{_i} - R(q{_i}') \right | \right |^2 = \frac{1}{2} \sum_{i=1}^{n} (q{i}^Tq{_i} + q{_i}'^T R^T R q{_i}' - 2q{_i}^T R q{_i}')

其中第一项q{i}^Tq{_i}与R无关;第二项q{_i}'^T R^T R q{_i}'中因为R为正交矩阵因此R^T R = I,也与R无关;只有最后一项的-2q{_i}^T R q{_i}'与R有关,因此有如下推导:

\sum_{i=1}^{n}(-q{_i}^T R q{_i}') = \sum_{i=1}^{n}-tr(q{_i}^T R q{_i}')=-tr(R\sum_{i=1}^{n}q{_i}'q{_i}'^T)        

               注: 其中tr为trace(迹),有a^Tb = tr(ba^T)

        然后可以使用SVD分解得出最优的旋转矩阵R。

W=\sum_{i=1}^{n}q{_i}'q{_i}'^T

        可知W是一个n*n的矩阵,n为点集的维度,若是点云数据则n=3则W是3*3的矩阵,

若此时W是可逆矩阵,则可以直接通过公式获得最优的旋转矩阵

R = (W^T W)^\frac{1}{2} H^{-1}

但考虑到所有情况,直接对W进行SVD分解也是可以的:

        W = U\sum V^T        

其中\sum为奇异值组成的对角矩阵,对角线元素从大到小排列,UV则为正交矩阵;当W满秩时,R为

        R = UV^T

若R的行列式为负数,则去-R为最优数值。

对这块刚兴趣的同学可以参考Kabsch算法的实现

https://en.wikipedia.org/wiki/Kabsch_algorithmicon-default.png?t=N7T8https://en.wikipedia.org/wiki/Kabsch_algorithm

2 非线性优化

2 open3d中使用ICP

更新中

相关文章:

『OPEN3D』1.8 点云的配准理论

点云的配准是将不同的3D点云对齐成一个完成的点云模型;配准的目标是找到两帧点云之间的相对旋转(rotation)与平移(translation),使得两份点云中有重叠的区域能够完好拼接。 点云配准示例图(来自…...

Python数据结构

目录 5.1. 列表详解 5.1.1. 用列表实现堆栈 5.1.2. 用列表实现队列 5.1.3. 列表推导式 5.1.4. 嵌套的列表推导式 5.2. del 语句 5.3. 元组和序列 5.4. 集合 5.5. 字典 5.6. 循环的技巧 5.7. 深入条件控制 5.8. 序列和其他类型的比较 本章深入讲解之前学过的一些内容…...

突发!新华三总裁《致全体员工的一封信》,中高层全面降薪10%-20%!

* 你好,我是前端队长,在职场,玩副业,文末有福利! 精彩回顾:进了央企,拿了户口,却感觉被困住了。 11月23号,某社交平台爆出了新华三总裁于英涛的《致全体员工的一封信》&a…...

QIIME 2介绍

QIIME 2(Quantitative Insights Into Microbial Ecology 2)是一个用于分析和解释微生物组数据的开源生物信息学工具。它是QIIME的第二个版本,经过重新设计以提高灵活性、可扩展性和可重复性。 1. 关于QIIME 2的一些重要特征和概念&#xff1…...

Spring Cloud Gateway 的简单介绍和基本使用

前言 本文主要对Spring Cloud Gateway进行简单的概念介绍,并通过多模块编程的方式进行一个简单的实操。 文章目录 前言1 什么是网关(概念)2 微服务中的网关2.1 问题12.2 问题2 3 网关作用4 Spring Cloud Gateway组成5 Spring Cloud Gateway基…...

Leaflet结合Echarts实现迁徙图

效果图如下&#xff1a; <!DOCTYPE html> <html><head><title>Leaflet结合Echarts4实现迁徙图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0">…...

在mysql存储过程中间部分,使用游标遍历动态结果集(游标动态传参使用)

mysql游标动态传参实现&#xff08;动态游标&#xff09; 1.问题2.需求描述3.实现3.1.使用3.2.代码&#xff08;直接看这都可以&#xff09; 1.问题 众所周知&#xff0c;mysql存储过程功能是没有oracle的包功能强大的&#xff0c;但是在去O的趋势下&#xff0c;mysql存储过程的…...

全球SAR卫星大盘点与回波数据处理专栏目录

近年来&#xff0c;随着商业航天的蓬勃发展&#xff0c;商业SAR卫星星座成为美欧等主要航天国家的发展重点&#xff0c;目前已在全球范围内涌现出众多初创公司进军商业SAR领域&#xff0c;开始构建大规模商业微小SAR卫星星座&#xff0c;其所具有的创新服务能力将为传统的商业遥…...

C语言重点编程题——21-30

目录 21. 从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印"not exist" ★★★★22.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分。 23.有N个学生,每个学生的信息包括学号、 性别、姓名、四门课的成绩…...

pip install 使用清华镜像源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 官方文档&#xff1a; pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...

VBA技术资料MF86:将PPT文件批量另存为PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…...

taro h5 ios解决input不能自动获取焦点拉起键盘

描述&#xff1a;页面中有个按钮&#xff0c;点击跳转到第二个页面&#xff08;有input&#xff09;&#xff0c;能直接获取焦点拉起键盘输入 安卓&#xff1a; 直接用focus() ios&#xff1a; focus无效&#xff0c;必须手动拉起 原理&#xff1a; 点击按钮的时候拉起一…...

「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」

介绍 使用Docker开发Golang云原生应用程序&#xff0c;使用Golang服务和Redis服务 注&#xff1a;写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达&#xff1a;Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…...

Vue环境的搭建

1.Vue开发的两种方式 &#xff08;1&#xff09;核心包传统开发模式 基于html/css/js文件&#xff0c;直接引入&#xff0c;开发Vue。 &#xff08;2&#xff09;工程化开发模式&#xff08;更常用的一种&#xff09;&#xff1a; 主要是基于构建工具&#xff08;例如,webp…...

在Spring Boot中实现单文件,多文件上传

这篇文章算是一篇水文&#xff0c;因为也没啥好讲的&#xff0c;在Spring Boot中&#xff0c;上传文件是我们常常做的&#xff0c;包括我们在实际开发过程中&#xff0c;我们也经常碰到与文件上传有关的功能&#xff0c;这也算是我们常用的一个功能了&#xff0c;毕竟作为开发者…...

如何在 Web 应用程序中查找端点?

如何在 Web 应用程序中查找端点? 这篇文章主要讲述了如何在网络应用中找到端点。以下是文章的主要要点: 端点是网络服务的访问地址,通过引用这个URL,客户可以访问服务提供的操作。端点提供了寻址Web服务端点所需的信息。 HTTP消息是服务器和客户端之间交换数据的方式,包…...

使用el-scrollbar实现定位滚动,以及el-scrollbar去掉横向滚动条

实现滚动 <el-scrollbar ref"scroll" style"height: 100%;">// ... </el-scrollbar>可以使用如下属性&#xff1a; 想要滚动到哪个指定位置&#xff0c;自己获取或计算 this.$refs[scroll].wrap.scrollTop 0 //想滚到哪个高度&#xff0c;…...

AOP + 自定义注解实现日志打印

1. 先定义个注解&#xff0c;让它作用于方法上 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface Loggable {}2. 定义切面 Aspect Component Slf4j public class LogMethodCallAspect {Pointcut("annotation(com.wy.spring_demo.aop.…...

美团YOLOv6量化部署实战方案

文章目录 1. 背景和难点2. 量化方案实战2.1 重参数化优化器2.1.1 RepOpt2.1.2 RepOpt 版本的 PTQ2.1.3 RepOpt 版本的 QAT2.2 基于量化敏感度分析的部分量化2.3 基于通道蒸馏的量化感知训练2.3.1 通道蒸馏2.3.2 YOLOv6 量化感知蒸馏框架3. 部署时优化3.1 图优化3.1.1 性能分析3…...

hive杂谈

数据仓库是一个面向主题的、集成的、非易失的、随时间变化的&#xff0c;用来支持管理人员决策的数据集合&#xff0c;数据仓库中包含了粒度化的企业数据。 数据仓库的主要特征是&#xff1a;主题性、集成性、非易失性、时变性。 数据仓库的体系结构通常包含4个层次&#xff…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...