SLAM十四讲【四】相机与图像

news2025/3/28 10:53:21

SLAM十四讲【四】相机与图像

SLAM十四讲【一】基本概念
SLAM十四讲【二】三维空间刚体运动
SLAM十四讲【三】李群与李代数
SLAM十四讲【四】相机与图像
SLAM十四讲【五】线性优化
SLAM十四讲【六】视觉里程计
SLAM十四讲【七】回环检测
SLAM十四讲【八】建图

文章目录

  • SLAM十四讲【四】相机与图像
  • 一、相机模型
    • 1.1 针孔相机模型
    • 1.2 畸变模型
    • 1.3 双目相机模型
    • 1.4 RGB-D相机模
  • 二、图像


一、相机模型

  相机将三维世界中的坐标点(单位为米)映射到二维图像平面(单位为像素)的过程能够用一个几何模型进行描述。这个模型有很多种,其中最简单的称为针孔模型。针孔模型是很常用而且有效的模型,它描述了一束光线通过针孔之后,在针孔背面投影成像的关系。在本书中我们用一个简单的针孔相机模型对这种映射关系进行建模。同时,由于相机镜头上的透镜的存在,使得光线投影到成像平面的过程中会产生畸变。因此,我们使用针孔和畸变两个模型来描述整个投影
过程。

1.1 针孔相机模型

  小孔模型能够把三维世界中的蜡烛投影到一个二维成像平面。
在这里插入图片描述
  现在对这个简单的针孔模型进行几何建模。设O-x-y-z为相机坐标系,习惯上我们让z轴指向相机前方,轴向右,y轴向下(此图我们应该站在左侧看右侧)。O为摄像机的光心,也是针孔模型中的针孔。现实世界的空间点P,经过小孔O投影之后,落在物理成像平面 O’-x’-y’上,成像点为P。设P的坐标为 [X,Y,Z]^T ,P为 [X’,Y’,Z’] T,并且设物理成像平面到小孔的距离为f(焦距)。那么,根据三角形相似关系,有
在这里插入图片描述
  实际相机得到的图像不是倒立的,会由软件处理,比如opencv或手机系统的相机处理后的图像都是正像,而iphone手机拿到的就是需要翻转的像。
在这里插入图片描述

  那么整理可得:
在这里插入图片描述
  为了描述传感器将感受到的光线转换成图像像素的过程,我们设在物理成像平面上固定着一个像素平面o-u-v。我们在像素平面得到了P的像素坐标: [u,v]T
像素坐标系通常的定义方式是:原点d位于图像的左上角,u轴向右与轴平行,v轴向下与y轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个原点的平移。我们设像素坐标在u轴上缩放了α倍,在v轴上缩放了B倍。同时,原点平移了 [c_x,c_y]T 。那么,P的坐标与像素坐标 [u,v]T 的关系为
在这里插入图片描述
  代入并把af合并成f,把bf合并成fy,得
在这里插入图片描述
  其中,f的单位为米,a,B的单位为像素/米,所以fx,fy和Cx,Cy的单位为像素。把该式写成矩阵形式会更加简洁,不过左侧需要用到齐次坐标,右侧则是非齐次坐标:
在这里插入图片描述
  将Z移到左侧
在这里插入图片描述
  中间的矩阵就是相机的内参数矩阵K,这个内参在出厂后基本不变,一般需要自己标定。
  因为相机在运动,所以还存在一个相机位姿变换,由旋转矩阵R和平移向量t来描述:
在这里插入图片描述
  相机的位姿R,t就是相机的外参数,外参是会随着相机运动发生变化,也是SLAM中待估计的目标,代表
着机器人的轨迹。
  上式表明,我们可以把一个世界坐标点先转换到相机坐标系,再除掉它最后一维的数值(即该点距离相机成像平面的深度),这相当于把最后一维进行归一化处理,得到点P在相机归一化平面上的投影:
在这里插入图片描述
  归一化坐标可看成相机前方2=1处的平面上的一个点,这个2=1平面也称为归一化平面。归一化坐标再左乘内参就得到了像素坐标,所以我们可以把像素坐标[u,v]^T 看成对归一化平面上的点进行量化测量的结果。从这个模型中也可以看出,如果对相机坐标同时乘以任意非零常数,归一化坐标都是一样的,这说明点的深度在投影过程中被丢失了,所以单目视觉中没法得到像素点的深度值。

1.2 畸变模型

  为了获得好的成像效果,我们在相机的前方加了透镜。透镜的加人会对成像过程中光线的传播产生新的影响:一是透镜自身的形状对光线传播的影响;二是在机械组装过程中,透镜和成像平面不可能完全平行,这也会使光线穿过透镜投影到成像面时的位置发生变化。
  由透镜形状引起的畸变(Distortion,也叫失真)称为径向畸变。在针孔模型中,一条直线投影到像素平面上还是一条直线。可是,在实际拍摄的照片中,摄像机的透镜往往使得真实环境中的一条直线在图片中变成了曲线。越靠近图像的边缘,这种现象越明显。由于实际加工制作的透镜往往是中心对称的,这使得不规则的畸变通常径向对称。它们主要分为两大类:桶形畸变和枕形畸变。桶形畸变图像放大率随着与光轴之间的距离增加而减小,而枕形畸变则恰好相反。在这两种畸变中,穿过图像中心和光轴有交点的直线还能保持形状不变。
在这里插入图片描述

  除了透镜的形状会引入径向畸变,由于在相机的组装过程中不能使透镜和成像面严格平行,所以也会引入切向畸变。
在这里插入图片描述
  考虑归一化平面上的任意一点p,它的坐标为 [x,y]T ,也可写成极坐标的形式 [r,θ]T ,其中r表示点p与坐标系原点之间的距离,表示与水平轴的夹角。径向畸变可以看成坐标点沿着长度方向发生了变化,也就是其距离原点的长度发生了变化。切向畸变可以看成坐标点沿着切线方向发生了变化,也就是水平夹角发生了变化。通常假设这些畸变呈多项式关系,即
在这里插入图片描述
  其中, [xdistorted,ydistored∫ 是畸变后点的归一化坐标。
  对于切向畸变,可以使用另外两个参数p1,p2进行纠正:
在这里插入图片描述
  联立两式,能够通过5个畸变系数找到这个点在像素平面上的正确位置:
  1.将三维空间点投影到归一化图像平面。设它的归一化坐标为 [x,y]^T
  2.对归一化平面上的点计算径向畸变和切向畸变。
在这里插入图片描述
  3.将畸变后的点通过内参数矩阵投影到像素平面,得到该点在图像上的正确位置。
在这里插入图片描述
  k1,k2,p1,p2,k3就组成了相机的畸变系数。通常对摄像头获取的图像去畸变后再进行图像处理。

1.3 双目相机模型

  双目视觉模型如下:
在这里插入图片描述
  其中,OL,OR为左右光圈中心,方框为成像平面,f为焦距。UL和UR为成像平面的坐标。请注意,按照图中坐标定义,U应该是负数,所以图中标出的距离为-UR.
  双目相机一般由左眼相机和右眼相机两个水平放置的相机组成。两个相机的光圈中心都位于轴上。两者之间的距离称为双目相机的基线(记作b),是双目相机的重要参数。
  现在,考虑一个空间点P,它在左眼相机和右眼相机各成一像,记作PL, PR。 由于相机基线的存在,这两个成像位置是不同的。理想情况下,由于左右相机只在轴上有位移,所以P的像也只在x轴(对应图像的u轴)上有差异。记它的左侧坐标为UL,右侧坐标为UR,几何关系上如图所示。根据 △PPLPR 和 △POLOR 的相似关系,有
在这里插入图片描述
在这里插入图片描述
其中d定义为左右图的横坐标之差,称为视差。根据视差,我们可以估计一个像素与相机之间的距离。视差与距离成反比:视差越大,距离越近。同时,由于视差最小为一个像素,于是双目的深度存在一个理论上的最大值,由fb确定。我们看到,基线越长,双目能测到的最大距离就越远;反之,小型双目器件则只能测量很近的距离。相似地,我们人眼在看非常远的物体时(如很远的飞机),通常不能准确判断它的距离。

1.4 RGB-D相机模

  RGB-D相机能够主动测量每个像素的深度,根据原理可分为两大类:通过红外结构光(StructuredLight)原原理测量像素距离和通过飞行时间(Time-of-Flight,ToF)原理测量像素距离。
在这里插入图片描述
  在红外结构光原理中,相机根据返回的结构光图案,计算物体与自身之间的距离。而在ToF原理中,相机向目标发射脉冲光,然后根据发送到返回之间的光束飞行时间,确定物体与自身的距离。
  在测量深度之后,RGB-D相机通常按照生产时的各相机摆放位置,自己完成深度与彩色图像素之间的配对,输出一一对应的彩色图和深度图。我们可以在同一个图像位置,读取到色彩信息和距离信息,计算像素的3D相机坐标,生成点云(PointCloud)。既可以在图像层面对RGB-D数据进行处理,也可在点云层面处理。
  RGB-D相机能够实时地测量每个像素点的距离。但是,由于使用这种发射-接收的测量方式,其使用范围比较受限。用红外光进行深度值测量的RGB-D相机,容易受到日光或其他传感器发射的红外光干扰,因此不能在室外使用。在没有调制的情况下,同时使用多个RGB-D相机时也会相互干扰。对于透射材质的物体,因为接收不到反射光,所以无法测量这些点的位置。此外,RGB-D相机在成本、功耗方面,都有一些劣势。

二、图像

在SLAM中,可以用opencv获取相机拍摄的图像、然后去畸变等,opencv的基础使用原文有部分讲解,不在此赘述。

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

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

相关文章

类和对象-运算符重载-C++

1.加号运算符重载 1.成员函数重载调用 函数的定义部分(这里的person是返回值类型,不是说构造函数) class person { public:person operator(person& p){person temp;temp.a this->a p.a;temp.b this->b p.b;return temp;}in…

2000-2019年各省地方财政耕地占用税数据

2000-2019年各省地方财政耕地占用税数据 1、时间:2000-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政耕地占用税 4、范围:31省 5、指标说明:耕地占用税是地方财政的一种税收&…

从零到一开发一款 DeepSeek 聊天机器人

AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人,旨在为用户提供自然、流畅的对话体验。通过…

S32K144外设实验(五):FTM周期中断

文章目录 1. 概述1.1 时钟系统1.2 实验目的 2. 代码的配置 1. 概述 1.1 时钟系统 FTM的CPU接口时钟为SYS_CLK,在RUN模式下最高80MHz。模块的时钟结构如下图所示。 从上图中可以看出,FTM模块的功能时钟为SYS_CLK,计数器的时钟源可以来源于三…

Android 静态壁纸设置实现方案

提示:Android 平台,静态壁纸实现方案 文章目录 需求:Android 实现壁纸 设置场景 参考资料实现方案直接调用系统 API,WallpaperManager 来实现 wallpaperManager.setResource系统源码分析系统app WallpaperPickerWallpaperPickerActivity ->…

在计算进程D状态持续时间及等IO的时间遇到的一处问题

一、背景 之前的博客 线程每次iodelay监控及D状态开始和结束监控并做堆栈记录-CSDN博客 里,我们讲到了通过内核模块抓取D状态的进程和等IO事件的方法,里面也用到了通过获取rq的symbol,再去获取rq里的rq_clock_task时间的方法(内核…

Android11-12-13 替换系统默认壁纸

替换默认壁纸,是客需中再普通不过的需求,这里整理作为笔记记录 文章目录 需求场景 关联资料需求实现拓展总结 需求 客制化客户壁纸需求,替换客户定制的壁纸。 场景 手机-平板相关产品,各种广告机、工控、消费级产品&#xff0c…

Buffer overFolw---Kryo序列化出现缓冲区溢出的问题解决

问题: 由于我的数据量太大,我设置批次为10000万,50w数据大概有400M左右,然后进行spark数据处理时候报错为org.apache.spark.SparkException:Kryo serialization failed:Buffer overFolw.Available:0,rquired 58900977,To …

【Linux】线程基础

🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.背景知识02.线程概念简单使用线程线程调度成本更低 01.背景知识 OS进行内存管理,不是以字节为单位的,而是以内存块为单位的,默认大小为4kb&…

「宇树科技」13家核心零部件供应商梳理!

2025年2月6日,摩根士丹利(Morgan Stanley)发布最新人形机器人研报:Humanoid 100: Mapping the Humanoid Robot Value Chain(人形机器人100:全球人形机器人产业链梳理)。 2025年2月20日&#xf…

Spring Boot 项目打包运行

打包成jar包&#xff0c;执行 java -jar 包名&#xff1b; 保证打出的jar包是独立可运行的包&#xff0c;需要xml中添加插件配置 <!-- SpringBoot应用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId&…

数据结构八股

线性数据结构 数组:数组的内存空间是连续的&#xff0c;随机访问的时间复杂度是01&#xff0c;适用于需要按索引访问元素的场景&#xff0c;但是插入和删除元素较慢&#xff0c;时间复杂度是On链表:链表是由节点组成&#xff0c;节点之间是分散存储的&#xff0c;内存不连续&a…

7.2 控件和组件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 C#工具箱位于编辑窗口的左侧&#xff0c;它默认内置了大量的控件和组件。控件一般派生于System.Windows.Forms.Control类&#xff0c;显…

transform

http://zhihu.com/question/445556653/answer/3254012065 西科技的文章 视频讲解 小白也能听懂的 transformer模型原理详解 self- attention 多头注意力机制 encoder decoder 机器翻译_哔哩哔哩_bilibili

思库拉水厂开业庆典千人大会回顾

近日,思库拉离子水厂在广州隆重举办了开业盛典,现场汇聚了逾千名嘉宾。此次盛会不仅是对思库拉离子水厂正式投产的庆祝,更是对思库拉品牌未来蓝图的一次展示。 现场氛围热烈,洋溢着浓厚的喜庆气息。参与者来自五湖四海,既有思库拉的忠实拥趸,也有对思库拉产品充满兴趣的潜在消费…

JAVA学习*Object类

Object类 Object类是所有类的父类 类中有一些方法&#xff08;都需要掌握&#xff09; toString()方法 在学习类的对象的时候有介绍过了&#xff0c;当我们重新给此方法就会打印类与对象的信息 equals()方法 在Java中的比较&#xff0c; 如果左右两侧是基本类型变量&#…

基于python脚本实现的打砖块小游戏

目录 1. 打砖块游戏 2. 初始化 Pygame 和设置屏幕 3. 定义游戏对象 3.1 定义玩家操作的paddle 3.2 定义球&#xff08;Ball&#xff09; 3.3 砖块&#xff08;Bricks&#xff09; 4. 游戏主循环 4.1 事件处理 4.2 板子移动 4.3 球移动和碰撞检测 4.4 绘制游戏对象 …

地理信息系统(GIS)在智慧城市中的40个应用场景案例

在智慧城市发展进程中&#xff0c;地理信息系统&#xff08;GIS&#xff09;作为关键技术之一&#xff0c;正扮演着不可或缺的角色&#xff0c;堪称智慧城市的神经中枢。通过空间数据分析优化城市管理&#xff0c;GIS技术为智慧城市的构建提供了强大的支持。 本文分享了GIS在智…

XSS Game(DOM型) 靶场 通关

目录 靶场网址 Ma Spaghet! 分析 解题 Jefff 分析 解题 方法一 方法二 Ugandan Knuckles 分析 解题 Ricardo Milos 分析 解题 Ah Thats Hawt 分析 解题 方法一 方法二 Ligma 分析 解题 ​ Mafia 分析 解题 方法一&#xff1a;构造函数 方法二&#xf…

【大模型基础_毛玉仁】3.5 Prompt相关应用

目录 3.5 相关应用3.5.1 基于大语言模型的Agent3.5.2 数据合成3.5.3 Text-to-SQL3.5.4 GPTs 3.5 相关应用 Prompt工程应用广泛&#xff0c;能提升大语言模型处理基础及复杂任务的能力&#xff0c;在构建Agent、数据合成、Text-to-SQL转换和设计个性化GPTs等方面不可或缺。 . …