文章目录
什么是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πφ∗T∗c,就可以得到物体距离发射端的距离为:
φ
∗
T
4
π
∗
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π。
故此,就可以采样到上图中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(A2−A4A1−A3)
幅值
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(A1−A3)2+(A2−A4)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(T0−TD)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+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函数。
双频调制是什么?动机是?
我们已知单频调制的最大探测距离的理论公式为:
D
m
a
x
=
c
2
∗
f
D_{max} = \frac{c}{2*f}
Dmax=2∗fc
由上式很容易发现,调制频率越低,那么可以探测的距离就越远。然而,鱼和熊掌不可兼得,当探测距离远的时候,探测的精度便相对较差。反之,如果是高频调制,则会取得较好的探测精度,但探测距离又会受限。
自然地,如果我们希望能够兼顾高低频的优势,一种想法便是使得二者进行有机结合,即双频调制。
结合的优势很明显,既拓展了探测距离,也提高了探测精度,然而,万事总不完美,双频调制会拖慢帧率。
双频调制的时候,我们需要确定其距离相交处,难免地,需要计算其频率的最大公约数。而最大公约数可以通过传统的辗转相除法进行计算,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的技术,并试图从投资人、技术人、产品人以及用户的视角提出一些看法。加入知识星球,让我们一起探索三维重建领域的商业落地想法和前沿知识!如果你想加入这个知识星球,可以添加我的微信号(请私信我),我可以免费为你提供名额。