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

视觉SLAM14精讲——相机与图像3.3

视觉SLAM14精讲

  1. 三维空间刚体运动1.0
  2. 三维空间刚体运动1.1
  3. 三维空间刚体运动1.2
  4. 李群与李代数2.1
  5. 相机与图像3.1
  6. 相机与图像3.2

视觉SLAM14精讲——相机与图像3.3

  • 视觉SLAM14精讲
  • 相机投影流程
  • 双目相机模型

相机投影流程

至此,有关相机三维刚体变换的所有因素已经汇集。书中对完整的投影过程做了总结。其中主要是将相机投影到世界坐标系。这里我们更进一步,以相机投影到另一个相机为目标,完整推理一遍其中的数学过程,加深对空间的理解。

请添加图片描述

完整的投影流程如下:
p 2 d l ⇌ K l K l − 1 1 Z l P d i s t o r t e d l ⇌ d i s t o r t u n d i s t o r t 1 Z l P 3 d l ⇌ 1 Z l × Z l P 3 d l ⇌ T − 1 ⋅ T ⋅ P 3 d r . . . p^l_{2d} \xrightleftharpoons[K_l]{K_l^{-1}} \frac{1}{Z^l} P^l_{distorted} \xrightleftharpoons[distort]{undistort} \frac{1}{Z^l} P^l_{3d} \xrightleftharpoons[\frac{1}{Z^l}]{\times Z^l} P^l_{3d} \xrightleftharpoons[ T^{-1} \cdot ]{T \cdot } P^r_{3d} \quad ... p2dlKl1 KlZl1Pdistortedlundistort distortZl1P3dl×Zl Zl1P3dlT T1P3dr...

上式中,左右相机记为上标 l l l r r r Z Z Z是该点图像坐标对应的深度值。 K K K是内参。 T T T是变换, 等价于左乘旋转矩阵加平移矩阵 R ⋅ ( ⋅ ) + t R \cdot (\cdot) + t R()+t p p p是2D像素点, P P P是3D点云。

要点:

  • 这个式子右侧被省略了。以左乘 T T T为对称轴,右侧和左侧是对称的操作,因此这个式子只需要记忆一半。
  • 左右的深度值是带下标的,因为左右看到物体的距离不是等价的。
  • 左右的内参也分别带下标。 即便左右目是型号一致的两个相机,内参和畸变参数也会不同。
  • 如果上式描述了随时间变化位姿的相机,则左右两侧 K K K D D D等价。
  • 如果你考虑过这个模型, 你会发现他其实可以是双目相机深度的左右转换。 T T T即外参。

当讨论外参的时候,指的就是 T T T或成对的 R , t R, t R,t。一些工程项目中,可能只需要其中一两个参数,但是项目人员仍然将其称为外参。你只需要知道他的本质是外参中的一部分。此外,一定有两个标定的目标出现在讨论话题内, 无论是两个传感器,还是世界坐标系相对一个传感器,外参一定形容的是两个对象之间的空间变换关系。经常有人跟我要外参,而不说明外参所指的另一个对象是什么,让人一头雾水。

双目相机模型

双目相机通过块匹配进行视差估计,然后通过下式计算深度:
d e p t h = f o c u s ∗ b a s e l i n e d i s p a r i t y depth = \frac{focus * baseline}{disparity} depth=disparityfocusbaseline
式中, d i s p r a i t y dispraity dispraity是视觉计算获得的视差,与彩色图像的分辨率一一对应。OpenCV中有块匹配的具体算法实现,常用的传统算法SGBM。通过构建sgbm对象进行视差的计算。

		cv::StereoSGBM sgbm;  sgbm.preFilterCap = 63;  int SADWindowSize=11;   int cn = 1;  sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3;  sgbm.P1 = 4*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;  sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;  sgbm.minDisparity = 0;  sgbm.numberOfDisparities = 32;  sgbm.uniquenessRatio = 10;  sgbm.speckleWindowSize = 100;  sgbm.speckleRange = 32;  sgbm.disp12MaxDiff = 1;  sgbm(left , right , left_disp_);  sgbm(right, left  , right_disp_); 

该算法对cpu计算量的压力很大,因此建议降采样计算。然而这种方案不能应对纹理缺乏的场景,有厂商,例如intel,会采用红外结构光发射器。通过红外摄像头对缺乏纹理区域的斑点进行匹配,然后生成深度。然后在通过文章开头讲的外参变换过程,将两个红外摄像头产生的深度数据投影到彩色摄像头上。配合彩色摄像头的颜色,此时深度就能够进行立体建模。

相关文章:

视觉SLAM14精讲——相机与图像3.3

视觉SLAM14精讲 三维空间刚体运动1.0三维空间刚体运动1.1三维空间刚体运动1.2李群与李代数2.1相机与图像3.1相机与图像3.2 视觉SLAM14精讲——相机与图像3.3 视觉SLAM14精讲相机投影流程双目相机模型 相机投影流程 至此,有关相机三维刚体变换的所有因素已经汇集。…...

【路径规划】基于粒子群结合遗传算法实现机器人栅格地图路径规划

研究方法: 基于粒子群优化算法结合遗传算法的机器人栅格地图路径规划是一种智能算法的应用。它将粒子群优化算法和遗传算法相结合,以寻找最优路径规划解决方案。 研究路线: 理论研究:了解粒子群优化算法和遗传算法的基本原理,并掌握相关的路径规划理论知识。 算法设计:…...

内容安全复习 9 - 身份认证系统攻击与防御

文章目录 基于生物特征的身份认证系统概述基于生物特征的身份认证 人脸活体检测检测方法未解决问题 基于生物特征的身份认证系统概述 作用:判别用户的身份、保障信息系统安全。 是识别操作者身份的过程,要保证其**物理身份(现实&#xff0…...

Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建

Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建 软件版本一、软件安装1、Python安装2、Pycharm安装3、pyside6或pyqt6安装①安装pyside6②安装PyQt6和pyqt6-tools二、Pycharm项目配置1、插件安装2、新建项目以及环境配置3、包管理安装三、在Pycharm中配置PySide61、pyside6 Qt…...

大数据开发语言Scala入门 ,如何入门?

Ai文章推荐 1 作为程序员,开发用过最好用的AI工具有哪些? 2 Github Copilot正版的激活成功,终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手,帮助你提高写代码效率 5 Jetbrains的…...

【人机交互 复习】第1章 人机交互概述

人机交互的知识点碎,而且都是文字,过一遍脑子里什么都留不下,但是背时间已经来不及了,最好还是找题要题感吧,加深印象才是做对文科的关键 一、概念 1.人机交互(Human-Computer Interaction,HCI)&#xff1…...

HCIP-HarmonyOS Device Developer 课程大纲

一:系统及应用场景介绍 1 -(3 课时) - HarmonyOS 系统介绍;HarmonyOs 定义;HarmonyOS 特征; - 统一 OS,弹性部署;硬件互助,资源共享;一次开发,多…...

蓝桥杯 经典算法题 查找两个总和为特定值的索引

题目: 给定一个数组,找到两个总和为特定值的索引。 例如给定数组 [1, 2, 3, -2, 5, 7],给定总和 7,则返回索引 [1, 4]。 若有多组符合情况则输出索引对中小索引最小的一组。 题解: 本题可以通过暴力枚举,枚举每两…...

Java | Leetcode Java题解之第169题多数元素

题目: 题解: class Solution {public int majorityElement(int[] nums) {int count 0;Integer candidate null;for (int num : nums) {if (count 0) {candidate num;}count (num candidate) ? 1 : -1;}return candidate;} }...

十大机器学习算法深入浅出

本栏目涉及对于回归算法、聚类算法、决策树、随机森林、神经网络、贝叶斯算法、支持向量机等十大机器学习算法的笔记 下面是笔记大纲,具体内容可查看**“十大机器学习算法深入浅出”**专栏,内容持续更新,欢迎订阅专栏和专注我! 1…...

【论文笔记】Parameter-Effificient Transfer Learning for NLP

题目:Parameter-Effificient Transfer Learning for NLP 阅读 文章目录 0.摘要1.引言2 Adapter tuning for NLP3 实验3.1 参数/性能平衡3.2 讨论 4.相关工作 0.摘要 克服微调训练不高效的问题,增加一些adapter模块,思想就是固定原始的网络中的参数&…...

Qt异常处理

初步警告:异常安全功能不完整!一般情况下应该可以工作,但类仍然可能泄漏甚至崩溃。 Qt本身不会抛出异常。而是使用错误码, 但是C可能会抛出异常。此外,有些类有用户可见的错误消息,例如QIODevice::errorString()或QSqlQuery::lastError()。这…...

【ElasticSearch】ElasticSearch实战

初步检索 检索 ES 信息 1)、GET /_cat/nodes:查看所有节点 127.0.0.1 44 83 1 0.01 0.01 0.00 dilm * 1b06a843b8e3 *代表主节点 2)、GET /_cat/health:查看健康状况 1718265331 07:55:31 elasticsearch yellow 1 1 4 4 0 0…...

48-3 内网渗透 - 令牌操纵

访问令牌操纵 Windows 操作系统的访问控制模型是其安全性的重要组成部分,主要由访问令牌(Access Token)和安全描述符(Security Descriptor)构成。访问令牌是访问者持有的,而安全描述符则由被访问对象持有。通过对比访问令牌和安全描述符的内容,Windows 可以判断访问者是…...

架构师之 Kafka 核心概念入门

Kafka 核心概念 作为架构师,理解 Kafka 的核心概念至关重要。这些概念是构建高效、可靠的 Kafka 系统的基础。 以下是需要掌握的 Kafka 核心概念及其详细说明: 1. Topic 定义:Topic 是 Kafka 中用于存储和分类消息的逻辑命名空间。每个 Topic 代表一类数据流, 例如日志、…...

Redis通用命令详解

文章目录 一、Redis概述1.1 KEYS:查看符合模板的所有 key1.2 DEL:删除一个指定的 key1.3 EXISTS:判断 key 是否存在1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除1.5 TTL:查看一个 ke…...

物联网设备安装相关知识整理

拓扑图 对于ADAM-4150先接设备的整体的供电。 ADAM-4150就涉及到几个电子元器件的连接,一个是485-232的转换器,一个是将RS-232转换为USB的转接口,因为现在的计算机很多都去掉了RS-232接口而使用USB接口。 4150右侧有个拨码,分别两…...

React实现H5手势密码

监测应用进入前后台 在JavaScript中,监听H5页面是否在前台或后台运行,主要依赖于Page Visibility API。这个API在大多数现代浏览器中都是支持的,包括苹果的Safari和谷歌的Chrome(也就基本覆盖了Android和iOS平台)。下…...

[leetcode hot 150]第十五题,三数之和

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…...

视频AI分析定时任务思路解析

序言: 最近项目中用到视频ai分析,由于sdk涉及保密,不便透露,仅对定时任务分析的思路作出分享,仅供参考。 1、定时任务 由于ai服务器的性能上限,只能同时对64个rtsp流分析一种算法,或者对8个rts…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...