一、双目视觉基础:深度相机原理、双目立体视觉概述、视差与深度关系、标定的意义与目标

1.1 深度相机原理——我们到底在测什么?

做双目视觉这么多年,我经常被问到:“你们这个相机跟普通摄像头有啥区别?”

说白了,普通摄像头只能拍出二维图像——红绿蓝三通道,没有距离信息。而深度相机,就是要在每个像素上多给一个“Z值”,告诉你这个点离镜头有多远。

深度相机的主流方案有三种:

  • 结构光法:投射已知图案,通过图案变形算深度。Kinect v1 就是典型代表。
  • ToF(飞行时间法):发射光脉冲,测往返时间。手机上的深感镜头大多用这个。
  • 双目立体视觉:用两个相机模拟人眼,靠“视差”算深度。这也是咱们这门课的核心。

我个人习惯把双目方案叫做“被动式深度感知”——它不主动发光,全靠环境光。好处是功耗低、室外也能用;坏处是遇到白墙、纹理少的场景就抓瞎。

核心要点:双目深度相机本质上是一对经过精密标定的普通相机,通过几何关系反推深度。它不依赖特殊传感器,成本可控,这也是工业界青睐它的原因。

1.2 双目立体视觉概述——两只眼睛的智慧

你想想看,人为什么有两只眼睛?

一只眼睛也能看东西,但判断距离只能靠经验(比如近大远小)。两只眼睛就不一样了——左右眼看到的画面有细微差异,大脑就是靠这个差异算出距离的。

双目立体视觉,就是把这个过程用数学和算法复现出来。

基本流程是这样的:

  1. 图像采集:左右相机同时拍一张图
  2. 立体校正:把两幅图对齐到同一平面上(这一步依赖标定参数)
  3. 立体匹配:在左图上选一个点,去右图上找它的“孪生兄弟”
  4. 视差计算:两个点的水平位置差,就是视差
  5. 深度恢复:用三角测量原理,把视差转成深度

我在项目中遇到过最头疼的事,就是立体匹配这一步。你以为找到了匹配点,其实可能是误匹配。嗯,这里要注意——纹理越丰富,匹配越准;光滑墙面、重复纹理,都是坑。

1.3 视差与深度关系——一个公式搞定

视差和深度的关系,其实就一个公式:

Z = (f * B) / d

其中:

  • Z:深度(单位:毫米)
  • f:焦距(单位:像素)
  • B:基线长度(左右相机光心距离,单位:毫米)
  • d:视差(单位:像素)

这个公式告诉我们三件事:

变量 变化趋势 对深度的影响
视差 d 增大 物体更近 Z 变小
基线 B 增大 深度分辨率更高 但相机体积变大
焦距 f 增大 视差更敏感 但视野变窄

我曾经踩过一个坑:选基线时贪大,觉得基线越长精度越高。结果装到机器人上发现,两个相机间距太大,近处的物体根本不在公共视野里。所以基线选择是个权衡——不是越大越好。

避坑指南:我曾经在室外场景用 12cm 基线,结果 10 米外的物体视差只有 1-2 个像素,深度误差直接飙到米级。后来我总结了一个经验——基线长度 ≈ 目标距离的 1/100 到 1/50,效果比较稳。

1.4 标定的意义与目标——为什么非标不可?

你可能会问:相机买回来不就能用吗?为什么要标定?

原因很简单——理想很丰满,现实很骨感

理论上,左右相机应该完全平行、光轴对齐、焦距一致。但实际生产中:

  • 镜头有畸变(径向畸变、切向畸变)
  • 两个相机安装有角度偏差
  • 焦距、主点位置有微小差异

这些误差如果不校正,算出来的深度就是错的。我见过一个项目,没做标定直接跑立体匹配,结果深度误差超过 30%。

标定的目标,说白了就是三件事:

  1. 内参标定:知道每个相机的焦距、主点、畸变系数
  2. 外参标定:知道两个相机之间的旋转和平移关系
  3. 立体校正:把左右图像“掰正”,让匹配点只出现在同一行上

警告:标定不是一劳永逸的。温度变化、振动、镜头松动都会改变标定参数。我建议每隔 3-6 个月重新标定一次,或者每次拆装后必须重新标。

1.5 本章知识体系

下面这张图,是我自己梳理的双目深度相机标定的知识脉络。你可以把它当作整个课程的地图:

双目深度相机标定知识体系 深度相机原理 双目立体视觉 标定 结构光法 ToF法 双目立体法 图像采集 立体校正 立体匹配 视差计算 深度恢复 内参标定 外参标定 立体校正 核心公式:Z = (f * B) / d 标定目标:获取精确的内参 + 外参

这张图把本章的核心内容串起来了。从深度相机原理出发,到双目立体视觉的完整流程,再到标定的三大任务。后面的章节,就是围绕这张图一步步展开。

一句话总结:双目深度相机标定,就是给两个相机“配对”,让它们知道彼此的位置关系,从而能从二维图像中算出三维深度。没有标定,双目系统就是一对瞎眼。


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