文章目录

  • 什么是iToF?
    • 为什么有相位差,就可以测距?
  • 测距原理
    • 正弦调制:4-sampling-bucket 算法(带推导)
    • 脉冲调制
    • 距离--->深度
  • iToF的标定问题
  • 双频调制是什么?动机是?
  • 挑战问题
    • 多路径问题
    • 散射问题
    • 环境光/户外问题
  • 参考文献
  • 附录
    • 怎么理解相位?

什么是iToF?

ToF是Time-of-Flight的缩写,即光飞行时间,其本质上还是一种深度测距相机,目的自然是输出高质量的深度图像,该技术与结构光、双目,构成三种主流的3D视觉技术。

iToF全称为 indirect Time-of-Flight,即间接的ToF,与之相对应的是dToF,即direct Time-of-Flight。iToF相对于dToF来说,有着“smaller maximum range but with a higher lateral resolution.”。
本文主要关注iToF的深度估计原理,具体地,iToF向真实的物理场景发射近红外光(调制的红外光信号),由传感器接收反射物体返回的光信号,进行测距工作。其通过测量相位偏移/延迟来检测测量光的飞行时间,所谓的”相位偏移“即发射信号与接收信号之间的相位差。此外,iToF在输出深度图像的同时,还可以输出幅值图、IR图等作为一些副产品。

为什么有相位差,就可以测距?

其实这个道理很简单,但是考虑到读者可能已经遗忘了一些基础的物理知识,所以还是单拿出一个子标题简单介绍下。其实无非就是距离=时间*速度,相位差主要是用于测量相位延迟的时间,我们已知一个周期的时间是TTT,那么产生这个相位差所需要的时间就是φ/2π∗T\varphi/2 \pi * Tφ/2π∗T,设光的飞行速度为ccc,那么光到物体一去一回的总距离就是:φ∗T2π∗c\frac{\varphi * T}{2 \pi} * c2πφ∗T​∗c,就可以得到物体距离发射端的距离为:
φ∗T4π∗c\frac{\varphi * T}{4 \pi} * c 4πφ∗T​∗c

测距原理

iToF模组的核心有发射端和接收端。通常来说,发射端为VCSEL(Vertical Cavity Surface Emitting Laser),中文名为垂直共振腔表面放射激光器,主要负责发射特定频率的调制红外光,接收端即为图像传感器,其在一定积分/曝光时间内接受反射光,经由光电转换及一定处理后交于计算单元对每一个像素计算其对应的相位偏移。

正弦调制:4-sampling-bucket 算法(带推导)

以正弦调制照明光为例。
采样相位延迟为0°,90°,180°,270°的采样信号对相位偏移进行计算,

因为是求相位延迟,因此我们不妨以发射段作为相对的相位零点,设相位延迟为φ\varphiφ,那么对于发射端的0°,则对应于接收端的φ\varphiφ,发射端的90°,则对应于接收端的φ+π2\varphi + \frac{\pi}{2}φ+2π​,发射端的180°,对应于接收端的φ+π\varphi + \piφ+π,发射端的270°,对应于接收端的φ+3π2\varphi + \frac{3\pi}{2}φ+23π​。

分别地,对于A1A_1A1​、A2A_2A2​、A3A_3A3​,A4A_4A4​,根据其正弦波的性质,有:
A1=asin(φ+0)+bA2=asin(φ+π2)+b=acos(φ)+bA_1 = a sin(\varphi + 0)+b \quad A_2 = a sin(\varphi + \frac{\pi}{2})+b=a cos(\varphi) + bA1​=asin(φ+0)+bA2​=asin(φ+2π​)+b=acos(φ)+b
A3=asin(φ+π)+b=−asin(φ)+bA4=asin(φ+3π2)+b=−acos(φ)+bA_3 = a sin(\varphi + \pi)+b = -a sin(\varphi)+b \quad A_4 = a sin(\varphi + \frac{3\pi}{2})+b = -acos(\varphi)+bA3​=asin(φ+π)+b=−asin(φ)+bA4​=asin(φ+23π​)+b=−acos(φ)+b

自然地,有计算相位偏移的公式为:
φ=arctan⁡(A1−A3A2−A4)\varphi=\arctan \left(\frac{A_{1}-A_{3}}{A_{2}-A_{4}}\right) φ=arctan(A2​−A4​A1​−A3​​)
幅值aaa的计算方式为:

a=(A1−A3)2+(A2−A4)22a=\frac{\sqrt{\left(A_{1}-A_{3}\right)^{2}+\left(A_{2}-A_{4}\right)^{2}}}{2} a=2(A1​−A3​)2+(A2​−A4​)2​​

偏移量bbb的计算方式为:
b=A1+A2+A3+A44b=\frac{A_{1}+A_{2}+A_{3}+A_{4}}{4} b=4A1​+A2​+A3​+A4​​

求取得到相位延迟后,可以通过下式计算得到目标距离:
d=c⋅φ4π⋅fmodd=\frac{c \cdot \varphi}{4 \pi \cdot f_{\mathrm{mod}}} d=4π⋅fmod​c⋅φ​

参考文献:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.132.5821&rep=rep1&type=pdf

脉冲调制

脉冲工作方式相比起正弦调制,更容易减少环境光的影响。


使用ϕTX1\phi_{T X 1}ϕTX1​以及ϕTX2\phi_{T X 2}ϕTX2​两个脉冲来去选择将接收到的脉冲转换到node FD1FD1FD1还是FD2FD2FD2,而ϕTXD\phi_{TXD}ϕTXD​则是用于将环境光/背景光引入到charge drains。
主动照明光源的脉冲宽度为T0T_0T0​,相位延迟为TDT_DTD​。

已知转移到node FD1以及FD2的电子分别为:
N1=Iphq(T0−TD)N2=IphqTD\begin{gathered} N_{1}=\frac{I_{\mathrm{ph}}}{q}\left(T_{0}-T_{D}\right) \\ N_{2}=\frac{I_{\mathrm{ph}}}{q} T_{D} \end{gathered} N1​=qIph​​(T0​−TD​)N2​=qIph​​TD​​

联合以上二式,可得:
TD=T0N2(N1+N2)T_{D}=\frac{T_{0} N_{2}}{\left(N_{1}+N_{2}\right)} TD​=(N1​+N2​)T0​N2​​

有了相位延迟后,则可知距离为:
L=cT0N22(N1+N2)L=\frac{c T_{0} N_{2}}{2\left(N_{1}+N_{2}\right)} L=2(N1​+N2​)cT0​N2​​

如果node的容量是一样的,那么收集到的电子,可以直接等价为电压,即有:
L=cT0V22(V1+V2)L=\frac{c T_{0} V_{2}}{2\left(V_{1}+V_{2}\right)} L=2(V1​+V2​)cT0​V2​​

然而,由下图可见,VoffsetV_{offset}Voffset​对距离测量的误差造成了巨大影响,其往往由于物体表面的散射而引起,因此,为了减小该误差,将距离测量的公式改写为:

L=cT0(V2−Voffset )2(V1+V2−2Voffset )L=\frac{c T_{0}\left(V_{2}-V_{\text {offset }}\right)}{2\left(V_{1}+V_{2}-2 V_{\text {offset }}\right)} L=2(V1​+V2​−2Voffset ​)cT0​(V2​−Voffset ​)​

此外,通常来说,脉冲调制去描述频率的时候,更喜欢用脉宽来描述,比如说3ms,这与正弦调制略微有些差别。

参考文献:
https://www.researchgate.net/profile/Shoji-Kawahito/publication/3431993_A_CMOS_Time-of-Flight_Range_Image_Sensor_With_Gates-on-Field-Oxide_Structure/links/0046351ceefe8159b6000000/A-CMOS-Time-of-Flight-Range-Image-Sensor-With-Gates-on-Field-Oxide-Structure.pdf

距离—>深度

无论是正弦光调制还是脉冲的方式,以上所介绍与推导的,均是用于求取距离。当需要求取深度时,则可通过简单的三角原理进行解算,在此不做赘述,读者可自行推导,简易手绘的示意图如下:

iToF的标定问题

所谓的标定,我们可以看作是对iToF系统误差的补偿行为。
而讲到补偿,则主要是对系统误差进行标定,包括相位零漂,温漂误差,wiggling以及FPPN函数。

双频调制是什么?动机是?

我们已知单频调制的最大探测距离的理论公式为:
Dmax=c2∗fD_{max} = \frac{c}{2*f} Dmax​=2∗fc​

由上式很容易发现,调制频率越低,那么可以探测的距离就越远。然而,鱼和熊掌不可兼得,当探测距离远的时候,探测的精度便相对较差。反之,如果是高频调制,则会取得较好的探测精度,但探测距离又会受限。

自然地,如果我们希望能够兼顾高低频的优势,一种想法便是使得二者进行有机结合,即双频调制。

结合的优势很明显,既拓展了探测距离,也提高了探测精度,然而,万事总不完美,双频调制会拖慢帧率。

双频调制的时候,我们需要确定其距离相交处,难免地,需要计算其频率的最大公约数。而最大公约数可以通过传统的辗转相除法进行计算,python的代码为:

 def gcd(a,b):if a%b == 0:return belse :return gcd(b,a%b)

挑战问题

多路径问题

多路径问题会导致ToF接收器接收到多重的深度信息,导致测量错误。

散射问题

所谓的散射问题,通常是指内部散射问题,再具体一点,通常是指高反射率的物体 的能量会在透镜lens和像素平面之间来回的反射,也就是说,其会有一部分的能量被其他的像素接收到,进而,导致了其他像素的深度错误。

环境光/户外问题

参考文献

[1] https://www.163.com/dy/article/FBJHFRM70511BQR8.html
[2] ToF白皮书 : http://www.deptrum.com/uploads/&e5&85&89&e9&89&b4&e5&88&86&e4&ba&ab&e7&99&bd&e7&9a&ae&e4&b9&a6.pdf
[3] https://faster-than-light.net/TOFSystem_C3/

附录

怎么理解相位?


假设简谐运动的物体位于P点,对应于匀速圆周运动的P’点,θ\thetaθ角就是相位。
对于公式x=Acos(ωt+ϕ)x = A cos(\omega t+\phi)x=Acos(ωt+ϕ),有:

参考链接:https://www.zhihu.com/question/31104681

iToF深度估计原理-带简单数学推导(持续更新)相关推荐

  1. 鱼眼图像自监督深度估计原理分析和Omnidet核心代码解读

    作者丨苹果姐@知乎 来源丨https://zhuanlan.zhihu.com/p/508090405 编辑丨3D视觉工坊 在自动驾驶实际应用中,对相机传感器的要求之一是拥有尽可能大的视野范围,鱼眼相 ...

  2. 深度学习相关阅读论文汇总(持续更新)

    深度学习相关阅读论文汇总(持续更新) 1 Long-Term Temporal Convolutions(LTC)for Action Recognition IEEE Transactions on ...

  3. 机器学习/深度学习资源下载合集(持续更新...)

    这篇文章转载自「译智社」的成员 -- 林夕的文章机器学习/深度学习资源下载集合(持续更新-).如果你对人工智能感兴趣,欢迎关注公众号 -- 译智社. 从入门到进阶,所用到机器学习资料,包括书.视频.源 ...

  4. 深度学习背后的数学_深度学习背后的简单数学

    深度学习背后的数学 Deep learning is one of the most important pillars in machine learning models. It is based ...

  5. 生成对抗网络——原理解释和数学推导

    首先我们有两个关键组件:生成器(G)和判别器(D),一开始我们的G-V1生成了一些手写体的图片,然后丢给D-V1,同时我们也需要把真实图片也送给D-V1,然后D-V1根据自己的"经验&quo ...

  6. OpenGL之矩阵变换的原理分析与数学推导

    什么是矩阵变换? 这张图比较直观地展示了OpenGL矩阵变换的过程,下面详解一下其中的含义: 首先OpenGL有个世界坐标系,我们渲染的物体就是在世界坐标系中,模型需要放到世界坐标系中,那么当还没放的 ...

  7. 【机器学习】XgBoost 原理详解 数学推导

    XgBoost   (Xtreme Gradient Boosting 极限 梯度 增强) 1.基本描述:             假设Xg-模型有 t 颗决策树数,t棵树有序串联构成整个模型,各决策 ...

  8. 机器学习/深度学习中的常用损失函数公式、原理与代码实践(持续更新ing...)

    诸神缄默不语-个人CSDN博文目录 最近更新时间:2023.5.8 最早更新时间:2022.6.12 本文的结构是首先介绍一些常见的损失函数,然后介绍一些个性化的损失函数实例. 文章目录 1. 分类 ...

  9. JVM整体知识体系深度学习__JVM与Java体系结构【持续更新】

    JVM整体知识体系深度学习 一.JVM与Java体系结构. 前言 是否遇到过一下问题. 运行的线上系统突然卡死,系统无法访问,甚至直接OOM[OutOfMemory 内存溢出] JVM GC问题 新项 ...

最新文章

  1. logsoftmax前面为什么没用激活函数,有与没有影响不大吗,难道是这个原因,求明白的高手解答
  2. 群晖系统挂载NTFS硬盘
  3. 信息表示和处理 from computer system chapter 2
  4. taskset设置CPU affinity
  5. 3、构建并安装PHP扩展
  6. 4-3-串的块链存储结构-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
  7. hyper运算符_25个特殊操作符(special operator)
  8. apache-tomcat集成,转帖
  9. 72000 Star 下载工具被 GitHub 下架,背后的数字千年版权法案是什么?
  10. Python学习教程(Python学习路线):Day13-进程和线程
  11. 小米无线网卡linux驱动下载,小米随身WiFi,Linux下AP热点驱动(开源)
  12. 面向能源互联网的多端口DC/DC能源路由器控制策略研究
  13. java使用水晶报表,java水晶报表实例教程
  14. 5G时代车联网的通信协议——C-V2X
  15. MATLAB图像灰度图处理
  16. mp3中不可缺少的音乐
  17. css去掉按钮默认样式教程_50个针对设计师CSS3按钮教程
  18. Chrome浏览器标签管理插件–OneTab
  19. 研发质量管理的“红与黑”
  20. mapreduce 模板代码

热门文章

  1. win7左ctrl和左alt键互换
  2. html注释 和css注释的区别
  3. np.trapz()的生动解释
  4. ArrayList问题之高并发多线程环境下会出现内部成员会出现null
  5. 部署KVM虚拟化平台
  6. 简单收集微信小程序formId,解决发送模板消息不够用的问题
  7. 三星android棒棒糖系统,三星Galaxy S5/S4吃上原生安卓5.0棒棒糖
  8. 线性代数笔记34——左右逆和伪逆
  9. 【计算机科学】【2017.01】基于深度学习的语音信号增强
  10. 重拾职场激情的妙计锦囊