视觉SLAM笔记(2) 相机

  • 1. 相机分类
  • 2. 单目相机
  • 3. 双目相机
  • 4. 深度相机

1. 相机分类

在 SLAM 中,非常强调未知环境
在理论上,没法限制“小萝卜”的使用环境,这意味着没法假设像 GPS 这些外部传感器都能顺利工作
因此,使用携带式的传感器来完成 SLAM 是重点关心的问题

特别地,当谈论视觉 SLAM 时,主要是指如何用相机解决定位和建图问题
SLAM中使用的相机与平时见到的单反摄像头并不是同一个东西
它往往更加简单,不携带昂贵的镜头,以一定速率拍摄周围的环境,形成一个连续的视频流
普通的摄像头能以每秒钟 30 张图片的速度采集图像,高速相机则更快一些

按照相机的工作方式,把相机分为三个大类:

  • 单目(Monocular)
  • 双目(Stereo)
  • 深度相机(RGB-D)

直观看来,单目相机只有一个摄像头,双目有两个
而 RGB-D 原理较复杂,除了能够采集到彩色图片之外,还能读出每个像素离相机的距离
它通常携带多个摄像头,工作原理和普通相机不尽相同

此外, SLAM 中还有全景相机、 Event相机等特殊或新兴的种类
虽然偶尔能看到它们在 SLAM 中的应用,不过到目前为止还没有成为主流


2. 单目相机

只使用一个摄像头进行 SLAM 的做法称为单目 SLAM(Monocular SLAM

这种传感器结构特别的简单、成本特别的低
所以单目 SLAM 非常受研究者关注

单目相机的数据:照片
照片,本质上是拍照时的场景(Scene),在相机的成像平面上留下的一个投影
它以二维的形式反映了三维的世界
显然,这个过程丢掉了场景的一个维度:也就是所谓的深度(或距离)

在单目相机中,无法通过单个图片来计算场景中物体的距离(远近)
但之后会看到,这个距离将是 SLAM 中非常关键的信息

由于人类见过大量的图像,养成了一种天生的直觉,对大部分场景都有一个直观的距离感(空间感)
它能帮助判断图像中物体的远近关系
比如说,能够辨认出图像中的物体,并且知道它们大致的大小
比如说,近处的物体会挡住远处的物体,而太阳、月亮等天体一般在很远的地方;
再如物体受光照后会留下影子等等

这些信息可以都帮助判断物体的远近,但也存在一些情况
这个距离感会失效,这时无法判断物体的远近以及它们的真实大小

在这张图像中,无法仅通过它来判断后面那些小人是真实的人,还是小型模型
除非转动视角,观察场景的三维结构
换言之,在单张图像里,无法确定一个物体的真实大小
由于近大远小的原因,它们可能在图像中变成同样大小的样子

由于单目相机只是三维空间的二维投影
所以,如果真想恢复三维结构,必须移动相机的视角
在单目 SLAM 中也是同样的原理
必须移动相机之后,才能估计它的运动(Motion
同时估计场景中物体的远近和大小,不妨称之为结构(Structure

从生活经验中知道,如果相机往右移动,那么图像里的东西就会往左边移动
这就给我们推测运动带来了信息
另一方面,还知道近处的物体移动快,远处的物体则运动缓慢
于是,当相机移动时,这些物体在图像上的运动,形成了视差
通过视差,就能定量地判断哪些物体离得远,哪些物体离的近

然而,即使知道了物体远近,它们仍然只是一个相对的值
想象在看电影时候,虽然能够知道电影场景中哪些物体比另一些大
但我们无法确定电影里那些物体的“真实尺度”
直观地说,如果把相机的运动和场景大小同时放大两倍,单目所看到的像是一样的
同样的,把这个大小乘以任意倍数,都将看到一样的景象
这说明了单目 SLAM 估计的轨迹和地图,将与真实的轨迹、地图,相差一个因子
也就是所谓的尺度(Scale
由于单目 SLAM 无法仅凭图像确定这个真实尺度,所以又称为尺度不确定性
平移之后才能计算深度,以及无法确定真实尺度,这两件事情给单目 SLAM 的应用造成了很大的麻烦
它们的本质原因是通过单张图像无法确定深度
所以,为了得到这个深度,人们又开始使用双目和深度相机


3. 双目相机

双目相机(Stereo)目的,在于 通过某种手段测量物体的距离,克服单目无法知道距离的缺点


双目相机的数据:左眼图像,右眼图像。通过左右眼的差异,能够判断场景中物体离相机距离

如果知道了距离,场景的三维结构就可以通过单个图像恢复出来,也就消除了尺度不确定性
双目相机由两个单目相机组成,但这两个相机之间的距离(称为基线(Baseline))是已知的

通过这个基线来估计每个像素的空间位置——这和人眼非常相似
人类可以通过左右眼图像的差异,判断物体的远近,在计算机上也是同样的道理

如果对双目相机进行拓展,也可以搭建多目相机,不过本质上并没有什么不同
计算机上的双目相机需要大量的计算才能(不太可靠地)估计每一个像素点的深度
相比于人类真是非常的笨拙

双目相机测量到的深度范围与基线相关
基线距离越大,能够测量到的就越远
所以无人车上搭载的双目通常会是个很大的家伙

双目相机的距离估计是比较左右眼的图像获得的,并不依赖其他传感设备
所以它既可以应用在室内,亦可应用于室外

双目或多目相机的缺点:

  • 配置与标定均较为复杂
  • 其深度量程和精度受双目的基线与分辨率限制
  • 视差的计算非常消耗计算资源
    需要使用 GPU 和 FPGA 设备加速后才能实时输出整张图像的距离信息

因此在现有的条件下,计算量是双目的主要问题之一


4. 深度相机

尽管都是为测量距离,但双目相机与深度相机测量深度的原理是不一样的

深度相机(又称 RGB-D 相机)是 2010 年左右开始兴起的一种相机
可以直接测量物体的图像和距离,从而恢复三维结构

它最大的特点是可以通过 红外结构光 或 Time-of-Flight(ToF)原理,像激光传感器那样
通过 主动向物体发射光并接收返回的光,测出物体离相机的距离

这部分并不像双目那样通过软件计算来解决,而是通过物理的测量手段
所以相比于双目可节省大量的计算量

目前常用的 RGB-D 相机包括 Kinect/Kinect V2、 Xtion live pro、Realsense 等
不过,现在多数 RGB-D 相机还存在测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题

在 SLAM 方面,主要用于室内 SLAM,室外则较难应用


参考:

《视觉SLAM十四讲》


相关推荐:

视觉SLAM笔记(1) 初识SLAM


谢谢!

视觉SLAM笔记(2) 相机相关推荐

  1. 视觉SLAM笔记(33) 对极约束求解相机运动

    视觉SLAM笔记(33) 对极约束求解相机运动 1. 本质矩阵求解相机运动 2. 特征提取函数 3. 2D-2D姿态估计函数 4. 归一化坐标函数 5. 求解相机运动 6. 尺度不确定性 7. 多于八 ...

  2. 视觉SLAM笔记(21) 双目相机模型

    视觉SLAM笔记(21) 双目相机模型 1. 深度确定 2. 景物差异 3. 成像原理 4. 计算困难 1. 深度确定 针孔相机模型描述了单个相机的成像模型 然而,仅根据一个像素,是无法确定这个空间点 ...

  3. 视觉SLAM笔记(65) 简约总结

    视觉SLAM笔记(65) 简约总结 参考: <视觉SLAM十四讲> 视觉SLAM笔记(3) 视觉SLAM框架 视觉SLAM笔记(20) 单目相机模型 视觉SLAM笔记(32) 2D-2D: ...

  4. 视觉SLAM笔记(63) RGB-D 稠密建图

    视觉SLAM笔记(63) RGB-D 稠密建图 1. 建立点云地图 2. 点云地图 3. 其他重建方法 1. 建立点云地图 所谓点云,就是由一组离散的点表示的地图 最基本的点包含 x, y, z 三维 ...

  5. 视觉SLAM笔记(61) 单目稠密建图

    视觉SLAM笔记(61) 单目稠密建图 1. 立体视觉 2. 极线搜索与块匹配 3. 高斯分布的深度滤波器 1. 立体视觉 相机,很久以来被认为是只有角度的传感器(Bearing only) 单个图像 ...

  6. 视觉SLAM笔记(60) 建图

    视觉SLAM笔记(60) 建图 1. 概述 2. 用处 1. 概述 建图(Mapping),本应该是 SLAM 的两大目标之一 因为 SLAM 被称为同时定位与建图 之前讨论的都是定位问题,包括通过特 ...

  7. 视觉SLAM笔记(55) 位姿图

    视觉SLAM笔记(55) 位姿图 1. Pose Graph 的意义 2. Pose Graph 的优化 1. Pose Graph 的意义 带有相机位姿和空间点的图优化称为 BA,能够有效地求解大规 ...

  8. 视觉SLAM笔记(47) 优化 PnP 的结果

    视觉SLAM笔记(47) 优化 PnP 的结果 1. 迭代优化 2. 优化边 3. 姿态估计 4. 结果对比 1. 迭代优化 尝试 RANSAC PnP 加上迭代优化的方式估计相机位姿 看看是否对 视 ...

  9. 视觉SLAM笔记(46) 基本的 VO

    视觉SLAM笔记(46) 基本的 VO 1. 特征提取和匹配 2. 两两帧的视觉里程计 3. 匹配特征点 4. 简单的检测 1. 特征提取和匹配 实现 VO,先来考虑特征点法.它 VO 任务是,根据输 ...

最新文章

  1. Spring 4 官方文档学习(十一)Web MVC 框架之异常处理
  2. tensorflow 使用
  3. Thrift IDL基本语法
  4. 面向对象-----封装
  5. JAVA入门级教学之(abstract抽象类)
  6. windows 10无法安装virtualbox的解决方法
  7. C语言制作科学计算器
  8. 数据库课设:简易图书管理系统
  9. 浏览班级为计算机的同学记录的命令,2011年全国计算机等级考试二级VFP笔记(4)...
  10. office新建文件打开提示文件格式或扩展名无效
  11. JAVA实现Excel照相机功能_用Excel照相机功能在Excel中显示和调用图片的方法
  12. Redis Cluster集群实验
  13. PWM常见输出方法及避坑指南
  14. 公网地址和私网地址问题
  15. vue3中keep-alive路由缓存
  16. cannot find -lxxx
  17. postgresql锁表如何处理
  18. WebDAV之葫芦儿·派盘+iComic
  19. 麦克风阵列技术 三 ( 声源定位 波束形成 去混响 麦克风阵列结构设计 声学结构确认流程)
  20. [第24课] 二项分布的期望值

热门文章

  1. 手把手教你写一个手势密码解锁View(GesturePasswordView)
  2. python用递归方式实现最大公约数_Python算法——递归思想
  3. Python实现comtrade文件读取
  4. 硬改 腾达ac15_维修一台半残的腾达AC15
  5. 雄关漫道真如铁|MAC安装Maven并配置环境变量
  6. ThinkPHP云淘客自动抢单系统修复版.zip
  7. wxPython中XRC文件对 i18N的支持
  8. 雨伞16骨好还是24骨好_雨伞伞骨越多越好吗
  9. 如何添加斗龙云下架游戏?
  10. 针对 华为 荣耀5X root(有bootloader锁)---【亲测刷机】