SLAM之反求运动和地图点(对极几何)

news2025/2/22 21:12:00

简介

前面的文章介绍了如何在已知空间点的情况下在不同坐标系中的表示(刚体的坐标变换),以及如何将空间中的点投影到相机中生成图像,但是现实中的情况却是相反的情况(空间点以及坐标系之间的变换未知),这也正是SLAM要求解的问题。我们知道的只是一张张的图像以及像素在图像中的位置(2D),或者知道空间中的点在相机坐标系下的三维位置(3D)、或者知道一部分空间位置和其在图像像素中的位置,那么如何求解图像中所有或者部分像素点的位置就是SLAM要求解的问题,针对以上三种情况,有如下几种求解方式:

  • 1 只知道图像中的像素点(2D-2D): 对极几何
  • 2 知道图像中的点以及深度信息(3D-3D):ICP
  • 3 知道图像的3D点以及对应的2D点(3D-2D):PnP

变换或者投影时我们是将同一个点映射到不同的图像中,而通过像素点来反求解运动和地图点时,我们是通过不同的图像求解同一个空间点,因此需要找到同一个点在不同图像中的位置,这就是SLAM中的数据关联问题,该文章假设已经完成了数据的关联问题。

求解相机相对位姿

概念

极平面:

空间点P、两个位置相机光心O三个点构成的平面

极线

极平面与相机成像平面的交线l

极点

相机光心和成像平面的交点e
在这里插入图片描述

几何约束的作用

描述空间点、相机光心在同一平面、从而构建约束条件,求解相机运动

利用几何约束求解R/t

1 推导几何约束公式

  • 1 建立投影模型和坐标变换模型:首先构建空间点P在两个图像中的投影关系,P为第一帧相机坐标系下的坐标
    在这里插入图片描述

  • 2 将P归一化,使其失去深度信息,p1为像素点的其次坐标,归一化相当于将把P的空间位置,投影到归一化平面。

  • 在这里插入图片描述

  • 3 通过内参反求归一化坐标P(x1、x2代表P在两个相机的归一化平面坐标)
    在这里插入图片描述

  • 4 带入坐标转换模型得到约束方程
    在这里插入图片描述

  • 5 (处理方程)同时左乘t的反对称矩阵和x2的转置
    在这里插入图片描述

  • 6 利用叉乘和点乘的概念得到约束方程并带入归一化投影方程得到对极几何约束

在这里插入图片描述

  • 7 总结方程得到本质矩阵E和基础矩阵F
    在这里插入图片描述
    本质矩阵和基础矩阵之间只相差1个内参,只需要求解本质矩阵即可,内参一般都是已知的

2 本质矩阵E:通过本质矩阵求解R/t

  1. 几何意义
    本质矩阵是一个3x3的矩阵,用于描述两个摄像头之间的相对位置和方向。它涉及到摄像头的旋转和平移,用于将一个摄像头的点投影到另一个摄像头的图像平面上。它仅仅包含旋转和平移信息,不包含摄像头的内参(如焦距和光心)。

  2. 作用
    在SLAM系统中,当我们需要恢复场景的三维结构时,了解摄像头的相对运动是非常重要的。本质矩阵提供了一种**从两个图像中估计摄像头的相对姿态(旋转和平移)的方式。**通过本质矩阵,我们可以计算出点在两个不同视图中的对应关系,从而重建三维结构。

  3. 特点

    • 本质矩阵是一个3x3的矩阵,但它只有5个自由度(3个旋转和2个平移)。
    • 由于它只描述相对运动,所以不包含尺度信息(因为是通过归一化坐标推导出来的)。
    • 它是对极几何的一部分,本质矩阵中包含的信息可以用来创建对极约束,这是一种几何约束,用于找到图像之间的点对应关系。
  4. 8点法求解本质矩阵
    常见的求解本质矩阵的方法是使用八点法或五点法。这些方法基于一组点的对应关系(至少8个或5个),通过解线性方程组来计算本质矩阵。在实际应用中,为了提高精度,通常会使用RANSAC等随机抽样一致性算法来处理噪声和异常值。

  5. 通俗理解
    想象一下你用两只眼睛看同一个物体,每只眼睛看到的图像略有不同。本质矩阵就是一个工具,它告诉我们这两个视图之间的差异是如何的。具体来说,它告诉我们头部的旋转和平移是如何的。通过了解这些差异,我们可以更好地理解我们周围的三维世界。

  6. 通过本质矩阵分解求解R/t
    奇异值(SVD)分解方法

  7. 本质矩阵缺点——退化场景

  • 1 相机发生纯旋转:此时E的自由度会下降t为0
  • 2 特征点在同一平面上:本质矩阵E本身不直接包含深度信息,但是它的计算和解释都依赖于3D空间中的结构和运动。
  • 3 解决方法:使用单应矩阵

3 单应矩阵:通过单应矩阵解决退化问题

单应矩阵(Homography Matrix)

单应矩阵是一种在计算机视觉和图像处理中常用的变换,用于描述两个平面之间的映射。它是一个3x3的矩阵,用于描述投影几何中的线性变换。它可以描述旋转、缩放、剪切和透视变换的组合。

原理

单应矩阵H的基本原理是使用一种称为“单应性变换”或“射影变换”的方法来映射二维图像上的点。对于两个平面之间的任意点p和p’,我们有以下关系:

p’ = Hp

其中p和p’分别是在两个图像中对应的点的齐次坐标,H是单应矩阵。

作用和通俗理解

单应矩阵用于描述在射影变换下,一个平面上的点如何映射到另一个平面上。通俗地说,你可以想象单应矩阵是描述如何从一个平面(如一张图片)到另一个平面(如另一张图片)的“变形规则”。这种变形可以包括旋转、缩放、剪切和透视变换。

在日常生活中,单应变换的一个常见例子就是在不同的视角下看同一张图片。例如,当你从不同的角度看一张贴在墙上的画时,画的形状和大小可能会变,但它们之间的关系可以由单应矩阵来描述。

应用范围

单应矩阵在计算机视觉和图像处理中有广泛的应用,例如:

  1. 图像配准和拼接:当我们需要将多张图片拼接在一起以创建全景图时,可以使用单应矩阵来对齐图像。
  2. 增强现实:在增强现实中,我们可以使用单应矩阵将虚拟物体正确地投影到真实世界的图像上。
  3. 3D重建:在从多视图图像进行3D重建时,单应矩阵可以描述相邻图像之间的关系。

单应矩阵和本质矩阵的关系

单应矩阵和本质矩阵都是描述图像之间关系的工具,但它们的使用场景和所包含的信息是不同的。

本质矩阵E描述的是两个相机视图之间的相对旋转和平移,适用于场景中的3D点在两个相机视图之间的变换,尤其是当两个相机有相对运

动时。本质矩阵不包含尺度信息,只能恢复到除了尺度之外的相机运动。

单应矩阵H则是描述两个平面之间的映射,适用于所有点都在同一个平面上的情况,比如地面、墙面等。单应矩阵能够描述更广泛的变换,包括旋转、平移、缩放和透视等。

总的来说,单应矩阵和本质矩阵都是在计算机视觉中描述图像间关系的重要工具,但它们的适用场景和提供的信息有所不同。在实际应用中,我们需要根据具体的任务和场景选择合适的工具。

获得地图点(通过R/t求解)

单目相机无法获取空间点的深度信息只是通过归一化坐标求得的旋转和平移,其平移t也缺失一个深度信息,而地图的构建必须要获得深度信息。

方法:

1、三角测距

  • 原理:
    三角测距法的基本原理源于几何学中的三角形性质。给定一个三角形,如果我们知道一个边长(通常称为基线)和与这个边相对的两个角度,我们可以利用三角形的性质来计算其他两个边的长度。在计算机视觉中,我们通常使用两个相机的位置作为基线,并且使用每个相机观察到的角度来计算3D点的深度。
  • 推导公式:
    在这里插入图片描述
    在这里插入图片描述
  • 特点:
    1、需要相机有一个位移(视差)纯旋转不行
    2、视差太小,会导致像素匹配不准,则会导致误差大
    3、视差太大,像素不确定性小,深度误差也会小,但是会丢失部分匹配特征

2、最小二乘法

总结

1、单目相机通过对极几何求解运动、通过三角化获得空间点
2、对极几何和三角化都需要相机有一个初始位移来初始化平移和深度信息
3、对极几何求解的相机位姿和深度信息都只是一个相对值,并不是真实的轨迹和地图点,其原因是t的尺度不知道,求解的深度信息

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

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

相关文章

【裸机开发】定时器按键消抖(EPIT)

实际工程中,不能直接通过延时来消抖 ! 这里我们采用定时器来消抖,这也是内核处理消抖的一种方式。 目录 一、基本原理 1、延时消抖的弊端 2、定时器消抖原理 二、按键消抖实现 1、按键中断 2、定时器中断 三、附加:按键 / 定时器中断初…

前后端分离开发跨域问题总结

前后端分离开发跨域问题总结 一、什么是跨域访问二、解决跨域问题1、Vue前端配置代理解决跨域2、SpringBoot后端配置解决跨域2.1 跨域配置类CorsConfig(常用)2.2 Controller添加CrossOrigin注解2.3 添加CORS过滤器CorsFilter(常用&#xff09…

selenium之鼠标操作

首先导入ActionChains类,该类可以完成鼠标移动,鼠标点击事件,键盘输入、内容菜单交互等交互行为。 from selenium.webdriver.common.action_chains import ActionChains 操作语法: 第一步:初始化ActionChains类&…

系列二、Maven下载安装配置

一、下载 链接:https://pan.baidu.com/s/1BvwLzAk9kRSP-daxSYe4Vw?pwdyyds 提取码:yyds 二、安装 第一步:下载安装包 第二步:解压至安装目录,例如 第三步:配置settings.xml(主要配置maven本…

Open ai 开发指南:gpt接口的第一个问答机器人demo

目录 内容 Python代码 C 代码 workspace 文件 BUILD文件 Java 代码 maven文件 执行效果 内容 基于openai接口实现循环gpt问答,并使用一个文件将问答内容进行记录。 Python代码 # -*- coding: utf-8 -*- import openai import time from pathlib import P…

100天精通Python(可视化篇)——第93天:Pyecharts绘制多种炫酷饼图参数说明+代码实战(百分比、环形、玫瑰、内嵌、多个子图饼图)

文章目录 专栏导读1. 基础饼图add函数简单案例改变颜色 2. 百分比饼图3. 环形饼图4. 玫瑰饼图5. 内嵌环图6. 多个饼图 专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整…

学习前端开发,能抛弃HTML和CSS吗?

前言 前端开发里面HTML和CSS是两个非常重要的核心技术,它们是构建网页和应用程序界面的基础。 HTML(超文本标记语言)是用于描述网页结构的标记语言,它定义了网页的内容、布局和元素。几乎所有的网页都使用HTML来组织和呈现内容&…

5.6.3 套接字

5.6.3 套接字 我们先以示例引入套接字的基本内容,我们知道在邮政通信的时候我们需要在信封上写明我们的收件地址,比如北京市海淀区双清路30号清华大学8444号某某某收,这其中我们需要一个物理地址“北京市海淀区双清路30号”,一个…

SpringBoot 如何使用 Ehcache 作为缓存?

SpringBoot 如何使用 Ehcache 作为缓存? 在现代的应用程序中,缓存是一个非常重要的概念。缓存可以帮助我们加速应用程序的响应时间,减少数据库或其他服务的负载,并提高系统的可扩展性和容错性。Spring Framework 提供了强大的缓存…

Linux下的su指令和last指令

文章目录 1 切换用户命令(su)2 查看本机的所有登录记录(last)3 退出当前登录账户(exit) 1 切换用户命令(su) su 命令可以切换成不同的用户身份,命令格式如下&#xff1a…

【文本SR:轻量级:残差注意力】

A Lightweight Deep Residual Attention Network for Single Image Super Resolution (一种用于单幅图像超分辨率的轻量级深度残差注意力网络) 本文将稀疏编码技术应用于基于学习的文本图像超分辨率(SR)中,以提高光学…

浅析做好数据安全风险评估的重要性

一、被忽略的数据安全风险 快速问答 你知道公司内有多少数据资产吗? 这些数据资产中哪些数据更为重要? 如何保护公司数据资产,防止数据泄露&劫持等事件发生? 如果你一问三不知的话,也许你该好好思考数据安全这项…

数据库系统概论(三)数据库设计、数据库恢复技术、并发控制

作者的话 前言:总结下知识点,自己偶尔看一看。 一、数据库设计 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统 1.1概述 1.1.1数据库设计…

mysql 简单定位慢查询并分析SQL执行效率

实际的日常开发工作中可能会遇到某个新功能在测试时需要很久才返回结果,这时就应该分析是不是慢查询导致的,如果确实有慢查询,就需要来学习怎么找到慢查询和怎么分析 SQL 执行效率? 定位慢 SQL 有如下两种解决方案: …

ClickHouse-简单了解

文章目录 前言数据库引擎数据表引擎Log 系列Integration 系列Special 系列MergeTree 系列 ClickHouse 数据类型ClickHouse 常用的函数 前言 什么是 ClickHouse?简单来说它是一个高性能,面向列的SQL数据库管理系统(DBMS)&#xff…

嵌入式知识分享——GDB程序调试方法说明

前 言 本指导文档适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:Ubuntu 18.04.4 64bit 虚拟机:VMware15.1.0 U-Boot:U-Boot-2020.04 Kernel:Linux-5.4.70 Linux…

接口调用重放测试-业务安全测试实操(21)

接口调用重放测试。 接口调用遍历测试 接口调用重放测试 测试原理和方法 在短信、邮件调用业务或生成业务数据环节中,如短信验证码、邮件验证码、订单生成、评论提交等,对业务环节进行调用(重放) 测试。如果业务经过调用(重放) 后多次生成有效的业务或数据结果,可判断为存在…

PMP®证书增持 CSPM-2证书,哪里办理?

2023年6月起,持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2,不用重新考试,不用重新学习,原PMP证书不影响正常使用,相当于多了一个国标项目管理领域的证书。 第一步准备资料 1、填写能力评价表 2、提供2张2寸蓝底…

在 Jetson Nano 上安装 ncnn 深度学习框架。

Install ncnn deep learning framework on a Jetson Nano. Introduction.RTTI.CMake 3.18.4.Dependencies.Benchmark.Introduction. 本页面将指导您在 Jetson Nano 上安装腾讯的 ncnn 框架。由于 ncnn 框架面向移动设备(例如 Android 手机),因此它不支持 CUDA。然而,大多数…

考虑储能的电价套利收益模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…