1、ToF技术原理:从飞行时间到深度图,深度相机的前世今生

各位同学好,我是你们这门课的主讲。今天咱们聊聊ToF深度相机——说白了,就是让相机学会“看距离”的技术。

我第一次接触ToF是几年前做机器人避障项目。当时用的还是双目视觉,一到弱光环境就抓瞎。后来换成ToF,才真正体会到什么叫“一束光解决所有问题”。

1.1 什么是飞行时间?

飞行时间,英文叫Time of Flight,简称ToF。原理其实特别简单:

你朝目标发射一束光,光碰到物体弹回来,你记录下它往返的时间。

光速是已知的(约3×10⁸ m/s),所以距离 = 光速 × 时间 / 2。

为什么要除以2?因为光走了个来回嘛。这个细节我当年面试时答错过,印象深刻。

核心公式:

d = (c × Δt) / 2

其中 d 是距离,c 是光速,Δt 是飞行时间。

你想想看,这原理是不是跟蝙蝠的回声定位有点像?只不过蝙蝠用声波,我们用光波。

1.2 从单点到深度图

一个ToF传感器能测一个点的距离。那怎么得到一整张深度图呢?

有两种主流做法:

  • 单点扫描式:用激光束逐点扫描,像打印机一样。优点是精度高,缺点是慢。
  • 面阵式:一次发射覆盖整个视场,每个像素独立测距。速度快,适合实时应用。

现在消费级ToF相机基本都是面阵式。我做过一个项目,用单点扫描式做高精度建模,扫一个椅子花了半小时。换成面阵式,一秒钟30帧,实时看深度变化,那感觉就像从拨号上网换成了5G。

1.3 ToF的两种调制方式

这里有个关键知识点:ToF怎么精确测量那极其短暂的飞行时间?

光速太快了,1米的往返时间才6.7纳秒。直接计时?普通电子设备根本做不到。所以工程师们想了个巧妙的办法——不直接测时间,而是测相位差

调制方式 原理 优点 缺点
连续波调制(CW-ToF) 发射连续正弦波或方波,通过测量发射波与反射波的相位差计算距离 精度高,抗干扰强,适合中远距离 存在距离模糊(2π周期问题)
脉冲调制(Pulse-ToF) 发射极短光脉冲,直接测量脉冲往返时间 原理简单,无距离模糊 对时间分辨率要求极高,近距精度不如CW

我个人习惯用CW-ToF。为什么?因为它在室内环境下的稳定性更好。我曾经在强光下测试过脉冲式,结果噪声大得离谱,后来换成CW式才搞定。

避坑指南: 我曾经在选型时忽略了一个问题——CW-ToF有最大不模糊距离。比如调制频率20MHz,对应的不模糊距离只有7.5米。超过这个距离,测出来的值会“折叠”。做室外项目时一定要算清楚这个上限。

1.4 深度相机的前世今生

深度相机不是一天建成的。我把它分成三个阶段:

  1. 萌芽期(1990s-2000s):主要是科研机构在用,设备又大又贵。我记得2005年看一篇论文,他们用ToF相机拍一张深度图要等好几秒,分辨率才64×64像素。
  2. 爆发期(2010-2015):微软Kinect v1(结构光)和v2(ToF)把深度相机带入了消费市场。价格从几万美元降到了几百美元。我当时兴奋地买了一个拆着玩,发现里面用的就是PMD的ToF芯片。
  3. 成熟期(2016至今):苹果、索尼、英飞凌等巨头入场。手机上的LiDAR、人脸识别的ToF模组,精度和集成度都上了一个台阶。

嗯,这里要注意一个误区:很多人以为ToF是新技术。其实原理在1960年代激光发明时就有人提了,只是硬件一直跟不上。说白了,是半导体工艺和计算能力的进步,才让ToF真正落地。

1.5 知识体系总览

为了让你对本章内容有个整体印象,我画了张图:

ToF深度相机知识体系(第1章) 飞行时间(ToF)原理 物理原理 光速 × 时间 / 2 调制方式 CW连续波 vs 脉冲波 成像方式 单点扫描 vs 面阵 发展历程 萌芽 → 爆发 → 成熟 应用场景 机器人、手机、AR/VR 核心输出:深度图(每个像素包含距离信息) 为后续RGB融合与彩色点云生成打下基础

1.6 深度图长什么样?

深度图本质上是一张灰度图。像素值越大(越亮),表示距离越近;像素值越小(越暗),表示距离越远。当然,不同厂商的编码方式可能相反,用之前一定要看文档。

举个例子:

// 假设深度图每个像素存储的是毫米值
// 像素值 1000 表示 1米
// 像素值 5000 表示 5米

// 读取深度图(伪代码)
uint16_t depth_value = depth_image.at<uint16_t>(row, col);
float distance_in_meters = depth_value / 1000.0f;

这里有个坑:很多ToF相机的深度图是16位无符号整数,但有些厂商用12位有效数据,高4位是状态位。我曾经没注意这个,结果算出来的距离全是错的,排查了半天才发现是位掩码没做。

重要提醒: 拿到一台新的ToF相机,第一件事就是看它的数据手册,搞清楚深度值的单位、位宽、以及无效像素的标记方式(通常是0或65535)。别问我怎么知道的——都是血泪教训。

1.7 本章小结

好了,这一章我们走了一遍ToF的底层逻辑:

  • 飞行时间原理:光速测距,简单但精妙
  • 从单点到深度图:面阵式是主流
  • CW vs 脉冲:各有千秋,看场景选型
  • 发展历程:从实验室到手机,走了三十年

下一章我们会深入CW-ToF的相位解算,手撕代码。到时候你会发现,数学公式其实没那么可怕。


专注资料整理