第 12 章 深度估计 (Depth Estimation)

      +

      核心结论

      • 对极几何(§12.1):两视图几何约束;基础 / 本质矩阵;视差与深度的反比关系。

      • 稀疏对应(§12.2):特征点匹配 + 三角化 → 稀疏深度图。

      • 稠密对应(§12.3):像素级匹配;立体匹配(SGM / SGBM / 深度学习)。

      • 局部方法(§12.4):滑动窗口 / 块匹配;快速但深度边缘模糊。

      • 全局优化(§12.5):MRF / 图割 / SGM;精度高但慢。

      • 深度学习方法(§12.6):RAFT-Stereo / CREStereo / FoundationStereo;当前 SOTA。

      • 多视图立体 (MVS)(§12.7):多张图像重建稠密深度;COLMAP / OpenMVS。

      • 单目深度估计(§12.8):从单图估计深度;DPT / MiDaS / Depth Anything。

      本章主旨

      本章是"深度估计章"——从图像恢复每个像素的深度。深度是 3D 重建 / 自动驾驶 / AR 的核心;理解后才能选对算法(传统立体匹配 vs 深度学习 vs MVS vs 单目深度)。

      一、核心概念

      本章围绕 8 个核心概念展开:对极几何 → 稀疏 → 稠密 → 局部 → 全局 → 深度学习 → MVS → 单目深度。

      概念 定义 + 重要性 实现提示

      对极几何

      两视图约束;视差与深度反比。

      §12.1;立体匹配的理论基础。

      稀疏对应

      特征点匹配 + 三角化;稀疏深度图。

      §12.2;SfM / SLAM 副产品。

      稠密对应

      像素级匹配;立体匹配 SGM / SGBM。

      §12.3;3D 重建 / AR / 自动驾驶。

      局部方法

      滑动窗口 / 块匹配;快速但边缘模糊。

      §12.4;实时应用。

      全局优化

      MRF / 图割 / SGM;精度高但慢。

      §12.5;高精度需求。

      深度学习

      RAFT-Stereo / CREStereo;当前 SOTA。

      §12.6;GPU 实时高精度。

      多视图立体 (MVS)

      多张图像重建稠密深度;COLMAP。

      §12.7;离线 3D 重建。

      单目深度估计

      从单图估计深度;DPT / MiDaS / Depth Anything。

      §12.8;无标定深度。

      二、详细笔记

      2.1 对极几何与视差 (Epipolar Geometry & Disparity)

      What:两视图的几何约束;视差(左右像素 x 差)与深度反比。

      Why:立体匹配的理论基础;理解后才能设计匹配算法。

      How

      视差-深度关系(§12.1):

      \[Z = \frac{f \cdot B}{d} \end{bmatrix>\]
      • Z:深度;f:焦距;B:基线(两相机距离);d:视差。

      视差与深度的关系
      • 视差越大 → 物体越近。

      • 视差越小 → 物体越远。

      • 视差 = 0 → 物体在无穷远。

      When:立体匹配;3D 重建;自动驾驶;AR。

      Example:双目相机(基线 10 cm,焦距 1000 像素)→ 100 米深度对应 0.1 像素视差。

      2.2 稀疏对应 (Sparse Correspondence)

      What:特征点匹配 + 三角化得到稀疏深度图。

      Why:SfM / SLAM 副产品;高效但稀疏。

      How

      稀疏深度获取(§12.2):

      1. 特征检测:SIFT / ORB(§7)。

      2. 跨图匹配:特征描述子最近邻。

      3. 本质矩阵估计:RANSAC + 5 点法。

      4. 三角化:每对匹配点 → 3D 点。

      稀疏 vs 稠密深度
      • 稀疏:仅特征点有深度;SfM / SLAM 默认。

      • 稠密:每像素深度;立体匹配 / MVS / 单目深度估计。

      • 两者互补:稀疏可作稠密的种子 / 引导。

      When:SfM;SLAM;3D 重建初始化。

      Example*:cv2.triangulatePoints;COLMAP 增量 SfM 输出稀疏点云。

      2.3 稠密立体匹配 (Dense Stereo Matching)

      What:像素级对应 → 稠密视差图 → 深度图。

      Why:自动驾驶 / AR / 机器人需要稠密深度。

      How

      经典立体匹配算法(§12.3-§12.5):

      • 块匹配:滑动窗口;SAD / SSD / NCC;快速但边缘模糊。

      • SGM / SGBM:半全局;扫描线优化;平衡精度 / 速度。

      • 图割:全局最优;慢但精度高。

      深度学习立体匹配(§12.6):

      • RAFT-Stereo(2021):迭代优化;当前 SOTA。

      • CREStereo(2022):级联递归。

      • FoundationStereo(2024):基础模型。

      立体匹配的"3 难"
      • 无纹理区域:所有像素相似 → 匹配不确定。

      • 遮挡:左右图可见区域不同。

      • 反光 / 透明:违反朗伯假设。

      When:自动驾驶(双目 / 多目立体);AR 深度感知;3D 扫描。

      Example*:cv2.StereoSGBM_create()RAFT-Stereo 仓库;Open3D 提供多视图立体。

      2.4 多视图立体 (Multi-View Stereo, MVS)

      What:用多张(>2)图像重建稠密深度。

      Why:多视角减少遮挡 / 误匹配;MVS 比双目立体更鲁棒。

      How

      MVS 流程(§12.7):

      1. 深度图初始化:SfM 稀疏点 + 单应扩展。

      2. 光度一致性:把图像投影到当前视图 + 比较。

      3. 正则化:相邻像素深度平滑。

      4. 深度融合:多视图深度融合成稠密点云。

      MVS 的开源工具
      • COLMAP:SOTA;C++ 实现。

      • OpenMVS:SfM 后处理 + MVS + 网格。

      • AliceVision(Meshroom):集成 pipeline。

      When:文物 3D 数字化;街景 3D 重建;电影特效;手机 3D 扫描。

      Example*:colmap patch_match_stereoopenMVS;Meshroom GUI。

      2.5 单目深度估计 (Monocular Depth Estimation)

      What:从单张图像估计每个像素的深度——无需立体 / SfM。

      Why:单目相机成本低;很多场景只有单目(老照片 / 视频)。

      How

      深度学习方法(§12.8):

      • DPT(2021):Vision Transformer 编码 + 渐进解码。

      • MiDaS(2022):混合数据集训练;零样本泛化强。

      • Depth Anything(2024):大规模合成数据预训练 + 伪标签微调;SOTA。

      • Metric3D v2(2024):真实度量深度(非相对)。

      单目深度的不确定性
      • 相对深度 vs 度量深度:模型输出"近 / 远"易;输出"几米"难(尺度模糊)。

      • 几何先验:物体高度(人 / 车)隐含尺度信息。

      • 视频输入:用时序约束可恢复尺度(单目 SLAM)。

      When:单目相机 AR / 自动驾驶;老照片 3D 化;视频深度估计。

      Example*:pip install timm + MiDaS / Depth Anything 模型;transformers 库。

      三、关键图表

      视觉图表

      图 12-1
      Figure 1. 图 12-1:立体相机几何
      图 12-2
      Figure 2. 图 12-2:视差与深度关系
      图 12-3
      Figure 3. 图 12-3:SGM 扫描线
      图 12-4
      Figure 4. 图 12-4:RAFT-Stereo 迭代

      非可视化条目

      非可视化条目(表 / 算法)
      编号 内容摘要

      表 12.1

      立体匹配算法对比(SGM / SGBM / 图割 / RAFT-Stereo)。

      表 12.2

      单目深度模型对比(MiDaS / DPT / Depth Anything)。

      式 12-1 至 12-10

      视差 / 深度 / 三角化公式。

      列表 12.1-12.x

      OpenCV SGBM / RAFT-Stereo / Depth Anything 示例。

      核心公式对照表

      核心公式对照表
      概念 公式

      视差-深度

      \(Z = f B / d\)

      对极约束

      \(\mathbf{x}_2^T F \mathbf{x}_1 = 0\)

      SAD 块匹配

      latexmath:[d^* = \arg\min_d \sum_{(u,v) \in W}

      I_L(u,v) - I_R(u-d,v)

      ]

      SGM 扫描线

      \(L_r(p, d) = C(p, d) + \min(L_r(p-r, d), L_r(p-r, d-1) + P_1, L_r(p-r, d+1) + P_1, \min_k L_r(p-r, k) + P_2)\)

      四、思维导图

      mindmap
        root((第 12 章 深度估计))
          对极几何
            视差深度
            基础矩阵
          稀疏对应
            特征匹配
            三角化
          稠密匹配
            块匹配
            SGM
            图割
          深度学习
            RAFTStereo
            CREStereo
          MVS
            多视图
            COLMAP
          单目深度
            MiDaS
            DepthAnything

      五、重点与易错点

      • 视差与深度反比:立体相机几何核心公式。

      • SGM 是经典 SOTA:实时(10+ FPS)+ 较好精度;OpenCV 直接可用。

      • RAFT-Stereo 是深度学习 SOTA:GPU 实时;优于传统方法。

      • 单目深度尺度模糊:模型输出"近 / 远"易;"几米"难;需额外先验。

      • Depth Anything 是单目深度 SOTA(2024):零样本泛化强;MIT-HAN-Lab 开源。

      • MVS 需要 SfM 初始化:用 SfM 稀疏点 + 单应扩展。

      • 深度学习需要 GPU:CPU 推理慢;适合服务端 / 自动驾驶。

      • 跨章衔接:第 11 章 SLAM 提供稀疏深度;第 13 章 3D 重建用稠密深度 / MVS;第 14 章 IBR 用深度做新视角合成。