深度相机(TOF)的工作原理
文章目录
深度相机(TOF)的工作原理
TOF(Time of flight)直译为“飞行时间”。其测距原理是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。这种技术跟3D激光传感器原理基本类似,只不过3D激光传感器是逐点扫描,而TOF相机则是同时得到整幅图像的深度(距离)信息。
TOF由什么组成?
一、TOF相机采用主动光探测,通常包括以下几个部分:
1、照射单元
照射单元需要对光源进行脉冲调制之后再进行发射,调制的光脉冲频率可以高达100MHz。因此,在图像拍摄过程中,光源会打开和关闭几千次。各个光脉冲只有几纳秒的时长。相机的曝光时间参数决定了每次成像的脉冲数。
要实现精确测量,必须精确地控制光脉冲,使其具有完全相同的持续时间、上升时间和下降时间。因为即使很小的只是一纳秒的偏差即可产生高达15 c m的距离测量误差。
如此高的调制频率和精度只有采用精良的LED或激光二极管才能实现。
一般照射光源都是采用人眼不可见的红外光源。
2、光学透镜
用于汇聚反射光线,在光学传感器上成像。不过与普通光学镜头不同的是这里需要加一个带通滤光片来保证只有与照明光源波长相同的光才能进入。这样做的目的是抑制非相干光源减少噪声,同时防止感光传感器因外部光线干扰而过度曝光。
3、成像传感器
TOF的相机的核心。该传感器结构与普通图像传感器类似,但比图像传感器更复杂,它包含2个或者更多快门,用来在不同时间采样反射光线。因此,TOF芯片像素比一般图像传感器像素尺寸要大得多,一般100um左右。
4、控制单元
相机的电子控制单元触发的光脉冲序列与芯片电子快门的开/闭精确同步。它对传感器电荷执行读出和转换,并将它们引导至分析单元和数据接口。
5、计算单元
计算单元可以记录精确的深度图。深度图通常是灰度图,其中的每个值代表光反射表面和相机之间的距离。为了得到更好的效果,通常会进行数据校准。
二、TOF是如何测距的呢?
照射光源一般采用方波脉冲调制,这是因为它用数字电路来实现相对容易。深度相机的每个像素都是由一个感光单元(如光电二极管)组成,它可以将入射光转换为电流,感光单元连接着多个高频转换开关(下图的G1,G2)可以把电流导入不同的可以储存电荷(下图S1,S2)的电容里。
相机上的控制单元打开光源然后再关闭,发出一个光脉冲。在同一时刻,控制单元打开和关闭芯片上的电子快门。由光脉冲以这种方式产生的电荷S0存储在感光元件上。
然后,控制单元第二次打开并关闭光源。这次快门打开时间较晚,即在光源被关闭的时间点打开。现在生成的电荷S1也被存储在感光元件上。
因为单个光脉冲的持续时间非常短,此过程会重复几千次,直到达到曝光时间。然后感光传感器中的值会被读出,实际距离可以根据这些值来计算。
记光的速度为c,tp为光脉冲的持续时间, S0表示较早的快门收集的电荷, S1表示延迟的快门收集的电荷,那么距离d可以由如下公式计算:
最小的可测量距离是:在较早的快门期间S0中收集了所有的电荷,而在延迟的快门期间S1没有收集到电荷,即S1 = 0。代入公式会得出最小可测量距离d=0。
最大的可测量的距离是:在S1中收集了所有电荷,而在S0中根本没有收集到电荷。然后,该公式得出d= 0.5 x c × tp。因此最大可测量距离是通过光脉冲宽度来确定的。例如,tp = 50 ns,代入上式,得到最大测量距离d = 7.5m。
三、TOF会受什么影响?
1、多重反射。
距离测量要求光只反射一次。但是镜面或者一些角落会导致光线的多次反射,这会导致测量失真。如果多重反射使得光线完全偏转,则没有反射光线进入相机,从而无法正确测量反射面的距离。反之,如果其他方向的光通过镜面反射进入芯片,则可能会发生过度曝光。见下图。
2、散射光
在镜头内或在镜头后面发生多余反射会出现散射光,如下图所示,散射光会导致图像褪色,对比度下降等不良影响。所以要避免在相机正前方有强烈反光的物体存在。
3、环境光
前面说过,深度相机镜头上会有一个带通滤光片来保证只有与照明光源波长相同的光才能进入,这样可以抑制非相干光源提高信噪比。这种方式确实能够比较有效地过滤掉人造光源,但是,我们常见的日光几乎能够覆盖整个光谱范围,这其中包括和照明光源一样的波长,在某些情况下(如夏天的烈日)这部分光强可以达到很大,会导致感光传感器出现过度曝光。因此相机如果想在这种条件下正常工作,仍然需要额外的保护机制。
4、温度
电子元件的精度受温度的影响。所以当温度波动时会影响电子元件的性能,从而影响到脉冲调制的精度。前面说过一纳秒的脉冲偏差即可产生高达15 c m的距离测量误差,因此相机要做好散热,这样才能保证测量精度。
四、那TOF相机最后输出的是什么呢?
TOF相机内部每个像素经过上述过程都可以得到一个对应的距离,所有的像素点测量的距离就构成了一幅深度图,如下图所示。左边是原图,右边是对应的深度图。
可以看到深度图其实是一张灰度图,它是一张三维的图:水平垂直坐标对应像素位置,该位置的灰度值对应的是该像素距离摄像头的距离。所以深度图中的每个像素可以表示空间中一个点的三维坐标,所以深度图中的每个像素也称为体像素(voxel)。
深度相机(TOF)的工作原理的更多相关文章
- [转] 深度解剖DIV+CSS工作原理
本文和大家重点讨论一下DIV+CSS工作原理,在一般情况的DIV+CSS开发静态html网页时,我们把html和CSS是分开的,形成html页面和CSS文件. DIV+CSS原理解剖 在一般情况的DI ...
- 三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)
算法原理请参考此文: kinect fusion 3D重建基本算法 http://log.csdn.net/xiaohu50/article/details/51592503 三维重建为三维空间实 ...
- 【计算机视觉】深度相机(一)--TOF总结
http://www.voidcn.com/blog/lg1259156776/article/p-6302915.html 1.1 TOF初探 TOF是Time of flight的简写,直译为飞行 ...
- N沟通场效应管深度图解(1)工作原理及Multisim实例仿真
场效应晶体管(Field Effect Transistor, FET)简称场效应管,是一种由多数载流子参与导电的半导体器件,也称为单极型晶体管,它主要分型场效应管(Junction FET, JFE ...
- camera理论基础和工作原理
写在前面的话,本文是因为工作中需要编写摄像头程序,因为之前没有做过这类产品,所以网上搜索的资料,先整理如下,主要参考文章如下,如果有侵权,请联系我:另外,转载请注明出处.本文不一定全部正确,如果发现错 ...
- camera理论基础和工作原理【转】
转自:http://www.cnblogs.com/fjutacm/p/220631977df995512d136e4dbd411951.html 写在前面的话,本文是因为工作中需要编写摄像头程序,因 ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- HashMap的工作原理深入再深入
前言 首先再次强调hashcode (==)和equals的真正含义(我记得以前有人会说,equals是判断对象内容,hashcode是判断是否相等之类): equals:是否同一个对象实例.注意,是 ...
- javascript引擎工作原理
1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序.比方说,当你写了 var a = 1 + ...
- 我们应该如何去了解JavaScript引擎的工作原理
“读了你的几篇关于JS(变量对象.作用域.上下文.执行代码)的文章,我个人觉得有点抽象,难以深刻理解.我想请教下通过什么途径能够深入点的了解javascript解析引擎在执行代码前后是怎么工作的,ec ...
随机推荐
- 持续集成环境(6)-Tomcat安装和配置(编写中)
安装Tomcat8.5 把Tomcat压缩包上传到tomcat服务器(tomcat专用服务测试服务器.生产服务器) yum install java-1.8.0-openjdk* -y wget ht ...
- COM调用 – VB、PB
本文使用Delphi和C++创建CRC32的COM文件(Dll). VB: V9.0 PB: V8.0 Delphi创建的文件,提供给VB9调用:C++创建的文件,提供给PB8调用. 一.VB部分 C ...
- 最大公约数与最小公倍数_c/c++
gcd:greatest common divisor,最大公约数 欧几里得算法,也就是辗转相除法.公式:gcd(a, b) = gcd(b, a % b) 推论:gcd(b, a) == g ...
- 记录下老dropbox的使用
32-bit: wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf - 64-bit: wget ...
- IntelliJ IDEA常用插件
Mybatis Log Plugin安装好插件后,在Tools工具栏中可以看到安装好的插件,点击即可打开相应窗口,在Debug时,相应的Sql语句即可输出到此窗口,方便查看.此插件相当好用,提升开发效 ...
- Less-4 报错注入
补坑:报错注入 当我们 union 无法注入的时候,可以使用报错注入,这里我们有三种报错注入,xpth语法错误和count()+rand()+floor()+group by重复组建错误 extrac ...
- Linux & 标准C语言学习 <DAY13>
一.字符串 字符:类字形单位或符号,包括字母.数字.运算符号.标点符号和其他符号,以及一些功能性符号 串:是一种数据结构,存储类型相同的若干个数据,对于串型结构的处理是批量性的,会从头 ...
- Linux & 标准C语言学习 <DAY10>
一.函数递归 函数自己调用自己的行为,叫做函数递归 递归是分治思想的一种具体实现,就是把一个复杂而庞大的问题,分解成若干个相似的小问题,解决所有小问题以解决大问题 如果函数递归 ...
- Docker常用软件安装
jdk dockere pull openjdk:11 docker run -d -t --name java-11 openjdk:11 MySQL 可以从docker hup中查找自己想要安装的 ...
- 从头开始,手写android应用框架(一)
前言 搭建android项目框架前,我们需要先定义要框架的结构,因为android框架本身的结构就很复杂,如果一开始没定义好结构,那么后续的使用就会事倍功半. 结构如下: com.kiba.frame ...