泛化的最近点迭代法(Generalized-ICP)

        Generalized-ICP算法是由斯坦福大学的Aleksandr V. Segal、Dirk Haehnel和Sebastian Thrun提出的,于2009年在Robotics science and system会议上发表。

        GICP是一种ICP算法的变体,其原理与ICP算法相同,之所以称为泛化的ICP算法是因为大多数ICP框架没有被修改,仍用kd树检索临近点以保持速度和简单性,GICP所提出的泛化只处理目标函数的迭代计算,对收敛函数进行优化,将协方差矩阵计算加入误差函数。

        GICP是一种ICP算法的变体,其原理与ICP算法相同,之所以称为泛化的ICP算法是因为大多数ICP框架没有被修改,仍用kd树检索临近点以保持速度和简单性,GICP所提出的泛化只处理目标函数的迭代计算,对收敛函数进行优化,将协方差矩阵计算加入误差函数。

其标准算法可以分为两步: (a)确定两组点云之间的点的对应关系; (b)计算一个使对应点之间的距离最小化的变换;

  ICP算法核心的核心部分在伪码的第五行:在点云A中查找R·bi + t的对应点,为了保持算法的简单性,选择欧式距离最小的点作为对应点;      第七行:寻找最佳的将R·bi + t变换到mi的变换函数。这里最佳变化函数通过使一个特定的损失函数最小化确定,这个损失函数的不同也是本节提到的三种算法的根本区别。

        ICP算法有很多变体,其中point-to-plane的变体利用表面法线信息提高了性能。在标准ICP算法中,通过迭代使得对应点的欧氏距离即∑▒||R·b_i+t−m_i||^2最小化,但point-to-plane变体中,是使源表面上的点沿目标表面的曲面法线投影到切平面子空间上的误差最小化,如图,源表面上的点s1沿目标表面上的点d1的法线方向l1投影到d1的切平面上,投影点到d1的距离即为所求误差。

这一变化是通过改变标准ICP算法Algorithm 1中的第5行完成的,其中表示mi的曲面法线:

 而GICP则是在这一步对目标函数的迭代估计上引入了概率模型,但是对应点的查找仍然使用欧式距离,而非概率度量,从而仍能使用kd树来查找最近点,保持了ICP相对于其他完全依赖概率模型的算法的主要优势——速度和简单性。     假设点云A={ai}和B={bi}(i=1,...,n)是已经完成对应点匹配的两个点云,即ai与bi是对应点。建立一种点云概率模型,假设存在一组潜在的点A ̂={(a_i) ̂}和B ̂={(b_i) ̂}符合高斯分布,且点ai和点bi是从和中选取,即:

ai和bi是点(a_i) ̂和(b_i) ̂的真实位置,{C_i^A}和{C_i^B}是已知的协方差矩阵。定义残差d_i^R,t=b_i− R·a_i−t,则有:

 对于真实位置的变换(R*,t*)则有:

 接下来通过最大似然估计法(Maximum Likelihood Estimation, MLE)对R*和t*进行估计,则有最大似然函数:

由于上式不是凸函数,不便求其最大值,所以将(R,t)放在协方差中再利用MLE进行估算,将优化问题简化为最小化损失函数:

 其中,M_i=(C_i^B+RC_i^AR^T)^−1     上式即是GICP算法的核心内容。容易发现当令{C_i^A}=0和{C_i^B}=1时,得到的正是标准ICP的算式,即标准ICP算法是泛化ICP算法的一种特殊情况。

在这种形式下也简化了梯度计算,用r_i表示残差,即r_i=b_i−R·a_i−t,梯度可以表示为:

   由于这是一个约束优化问题,R必须是一个旋转矩阵,所以不能使用共轭梯度下降来解决。引入欧拉参数对旋转矩阵R进行描述,欧拉参数化的优点是使用了三个独立的参数(θ_x,θ_y,θ_z)。

   由于这是一个约束优化问题,R必须是一个旋转矩阵,所以不能使用共轭梯度下降来解决。引入欧拉参数对旋转矩阵R进行描述,欧拉参数化的优点是使用了三个独立的参数(θ_x,θ_y,θ_z)。

则有R相对于θ的梯度:

通过链式规则,有:

GICP中使用的点云协方差矩阵与传统的点云协方差矩阵的定义不同,由于现实物体表面是分段可微的,因此GICP假设数据集是局部平面的,即点服从平面分布,每个采样点在其局部平面方向上分布的协方差很高,而在曲面法线方向上分布的协方差很低。则可以设计一个模型,使得点在法线方向具有较小的方差,设为,值为0.001;在平面方向具有较大的方差,设为1:

 这里的R_ni是一个旋转矩阵,将基底向量e1旋转到点的法线方向。实际计算中,这个旋转矩阵是通过计算该点附近的点的协方差矩阵,并进行奇异值分解(Singular Value Decomposition,SVD)得到的,即为Σ ̂=UDU^T中的矩阵U。

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

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

相关文章

react-日期选择器封装

文件 import { useMemo, useState, useEffect } from "react" import dayjs, { Dayjs } from "dayjs" import "dayjs/locale/zh-cn" import "./App.css" dayjs.locale("zh-cn")function SimpleCalendar() {// 当前时间对象…

802.11 wireshark 抓包

80211 wireshark 抓包 前言配置 monitor软件配置wireshark 操作 前言 本人习惯使用 Omnipeek 抓包分析,所以 wireshark 的实验只讲到抓包完成。 Windows 环境采用 wireshark 抓包是比较麻烦的,因为支持在 Windows 环境中支持抓包的网卡并不多&#xff0…

Spring面试篇章——Spring基本概述

Spring 的基本概述 Spring学习的核心内容—一图胜千言 IOC:控制反转,可以管理 Java 对象AOP:切面编程JDBCTemplate:是Spring提供一套访问数据库的技术,应用性强,相对好理解声明式事务:基于IOC …

docker compse简介与安装

目录 1. Docker Compose 简介 2. Docker Compose 安装 2.1 在 Ubuntu 上安装 Docker Compose 2.1.1 通过 apt 安装 2.1.2 使用官方脚本安装最新版本 2.2 在 CentOS 上安装 Docker Compose 2.2.2 使用官方脚本安装最新版本 2.2.3 使用 pip 安装 2.3 在 openEuler 上安装…

Python面试宝典第25题:括号生成

题目 数字n代表生成括号的对数&#xff0c;请设计一个函数&#xff0c;用于能够生成所有可能的并且有效的括号组合。 备注&#xff1a;1 < n < 8。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()"…

【ArcGIS+CityEngine】自行制作Lod1城市大尺度白膜数据

数据准备 50多个城市建筑矢量数据 链接&#xff1a;https://pan.baidu.com/s/1FiwTfXDwQ6tMDRACAwUZwQ 提取码&#xff1a;DYSK 数据分析 数据属性Floor&#xff0c;为建筑物楼层信息&#xff0c;据此信息下面将在CityEngine软件生成Lod1白膜数据。 软件准备 CityEngi…

创建了Vue项目,需要导入什么插件以及怎么导入

如果你不知道怎么创建Vue项目,建议可以看一看这篇文章 怎么安装Vue的环境和搭建Vue的项目-CSDN博客 1.在idea中打开目标文件 2.系在一个插件Vue.js 3.下载ELement UI 在Terminal中输入 # 切换到项目根目录 cd vueadmin-vue # 或者直接在idea中执行下面命令 # 安装element-u…

[GYCTF2020]Blacklist1

打开题目 判断注入类型&#xff0c;输入1试试 输入2 输入1 判断为字符型注入 堆叠查询2;show databases;# 然后来输入2; show tables;#来查看数据库的表 然后我们通过FlagHere表来查看列输入2;show columns from FlagHere;# 来查看列 、 重新构造payload&#xff1a;0;HAND…

基于FPGA的高精度多通道同步AD采集系统开发及数字信号处理算法应用,基于FPGA的多通道同步AD采集系统开发及数字信号处理算法实现

FPGA多通道同步AD采集 AD7606 8通道16位高精度同步采集系统开发&#xff0c;采样率200KSPS&#xff0c;采集数据支持DDR3缓存、串口发送、USB2.0上传、千兆以太网上传等。 支持基于FPGA的数字信号处理算法开发 ID:77500703611886617 塞纳河山 FPGA多通道同步AD采集是一项基于…

官宣!新增博士硕士点审核结果已出!附查询方法

2024年7月31日&#xff0c;新增博士硕士学位授权结果正式公示&#xff01; 多所高校&#xff0c;新增博士和硕士学位授权点 大家可前往该网站查询&#xff1a;https://zjpy.cdgdc.edu.cn/sqshjggb 另外说明一下&#xff0c;这些学校不一定今年就开展招生工作 一切以学校的官…

9.Redis的Set类型

Redis的Set结构与java中的HashSet类似。 可以看做是一个value为null的HashMap。 特点 1.无序 2.元素不可重复 3.查找快 4.支持交集、并集、差集等功能 应用场景 实现共同关注&#xff0c;共同好友。 常见命令 sadd key 元素1 元素2 给set集合添加一个或多个元素 smem…

Kimi+AiPPT的正确打开方式!文档一键转换PPT!限时免费!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 我之前…

做管理,一定要避开这6个坑,才能成就优秀管理者

做管理&#xff0c;一定要避开这6个坑&#xff0c;才能成就优秀管理者 一、被平庸的员工绑架 要是领导不敢或者不愿意惩罚或者开除那些没完成任务的员工&#xff0c;那优秀的员工就会觉得&#xff0c;做得好做得差都一样&#xff0c;那谁还愿意努力呢&#xff1f; 二、总想改变…

基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 无刷直流电机&#xff08;BLDCM&#xff09;原理 4.2 六步换相逆变器 4.3 双PI控制器设计 5.完整工程文件 1.课题概述 基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真。双PI控制…

DockerCompose部署示例

目录 前言 1. 初识DockerCompose 2. 安装DockerCompose 3. 部署微服务项目 1&#xff09;找一个目录&#xff0c;创建一个新的cloud-demo文件夹。 2&#xff09;在cloud-demo文件夹创建一个docker-compose.yml文件&#xff0c;然后编写下面内容&#xff1a; 3&#xff09…

【视频讲解】后端增删改查接口有什么用?

B站视频地址 B站视频地址 前言 “后端增删改查接口有什么用”&#xff0c;其实这句话可以拆解为下面3个问题。 接口是什么意思&#xff1f;后端接口是什么意思&#xff1f;后端接口中的增删改查接口有什么用&#xff1f; 1、接口 概念&#xff1a;接口的概念在不同的领域中…

R语言统计分析——自编函数

参考资料&#xff1a;R语言统计分析【第2版】 一个函数的结构大致如此&#xff1a; myfunction<-function(arg1,arg2,...){ statements return(object) } 函数中的对象只在函数内部使用。返回对象的数据类型是任意的。 假设我们要编写一个函数&#xff0c;用来计算数据对象…

2、postgresql运行架构

2 运行架构 以为编译安装为模板讲解各个文件功能作用&#xff0c;切换为postgres用户 目录位置数据库数据目录/pgdata/10/data安装包目录/opt/pg10/ 2.1 安装包目录详解 -bash-4.2$ pwd /opt/pg10 -bash-4.2$ tree -L 1 . . ├── bin #应用程序 ├── include #c/c…

Debian12 安装Docker 用 Docker Compose 部署WordPress

服务器准备&#xff1a; 以root账号登录&#xff0c;如果不是root&#xff0c;后面指令需要加sudo apt update apt install apt-transport-https ca-certificates curl gnupg lsb-release添加GPG密钥&#xff0c;推荐国内源 curl -fsSL https://mirrors.aliyun.com/docker…

c语言指针中“数组名的理解”以及“一维数组传参”的本质

数组名的理解 数组名就是数组首元素的地址。 例如&#xff1a;输入一个数组的所有元素&#xff0c;再打印出来。 另一种写法 以上可以看出&#xff1a;*arri&#xff09; arr[i] 也即是&#xff1a;*(iarr)i[arr] 本质上无区别 1&#xff1a;数组就是数组&#xff0c;是一块…