【3D】Stereo Matching learning notes

文章目录

  • 1、精度分析
  • [2、SceneFlow 的焦距和基线](#2、SceneFlow 的焦距和基线)
    • [1. 核心参数数值](#1. 核心参数数值)
    • [2. 深度计算关系](#2. 深度计算关系)
  • 3、评价指标
    • [1️⃣ MAE(Mean Absolute Error)](#1️⃣ MAE(Mean Absolute Error))
    • [2️⃣ RMSE(Root Mean Square Error)](#2️⃣ RMSE(Root Mean Square Error))
    • [3️⃣ AbsRel(Absolute Relative Error)](#3️⃣ AbsRel(Absolute Relative Error))
    • [4️⃣ δ < 1.25(Accuracy)](#4️⃣ δ < 1.25(Accuracy))

1、精度分析

Q:f_pixel = 609.83517297264575 # 校正后焦距(取 P10,0) B_meters = 65.03404857 / 1000.0 # 基线 mm → m 双目深度估计,B 和 f 参数如上图所示,如果视差精度为 x 个像素,不同距离下深度的估计出来的误差范围是多少,绘制为曲线 x 的取值范围 0.1 到 1,每隔 0.2 绘制一条曲线, x = 0.1 x = 0.3 ...横坐标 20 cm 到 60 cm,纵坐标单位 mm

根据校正后焦距 f p i x e l f_{pixel} fpixel 和基线 B B B,双目系统的深度计算公式为: Z = f ⋅ B d Z = \frac{f \cdot B}{d} Z=df⋅B

深度误差 Δ Z \Delta Z ΔZ 与视差误差 Δ d \Delta d Δd 的关系可以通过对 Z Z Z 求导得出: Δ Z = ∣ ∂ Z ∂ d ∣ ⋅ Δ d = f ⋅ B d 2 ⋅ Δ d = Z 2 f ⋅ B ⋅ Δ d \Delta Z = \left| \frac{\partial Z}{\partial d} \right| \cdot \Delta d = \frac{f \cdot B}{d^2} \cdot \Delta d = \frac{Z^2}{f \cdot B} \cdot \Delta d ΔZ= ∂d∂Z ⋅Δd=d2f⋅B⋅Δd=f⋅BZ2⋅Δd

深度误差分析与可视化根据该公式,深度误差与距离的平方成正比。在 20 cm 到 60 cm内,不同视差精度 x x x 对深度估计的影响如下:

py 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 核心参数定义
f_pixel = 609.83517297264575  # 校正后焦距
B_mm = 65.03524912178487      # 基线长度(mm)
f_B = f_pixel * B_mm          # 重投影常数

# 距离范围 (mm)
Z = np.linspace(200, 600, 100)

# 视差精度范围 x (0.1, 0.3, 0.5, 0.7, 0.9)
x_values = np.arange(0.1, 1.1, 0.2)

plt.figure(figsize=(10, 6))

for x in x_values:
    # 深度误差公式: delta_Z = (Z^2 / (f*B)) * x
    delta_Z = (Z**2 / f_B) * x
    plt.plot(Z/10, delta_Z, label=f'x = {x:.1f} px')

plt.title('Stereo Depth Error vs Distance (20cm - 60cm)')
plt.xlabel('Distance (cm)')
plt.ylabel('Depth Error (mm)')
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(title='Disparity Error (x)')
plt.show()

2、SceneFlow 的焦距和基线

Scene Flow 数据集(由 FlyingThings3D、Driving 和 Monkaa 三个子集组成)由于是合成数据集。

根据该数据集的官方文档和主流视觉算法实现,其核心参数 b b b(基线)和 f f f(焦距)如下:

1. 核心参数数值

  • 焦距 f f f :1050 像素 (pixel)
    • 在渲染这些合成图像时,虚拟相机的焦距被统一设定为 1050 像素。
  • 基线 b b b (Baseline) :1.0 单位 (unit)
    • 在虚拟 3D 空间中,左右相机的距离被设定为一个标准单位。在计算物理深度时,通常将其视作 1.0 1.0 1.0。
  • 分辨率 (Resolution) :960 x 540
    • 这是该数据集的标准输出图像尺寸。

2. 深度计算关系

在 Scene Flow 数据集中,视差(Disparity) d d d 与深度 Z Z Z 的转换关系依然遵循标准公式:
Z = f ⋅ b d = 1050 × 1.0 d Z = \frac{f \cdot b}{d} = \frac{1050 \times 1.0}{d} Z=df⋅b=d1050×1.0

计算得到的深度,要乘以基线的实际单位,eg xxx mm

3、评价指标

1️⃣ MAE(Mean Absolute Error)

M A E = 1 N ∑ i = 1 N ∣ Z ^ i − Z i ∣ \mathrm{MAE} = \frac{1}{N} \sum_{i=1}^{N} |\hat{Z}_i - Z_i| MAE=N1i=1∑N∣Z^i−Zi∣

平均绝对误差:预测深度和真实深度的平均偏差。


2️⃣ RMSE(Root Mean Square Error)

R M S E = 1 N ∑ i = 1 N ( Z ^ i − Z i ) 2 \mathrm{RMSE} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} (\hat{Z}_i - Z_i)^2} RMSE=N1i=1∑N(Z^i−Zi)2

对大误差更敏感(平方惩罚)。


3️⃣ AbsRel(Absolute Relative Error)

A b s R e l = 1 N ∑ i = 1 N ∣ Z ^ i − Z i ∣ Z i \mathrm{AbsRel} = \frac{1}{N} \sum_{i=1}^{N} \frac{|\hat{Z}_i - Z_i|}{Z_i} AbsRel=N1i=1∑NZi∣Z^i−Zi∣

相对误差(无尺度误差)


4️⃣ δ < 1.25(Accuracy)

δ = max ⁡ ( Z ^ , Z ) min ⁡ ( Z ^ , Z ) < 1.25 \delta = \frac{\max(\hat{Z}, Z)}{\min(\hat{Z}, Z)} < 1.25 δ=min(Z^,Z)max(Z^,Z)<1.25

预测深度在允许比例误差范围内的比例


相关推荐
拜小白2 小时前
【论文解读】《DeepPanoContext:用全局场景关系图 + 可微关系优做全景 3D 场景理解
深度学习·计算机视觉·全景图
山顶夕景3 小时前
【VLM】AdaCodec:用“预测视觉码”替代逐帧RGB输入
计算机视觉·视频问答·多模态理解·视觉token压缩
深圳市快瞳科技有限公司4 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
暴走约伯9 小时前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
zwc321043205512 小时前
Day 2:图像内存、数据类型与stride
c++·人工智能·opencv·算法·计算机视觉
誰能久伴不乏13 小时前
OpenCV 入门(二):像素访问、ROI 与深浅拷贝
人工智能·opencv·计算机视觉
zwc321043205514 小时前
第四周第五天——重构成类
c++·人工智能·opencv·算法·计算机视觉
Solange__15 小时前
AI世界模型、3D场景生成和游戏引擎怎么选?按5类任务比较交互、物理与导出
开发语言·人工智能·游戏·平面·3d·自然语言处理·游戏引擎
Solange__15 小时前
物流园区怎么用AI生成3D调度预演?从道路底图、车辆转弯到网页评审
图像处理·人工智能·游戏·3d·ai·自然语言处理·关卡设计
椒颜皮皮虾྅15 小时前
模型部署不再卡在环境上:DeploySharp 四大推理引擎与 Windows/Linux 离线交付实战
linux·运维·开发语言·人工智能·windows·计算机视觉·cuda