3、ToF标定基础:内参标定、外参标定与温度补偿

说到ToF相机的标定,很多人第一反应就是「跟普通RGB相机差不多嘛」。嗯,这话对了一半。ToF标定的核心逻辑确实跟传统相机标定相通,但多了几个让人头疼的「坑」——尤其是温度补偿这块,我当年第一次做的时候差点被搞崩溃。

今天咱们就把ToF标定拆成三块来讲:内参、外参、温度补偿。每一块我都会结合自己的踩坑经历,给你讲透。

3.1 内参标定:焦距、主点、畸变

内参标定,说白了就是搞清楚镜头本身的「脾气」。焦距是多少?主点有没有偏?镜头畸变有多严重?这些参数决定了深度图里每个像素对应的真实空间方向。

核心参数一览:
  • 焦距 (fx, fy):单位像素,决定了视场角大小
  • 主点 (cx, cy):光轴与成像平面的交点,理想情况在图像中心
  • 畸变系数 (k1, k2, p1, p2, k3):径向畸变 + 切向畸变

标定流程其实不复杂。你拿一个棋盘格或者圆点标定板,在不同距离、不同角度下采集个二三十帧。然后用OpenCV的 calibrateCamera() 或者 calibrateCameraCharuco() 跑一遍就行。

但我得提醒你一个关键点:ToF相机的红外光跟可见光波长不同,折射率有差异。所以你不能直接用RGB镜头的内参去替代ToF的内参。我见过有人图省事,直接把RGB内参搬过来用,结果点云全歪了。

我的习惯:用ToF自带的红外照明,配合红外反射标定板来采集数据。这样标出来的内参才是真正匹配的。

另外,ToF的深度图分辨率通常不高(比如QVGA或VGA),标定板上的角点检测容易受噪声影响。我建议你用ChArUco标定板,它的鲁棒性比普通棋盘格好很多。

// 伪代码示例:ToF内参标定流程
1. 采集20-30帧红外图像 + 深度图
2. 对每帧红外图检测标定板角点
3. 调用 cv::calibrateCamera() 得到内参矩阵 K 和畸变系数 D
4. 验证重投影误差 < 0.5 像素
5. 保存内参到 YAML 文件

3.2 外参标定:多传感器对齐

外参标定解决的是「多个传感器之间的相对位置关系」。比如你的设备上有一个ToF、一个RGB相机、一个IMU,它们各自看到的世界是不一样的。外参就是把这些「视角」统一到一个坐标系下。

我做过一个项目,ToF和RGB之间差了5厘米的基线,结果融合出来的彩色点云在物体边缘全是「重影」。后来一查,外参标定的时候旋转矩阵差了0.5度——就这么点误差,在3米外就偏了2.6厘米。

避坑指南:我曾经因为标定板不够平整,导致外参标定结果反复横跳。后来换了陶瓷标定板,问题就解决了。标定板的平面度至少要在0.1mm以内。

外参标定常用的方法有两种:

  1. 基于标定板的联合标定:让ToF和RGB同时看到同一个标定板,分别提取角点,然后求解两个相机坐标系之间的旋转平移矩阵。
  2. 基于特征匹配的自动标定:利用场景中的自然特征(如角点、边缘)进行匹配,适合在线标定场景。

我个人更推荐第一种,精度高、可重复性好。具体做法是:

// 外参标定核心步骤
1. 固定标定板,同时采集ToF深度图和RGB图
2. 从深度图生成3D点云(利用内参反投影)
3. 从RGB图检测2D角点
4. 求解PnP问题,得到 ToF→RGB 的变换矩阵 T
5. 多帧采集,用非线性优化(如Levenberg-Marquardt)优化 T

这里有个细节:ToF的深度图本身有噪声,直接反投影出来的3D点位置会有抖动。我建议你先对深度图做一下时域滤波(比如滑动平均),再去做外参标定。

3.3 温度补偿标定

嗯,这块是ToF标定里最容易被忽略、但影响最大的部分。你想想看,ToF的原理是发射红外光、测量飞行时间。温度一变,激光器的波长会漂移,传感器的暗电流会变化,甚至镜头的折射率都会变。

我做过一个实验:把ToF相机从25°C加热到65°C,深度测量误差从±1cm变成了±8cm。这要是用在机器人避障上,直接撞墙。

温度补偿的核心思路:
  • 建立「温度 → 深度偏移量」的映射关系
  • 在运行时实时测量温度,查表或插值得到补偿值
  • 对每个像素的深度值进行修正

具体怎么做?我一般分三步:

  1. 数据采集:把ToF相机放进温箱,从-10°C到70°C,每5°C采集一组数据。每组数据里,对着已知距离的平面(比如1m、2m、3m)拍几十帧。
  2. 建模:对每个温度点,计算深度测量值与真实值的偏差。然后拟合一个多项式模型(通常二阶就够了)。
  3. 部署:把模型参数烧录到相机固件里,或者在上位机做实时补偿。
// 温度补偿模型示例(二阶多项式)
depth_corrected = depth_raw + a * T^2 + b * T + c

// 其中 T 是当前温度(°C),a、b、c 是标定得到的系数
// 不同距离可能需要不同的系数,建议分段拟合
我的经验:温度补偿不是一劳永逸的。同一款芯片,不同批次之间的温度特性可能有差异。量产时最好每台设备单独标定,或者至少抽检10%做验证。

另外,温度变化还会影响内参。镜头的热胀冷缩会导致焦距和主点轻微漂移。如果你做的是高精度三维重建(比如文物扫描),建议把内参也做成温度相关的模型。

知识体系总览

下面这张图是我自己整理的ToF标定知识结构,你可以对照着看,心里有个全局观。

ToF标定知识体系 ToF相机标定 内参标定 核心参数 • 焦距 fx, fy • 主点 cx, cy • 畸变系数 k1,k2,p1,p2,k3 外参标定 多传感器对齐 • ToF ↔ RGB • ToF ↔ IMU • 旋转矩阵R + 平移向量t 温度补偿 热漂移校正 • 深度偏移建模 • 多项式拟合 • 实时查表补偿 三者缺一不可 内参决定单帧精度 → 外参决定多传感器融合 → 温度补偿保证稳定性

你看,这三块其实是环环相扣的。内参没标好,外参标出来也是错的;外参没对齐,融合出来的点云就是花的;温度补偿不做,到了夏天和冬天就是两台不同的相机。

最后提醒一句:标定不是一次性工作。我建议每半年或者每次设备经历剧烈温度变化后,重新做一次标定验证。尤其是温度补偿模型,最好在设备出厂前做全温区标定,别偷懒。

好了,ToF标定的核心内容就这些。下一章咱们会聊深度图的后处理——滤波、去噪、空洞填充,这些都是把原始深度数据变成可用点云的关键步骤。


公众号:蓝海资料掘金营,微信deep3321