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图等作为一些副产品。

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

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

测距原理

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π

故此,就可以采样到上图中A1, A2,A3, A4的四个点。


注: 在这个地方,有评论区的同学提出问题说,相位延迟为 φ \varphi φ的话,相对与发射端的0°,接收端难道不应该是 0 − φ 0 - \varphi 0φ 吗?这里我的理解是这样的(当然不一定对,欢迎大家批评指正),

我这里借用一下 该链接中的某个图:
在这里插入图片描述

发射信号是灰色的曲线,接受信号是黑色的曲线(由于光强的衰减,接受信号的整体光强相对于发射信号会弱一点)。
这里可以看到,我们通常的定义 ϕ \phi ϕ 是这个相位延迟。
所以我才会在这个地方表述为:

”以发射段作为相对的相位零点,设相位延迟为 φ \varphi φ,那么对于发射端的0°,则对应于接收端的 φ \varphi φ,发射端的90°,则对应于接收端的 φ + π 2 \varphi + \frac{\pi}{2} φ+2π,发射端的180°,对应于接收端的 φ + π \varphi + \pi φ+π,发射端的270°,对应于接收端的 φ + 3 π 2 \varphi + \frac{3\pi}{2} φ+23π


分别地,对于 A 1 A_1 A1 A 2 A_2 A2 A 3 A_3 A3 A 4 A_4 A4,根据其正弦波的性质,有:
A 1 = a s i n ( φ + 0 ) + b A 2 = a s i n ( φ + π 2 ) + b = a c o s ( φ ) + b A_1 = a sin(\varphi + 0)+b \quad A_2 = a sin(\varphi + \frac{\pi}{2})+b=a cos(\varphi) + b A1=asin(φ+0)+bA2=asin(φ+2π)+b=acos(φ)+b
A 3 = a s i n ( φ + π ) + b = − a s i n ( φ ) + b A 4 = a s i n ( φ + 3 π 2 ) + b = − a c o s ( φ ) + b A_3 = a sin(\varphi + \pi)+b = -a sin(\varphi)+b \quad A_4 = a sin(\varphi + \frac{3\pi}{2})+b = -acos(\varphi)+b A3=asin(φ+π)+b=asin(φ)+bA4=asin(φ+23π)+b=acos(φ)+b

自然地,有计算相位偏移的公式为:
φ = arctan ⁡ ( A 1 − A 3 A 2 − A 4 ) \varphi=\arctan \left(\frac{A_{1}-A_{3}}{A_{2}-A_{4}}\right) φ=arctan(A2A4A1A3)
幅值 a a a的计算方式为:

a = ( A 1 − A 3 ) 2 + ( A 2 − A 4 ) 2 2 a=\frac{\sqrt{\left(A_{1}-A_{3}\right)^{2}+\left(A_{2}-A_{4}\right)^{2}}}{2} a=2(A1A3)2+(A2A4)2

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

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

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

脉冲调制

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

在这里插入图片描述
使用 ϕ T X 1 \phi_{T X 1} ϕTX1以及 ϕ T X 2 \phi_{T X 2} ϕTX2两个脉冲来去选择将接收到的脉冲转换到node F D 1 FD1 FD1还是 F D 2 FD2 FD2,而 ϕ T X D \phi_{TXD} ϕTXD则是用于将环境光/背景光引入到charge drains。
主动照明光源的脉冲宽度为 T 0 T_0 T0,相位延迟为 T D T_D TD

已知转移到node FD1以及FD2的电子分别为:
N 1 = I p h q ( T 0 − T D ) N 2 = I p h q T D \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(T0TD)N2=qIphTD

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

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

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

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

L = c T 0 ( V 2 − V offset  ) 2 ( V 1 + V 2 − 2 V offset  ) 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+V22Voffset )cT0(V2Voffset )
在这里插入图片描述
此外,通常来说,脉冲调制去描述频率的时候,更喜欢用脉宽来描述,比如说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函数。

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

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

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

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

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

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

 def gcd(a,b):
     if a%b == 0:
         return b
     else :
         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 = A c o s ( ω t + ϕ ) x = A cos(\omega t+\phi) x=Acos(ωt+ϕ),有:
在这里插入图片描述

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

写在最后

我们最近创建了一个“三维重建技术动向与商业落地”的知识星球,这个星球汇聚了来自985和国际顶级学府的专家和学者,他们分享了最新的三维重建技术和商业应用的前沿知识和经验。如果你对三维重建领域感兴趣,那么这个知识星球是你不可错过的。通过加入这个知识星球,你可以学习到最新的三维重建技术和商业应用,提高自己的技能和能力。同时,如果你是一个三维重建领域的专家,你也可以在这个知识星球上分享自己的知识和经验,让更多的人受益。我们会追踪最新的AIGC与3D的技术,并试图从投资人、技术人、产品人以及用户的视角提出一些看法。加入知识星球,让我们一起探索三维重建领域的商业落地想法和前沿知识!如果你想加入这个知识星球,可以添加我的微信号(请私信我),我可以免费为你提供名额。

  • 13
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLOWVERSE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值