当前位置: 首页 > 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,会采用红外结构光发射器。通过红外摄像头对缺乏纹理区域的斑点进行匹配,然后生成深度。然后在通过文章开头讲的外参变换过程,将两个红外摄像头产生的深度数据投影到彩色摄像头上。配合彩色摄像头的颜色,此时深度就能够进行立体建模。

http://www.lryc.cn/news/378108.html

相关文章:

  • 【路径规划】基于粒子群结合遗传算法实现机器人栅格地图路径规划
  • 内容安全复习 9 - 身份认证系统攻击与防御
  • Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建
  • 大数据开发语言Scala入门 ,如何入门?
  • 【人机交互 复习】第1章 人机交互概述
  • HCIP-HarmonyOS Device Developer 课程大纲
  • 蓝桥杯 经典算法题 查找两个总和为特定值的索引
  • Java | Leetcode Java题解之第169题多数元素
  • 十大机器学习算法深入浅出
  • 【论文笔记】Parameter-Effificient Transfer Learning for NLP
  • Qt异常处理
  • 【ElasticSearch】ElasticSearch实战
  • 48-3 内网渗透 - 令牌操纵
  • 架构师之 Kafka 核心概念入门
  • Redis通用命令详解
  • 物联网设备安装相关知识整理
  • React实现H5手势密码
  • [leetcode hot 150]第十五题,三数之和
  • 视频AI分析定时任务思路解析
  • tcp 粘包和拆包 及 解决粘包方案
  • 【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码
  • 华为设备telnet 远程访问配置实验简述
  • 在HTML中,如何正确使用语义化标签?
  • WHAT - 高性能和内存安全的 Rust(一)
  • 八、C#运算符
  • 【HiveSQL】join关联on和where的区别及效率对比
  • 如何解决windows自动更新,释放C盘更新内存
  • 初学51单片机之PWM实例呼吸灯以及遇到的问题(已解答)
  • 手机天线都去哪里了?
  • 计算机网络 —— 应用层(电子邮件)