深度相机,指可获取场景中物体与摄像头之间物理距离的相机。主流深度相机通常由多种镜头、光学传感器组成,根据基本原理可以分为:飞行时间法、结构光法、双目立体视觉法。

相机成像模型

在研究深度相机之前,先来分析一下相机成像的模型:

相机成像模型

坐标系:世界坐标系(X,YX,YX,Y)、相机坐标系(x,yx,yx,y)、归一化平面(z=1z=1z=1)坐标系(x′,y′x',y'x′,y′)、像素平面坐标系(u,vu,vu,v)。

根据外参坐标变换(R,tR,tR,t),可得:
[xyz]=[100001000010]∗[XYZ1]\begin{bmatrix}x \\y \\z\end{bmatrix}=\begin{bmatrix}1 & 0 & 0 & 0 \\0 & 1 & 0 & 0 \\0 & 0 & 1 & 0 \\\end{bmatrix}*\begin{bmatrix}X \\Y \\Z \\1\end{bmatrix} ⎣⎡​xyz​⎦⎤​=⎣⎡​100​010​001​000​⎦⎤​∗⎣⎡​XYZ1​⎦⎤​
根据三角形相似,可得:
y′/y=x′/x=f/zy'/y=x'/x=f/z y′/y=x′/x=f/z

根据成像关系,可得:

u=sx∗x′+cx;v=sy∗v+cy;sx,sy均为尺度因子(pix/m)u=s_x*x'+c_x;v=s_y*v+c_y;s_x,s_y均为尺度因子(pix/m) u=sx​∗x′+cx​;v=sy​∗v+cy​;sx​,sy​均为尺度因子(pix/m)

u=(fx∗x)/z+cx;v=fy∗y/z+cyu=(f_x*x)/z+c_x;v=f_y*y/z+c_y u=(fx​∗x)/z+cx​;v=fy​∗y/z+cy​

使用齐次坐标,可得:
z[uv1]=[fx0cx0fycy001]∗[100001000010]∗[XYZ1]z\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} * \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} z⎣⎡​uv1​⎦⎤​=⎣⎡​fx​00​0fy​0​cx​cy​1​⎦⎤​∗⎣⎡​100​010​001​000​⎦⎤​∗⎣⎡​XYZ1​⎦⎤​
到此,通过外参、内参建立起世界到像素的映射关系。

飞行时间法(Time of Flight,TOF)

飞行时间法,测距原理是通过连续发射光脉冲到观测物体,接收从观测物体返回的光脉冲,通过计算光脉冲的飞行(往返)时间获取观测物体与相机之间的距离。

飞行时间法

优点

1.测量误差在测量范围基本固定;

2.抗干扰能力强;

3.测量距离较远时具有明显优势;

缺点

1.对时间测量精度要求高,采用最高精度电子元器件,也很难达到毫米级精度;

结构光法

结构光法,使用提前设计好的特殊结构图案(比如离散光斑、条纹光、编码结构光等)投影到观测物体表面,使用另一个相机观察图案在物体表面成像的畸变情况,根据已知图案与变形使用算法计算观测物体的三维形状、深度。

结构光法

优点

1.精度高;

2.不依赖光照条件;

缺点

1.物理器件复杂,体积较大;

2.不适合室外环境,编码光容易被自然光影响;

3.容易导致测量失败的物体:深色(尤其黑色)物体(深色物体对红外光的吸收能力强)、一定光滑程度的物体、透明物体(红外光可以产生透射现象)

4.物体边缘存在视觉盲区(发射端、接收端有一定间距)

双目立体视觉法

双目立体视觉,类比人眼,通过计算同一物体在两个相机成像视差根据三角关系得到物体与相机之间的距离。

双目立体视觉法

根据相似三角形原理,已知焦距fff、基线bbb,只要求得视差d=xl−xrd=x_l-x_rd=xl​−xr​(像素平面),便可以得出深度。那么视差该怎么求解呢?假设两相机共面且光轴平行、参数相同,借助极线约束匹配点在两相机中成像的点,便可以求得视差。那么极线约束又是什么呢?首先定义一下极线,空间中点与两相机中心构成的平面与左右图像平面的交线就是极线;再来看下极线约束,同一空间点成像,已知左图成像点,那么右图成像点一定在相对于左图成像点的极线上,以此缩短匹配范围。

介绍完基于理想假设下的基本原理,再说一下非理想情况该怎么处理。通过图像矫正转换到理想假设,即将不同方向的图像平面重新投影到同一平面且光轴平行,那具体怎么操作呢?可以对两张图片使用相机标定得到的单应矩阵变换得到矫正后的图像,此时相机极线也变成水平了。

在实际操作中,会存在一些问题:

1.保证相机共面且参数一致很难,计算过程中也会存在误差累积,对于左图点在右图中对应的点可能在极线附近,搜索范围应适当放宽;

2.单像素点鲁棒性很差,容易受到光照和视角影响;

滑动窗口法

目前有两种主流的解决方法,滑动窗口法、能量优化法。滑动窗口法是使用固定尺寸的滑动窗口计算相似度(像素差)进行匹配,但是匹配效果不好且计算效率低;能量优化法是通过设定能量函数进行优化得到,该方法目前使用较多。

深度测量过程

深度测量

1.标定双目相机,获得两个相机的内外参、单应矩阵;

2.使用单应矩阵校正图像,使得左右两张图位于同一平面且平行;

3.根据极线约束匹配像素点,得到匹配结果计算像素深度。

优点

1.硬件要求低,成本低,不需TOF与结构光使用特殊的发射器和接收器;

2.室内外均适用,相比之下,TOF和结构光基本只能在室内使用;

缺点

1.对光照条件敏感,亮度差异会导致成像差异;

2.不适合纹理缺失的场景;

3.需要逐像素运算,计算复杂度高;

4.基线限制了测量范围;

ZED相机

Stereolabs ZED 是基于RGB双目立体视觉原理的深度相机,室内和室外都能使用,最远深度范围可达20m,深度图分辨率最高达 4416x1242 @ 15FPS,可以根据帧率需要调整,最高帧率1344x376 @ 100FPS,最大覆盖视场角为110°。

下面表格是对上述三种深度相机关键特性的对比:

表1 深度相机的特性对比

时间飞行法 结构光法 立体双目视觉法
测量精度 厘米级 0.01mm-1mm(近距离) 毫米级
测量范围 100米以内 10米以内 2米以内(基线10mm)
帧率 上百fps 30fps -
分辨率 低于640x480 1080x720 2K

参考资料:

[1]. 深度相机原理揭秘–双目立体视觉

[2]. 聊聊三维重建-双目立体视觉原理

[3]. ZED Stereo Camera Stereolabs

SLAM传感器篇:深度相机相关推荐

  1. SLAM传感器篇:Velodyne激光雷达

    VLP-16 & HDL-64E激光雷达 主要参数: VLP-16基本特性 稍微介绍一下,扫描频率越高,短时间可以获取更多数据,在机器人运动速度快的时候可以获取连续性较好的数据,有利于SLAM ...

  2. 「 SLAM lesson-1.2 」传感器分类、单目相机、双目相机、深度相机

    结合 高翔老师的著作<视觉SLAM十四讲:从理论到实践>,加上小白的工程经验共同完成.建议作为笔记功能反复使用. 一.用于定位的传感器分类 主要分成两类:         1). 传感器携 ...

  3. ros订阅相机深度信息_基于深度相机 RealSense D435i 的 ORB SLAM 2

    相比于上一篇文章,这里我们将官方给的 rosbag 数据包替换为来自深度相机的实时数据.之所以选择 Intel RealSense 这款深度相机,仅仅是因为它是最容易买到的...在京东上搜" ...

  4. Realsense深度相机+pyqt5+应用案例(基础篇1)

    主要Python环境: python==3.7.4; pyrealsense2==2.38.1.2225; pyqt5==5.11.2; numpy=1.17.0; opencv-python==4. ...

  5. Realsense深度相机+pyqt5+应用案例(基础篇2)

    提示:上一篇博客(基础篇1)链接:Realsense深度相机+pyqt5+应用案例(基础篇1) 文章目录 前言 本篇将在上一篇博客的基础上继续介绍D435i深度相机的相关操作,主要包括深度图的后处理和 ...

  6. 三维重建学习笔记之深度相机入门篇

    说在前面: 一.学术词汇概念解析 学习历程:三维重建→深度相机→点云→点云配准 1.三维重建技术:基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知 ...

  7. 单目图像深度估计 - SLAM辅助篇:MegaDepth

    目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...

  8. 论文解读:基于深度相机的3D建模 2020最新综述

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨安如夏@知乎 来源丨https://zhuanlan.zhihu.com/p/299489800 ...

  9. 3D Vision、SLAM求职宝典 | SLAM知识篇(D1,重点 )

    今日得空,开始愉快的解答!各位看官请指教. 第一部分,先来完成该专题最重要的内容,即笔试面试中所考察的SLAM专业知识. SLAM知识篇所准备的这些问题不一定全面,但是问题都是基于三位求职者的总结回忆 ...

最新文章

  1. Python 之 Matplotlib (二)figure
  2. mysql优化sql相关(持续补充)
  3. Java集合:HashMap线程不安全?有哪些表现?
  4. iOS12-Swift5-Date转化为String:DateFormatter
  5. python处理csv数据
  6. c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...
  7. Springboot 中的header, cookie, session
  8. ARM栈帧与编译选项
  9. Arduino编译bootloader
  10. devc编程c语言,【电子部新手教程之C语言入门篇】Dev-cpp安装与第一个程序
  11. Windows中如何对电脑硬盘进行分区
  12. 如何开放云服务器端口
  13. chrome调试工具使用技巧汇总
  14. linux u盘 中毒,linux对中毒u盘分区和格式化
  15. 程序运行产生SIGABRT信号的原因
  16. 我爱你,但是我不喜欢你了!
  17. 解耦java_工厂模式实现解耦
  18. android webview崩溃,Android-未知的webview崩溃原因
  19. Android 接入支付宝在手机未安装支付宝客户端的情况下掉不起支付宝sdk的h5页面
  20. 三菱PLC FX3GA系列 FNC57 PLSY 脉冲输出

热门文章

  1. matlab中男女变声变调,变声软件哪个好-怎样让男女声进行变换操作
  2. 云南专升本-数据结构知识点总结和常考例题(三)
  3. 多线程与高并发-volatile与CAS
  4. js GPS获取定位信息
  5. 详解python列表中冒号的用法
  6. 掘金之旅APP开发:掘金之旅APP开发架构分析图以及部分开发源代码分享
  7. 无线充电宝有用吗?有没有好的无线充电宝推荐
  8. linux环境变量设置方法,Linux环境变量设置指南
  9. 基于百度AI开放平台的人脸识别及语音合成
  10. Android设置文字粗体