1. ToF技术原理:从光子到深度图
大家好,我是你们的老朋友。今天咱们来聊聊ToF技术的底层原理。说实话,我刚接触ToF时也被那些调制解调、相位计算搞得一头雾水。但干这行久了你会发现,ToF的核心思想其实很朴素——就是测量光飞一趟的时间。
你想想看,光速是固定的,每秒30万公里。如果我们能精确测出光从发射到返回的时间,那距离不就出来了吗?嗯,道理很简单,但工程实现上,这里面的门道可不少。
1.1 iToF与dToF:两种测距思路
ToF技术分两大流派:iToF(间接飞行时间)和dToF(直接飞行时间)。我在项目中两种都折腾过,各有各的脾气。
| 对比项 | iToF | dToF |
|---|---|---|
| 测距原理 | 通过相位差间接计算 | 直接测量光子飞行时间 |
| 典型芯片 | TI OPT系列、索尼DepthSense | ST VL53L系列、苹果LiDAR |
| 精度 | 毫米级(近距离) | 厘米级 |
| 抗干扰 | 易受多路径干扰 | 抗环境光能力强 |
| 典型应用 | 人脸识别、手势交互 | AR测距、扫地机避障 |
iToF 说白了就是「间接测量」。它不直接计时,而是发射连续调制的光波,然后检测反射光与发射光之间的相位偏移。相位差跟距离成正比,算一下就出来了。我在做手机前置3D摄像头时,用的就是iToF方案——近距离精度确实能到毫米级,但一到室外强光下就有点吃力。
dToF 就粗暴多了。它直接发射一个光脉冲,然后用高精度计时器记录光子往返的时间。你想想看,光1纳秒走30厘米,要测厘米级精度,计时精度得达到皮秒级。苹果的LiDAR用的就是SPAD阵列做dToF,我在iPad Pro上测过,5米外还能稳定出深度,确实猛。
核心结论:近距离高精度选iToF,远距离抗干扰选dToF。没有绝对的好坏,看场景。
1.2 调制解调方式:iToF的灵魂
iToF的调制方式,我习惯把它分成两类:连续波调制(CW)和脉冲调制。目前主流方案是CW调制,尤其是正弦波和方波。
正弦波调制:发射的是连续正弦波信号。接收端通过四个相位采样点(0°、90°、180°、270°)来解算相位差。公式很简单:
距离 d = (c × Δφ) / (4π × f_mod)
其中:
c = 光速(3×10⁸ m/s)
Δφ = 测量到的相位差(弧度)
f_mod = 调制频率(Hz)
举个例子,调制频率100MHz,波长就是3米。如果相位差是90°,那距离就是0.75米。嗯,这里要注意——相位模糊问题。因为相位是周期性的,超过半个波长就会产生歧义。我早期做项目时就踩过这个坑,测出来的距离跳来跳去,后来加了多频调制才解决。
方波调制:用高低电平的方波信号,通过相关采样计算相位。方波的好处是驱动电路简单,但谐波分量多,精度不如正弦波。我个人习惯在低成本方案里用方波,高精度场景还是老老实实上正弦波。
我的经验:调制频率的选择是个权衡。频率越高,精度越好,但测距范围越小。100MHz下最大不模糊距离是1.5米,50MHz下是3米。选频率前先想清楚你的目标场景。
1.3 深度图与置信度图生成
好了,前面讲了原理,现在说说实际输出。ToF传感器最终会给你两样东西:深度图和置信度图。这两张图是后续所有处理的基础。
深度图:每个像素存储的是距离值,单位通常是毫米。格式上,我见过8位、16位、甚至32位浮点。16位是最常见的,能表示0到65535毫米,约65米,够用了。
深度图生成流程大致如下:
- 采集四个相位图像(I0、I90、I180、I270)
- 计算相位差:Δφ = arctan((I270 - I90) / (I180 - I0))
- 根据调制频率换算距离
- 做非线性校正(每个传感器都有自己的标定参数)
- 输出深度图
置信度图:这个很多人会忽略,但它其实特别重要。置信度图每个像素的值表示该点深度测量的可靠程度。值越高,说明信号质量越好。
置信度通常由以下几个因素决定:
- 接收光强:反射光越强,置信度越高
- 信噪比:信号与噪声的比值
- 调制对比度:反映调制信号的清晰度
- 一致性检查:多帧之间的稳定性
避坑指南:我曾经在项目里直接用原始深度图做重建,结果边缘全是飞点。后来才发现,那些飞点的置信度值极低。从那以后,我养成了一个习惯——任何深度处理前,先用置信度图做掩膜。置信度低于阈值的点直接扔掉,效果立竿见影。
实际应用中,我一般这样用置信度图:
# 伪代码示例
depth_img = load_depth("frame_001.depth")
confidence_img = load_confidence("frame_001.conf")
# 设置置信度阈值
threshold = 0.7
mask = confidence_img > threshold
# 只保留高置信度的深度点
filtered_depth = depth_img * mask
嗯,就是这么简单。但效果真的立竿见影。
1.4 知识体系总览
为了让大家有个整体认识,我画了张图,把ToF技术原理的核心脉络梳理了一下:
这张图把ToF技术原理的核心脉络串起来了。从iToF和dToF两大分支出发,到调制解调方式,再到最终的深度图和置信度图输出。你跟着这个框架走,就不会迷失方向。
我的建议:初学者先别急着调参。先把iToF和dToF的区别搞清楚,再理解调制解调的原理。等你真正动手处理深度图时,你会发现置信度图才是那个「救命的家伙」。
好了,这一章的内容就到这里。ToF的原理说复杂也复杂,说简单也简单——无非就是测光飞的时间。但工程实现上,每一个环节都有坑。我在后面几章会继续分享实际项目中的踩坑经验,咱们一步步来。
公众号:蓝海资料掘金营,微信deep3321