1. 引言(Introduction)
-
研究范围限定
- 仅考虑 two-frame(两帧)输入。
- 相机 已标定且已极线校正(rectified)。
- 输出 dense disparity map,即每个像素必须给出一个视差值,包括遮挡或无纹理区域。
- 排除 稀疏/特征匹配 方法,除非后面再插值成稠密。
-
两大目标
- Taxonomy:给出可拆解、可替换的算法组件。
- Testbed:
- 统一 C++ 实现(模块化,可插拔)。
- 公开数据集 + 真值 + 评测脚本。
- 网址(2002 年):
www.middlebury.edu/stereo(现重定向至 vision.middlebury.edu/stereo)。
2. 动机与范围(Motivation and Scope)
2.1 Computational Theory(隐式假设)
- 成像假设
- Lambertian 表面(亮度随视角不变)。
- 可加性高斯噪声或增益/偏置差异。
- 几何假设
- 场景由“分片光滑表面”组成 → 需要平滑先验。
- 已知极线几何 → 搜索空间退化为水平扫描线。
2.2 表示(Representation)
-
视差空间图像 DSI
定义:
(x,y,d)其中{x,y参考图像像素坐标d视差值(离散或连续) (x, y, d) \quad \text{其中} \quad \begin{cases} x, y & \text{参考图像像素坐标} \cr d & \text{视差值(离散或连续)} \end{cases} (x,y,d)其中{x,yd参考图像像素坐标视差值(离散或连续)
对 rectified 图像,对应关系:
x′=x+s⋅d(x,y),y′=y,s∈{+1,−1} x' = x + s \cdot d(x, y),\quad y' = y,\quad s\in\{+1,-1\} x′=x+s⋅d(x,y),y′=y,s∈{+1,−1}
其中 sss 保证视差恒正。 -
DSI 切片示例
文中图 1 给出:- (x, y) 切片:固定 d,看哪些像素在该视差下匹配。
- (x, d) 切片:固定扫描线 y,看整条扫描线随 d 的变化。

3. 立体算法分类法(Taxonomy)
任何算法都可拆成 4 步:
| 阶段 | 英文原文 | 中文要点 |
|---|---|---|
| ① matching cost computation | 计算匹配代价 | AD、SD、NCC、Census、BT… |
| ② cost aggregation | 代价累积/扩散 | 方窗、shiftable、高斯、扩散… |
| ③ disparity optimization | 优化 | WTA、DP、GC、SA、BP… |
| ④ disparity refinement | 精修 | 亚像素、遮挡填充、中值滤波… |
下面按上述四步逐一展开细节与公式。
3.1 Matching Cost Computation
| 名称 | 公式 | 备注 |
|---|---|---|
| AD (Absolute Difference) | $C_{\text{AD}}(x,y,d)= | I_L(x,y)-I_R(x+d,y) |
| SD (Squared Difference) | CSD=(IL−IR)2C_{\text{SD}}=(I_L-I_R)^2CSD=(IL−IR)2 | 对噪声敏感 |
| Truncated | CTAD=min(C,τ)C_{\text{TAD}}=\min(C,\tau)CTAD=min(C,τ) | 截断值 τ\tauτ 取 5–20 之间 |
| BT (Birchfield–Tomasi) | 见公式 (2) | 线性插值解决采样错位 |
| NCC (Normalized Cross-Correlation) | 标准定义 | 等价于 SSD + 方窗 |
| Census / Rank | 非参数变换 | 对增益/偏置不敏感 |
| Gradient based | $ | \nabla I_L - \nabla I_R |
| Filter bank | Laplacian、Gabor 响应 | Marr & Poggio 1976;Jones & Malik 1992 |
- BT 详细公式
对每条扫描线,先把右图做线性插值:
IRinterp(x+d)=αIR(⌊x+d⌋)+(1−α)IR(⌈x+d⌉) I_R^{\text{interp}}(x+d) = \alpha I_R(\lfloor x+d\rfloor)+(1-\alpha)I_R(\lceil x+d\rceil) IRinterp(x+d)=αIR(⌊x+d⌋)+(1−α)IR(⌈x+d⌉)
然后
CBT(x,y,d)=minδ∈[−0.5,0.5]∣IL(x,y)−IRinterp(x+d+δ)∣ C_{\text{BT}}(x,y,d)=\min_{\delta\in[-0.5,0.5]} |I_L(x,y)-I_R^{\text{interp}}(x+d+\delta)| CBT(x,y,d)=δ∈[−0.5,0.5]min∣IL(x,y)−IRinterp(x+d+δ)∣
3.2 Cost Aggregation
| 方法 | 公式 | 说明 |
|---|---|---|
| 方窗/Box | C=boxw×w∗C0C = \text{box}_{w\times w} * C_0C=boxw×w∗C0 | 可快速用滑动求和 |
| Gaussian | C=Gσ∗C0C = G_\sigma * C_0C=Gσ∗C0 | 权重随距离衰减 |
| Shiftable window | 对每个像素取周围 w×ww\times ww×w 窗口最小代价 | 见 min-filter 实现 |
| Multiple window (Okutomi 1992) | 自适应窗口大小 | 迭代比较窗口内方差 |
| Diffusion | 迭代求解 | |
| C(t+1)=C(t)+λ∇2C(t)C^{(t+1)} = C^{(t)} + \lambda \nabla^2 C^{(t)}C(t+1)=C(t)+λ∇2C(t) | 类似热扩散 | |
| Membrane model | 带保真项 | |
| C(t+1)=βC0+(1−β)diffusedC^{(t+1)} = \beta C_0 + (1-\beta)\text{diffused}C(t+1)=βC0+(1−β)diffused | β 控制保真程度 |
- Shiftable 实现技巧
原文 4.2 节:先 box filter,再 1-D min-filter,复杂度 O(N),等价于遍历所有平移窗口。
3.3 Disparity Computation / Optimization
3.3.1 局部方法(WTA)
- 公式:
d(x,y)=argmindC(x,y,d) d(x,y)=\arg\min_{d} C(x,y,d) d(x,y)=argdminC(x,y,d)
缺点:无遮挡处理;边界易过平滑。
3.3.2 全局能量最小化
-
能量泛函
E(d)=Edata(d)+Esmooth(d) E(d)=E_{\text{data}}(d)+E_{\text{smooth}}(d) E(d)=Edata(d)+Esmooth(d)
其中
Edata=∑(x,y)C(x,y,d(x,y)) E_{\text{data}}=\sum_{(x,y)} C\bigl(x,y,d(x,y)\bigr) Edata=(x,y)∑C(x,y,d(x,y))
Esmooth=∑(x,y)ρ(∣d(x,y)−d(x+1,y)∣)+ρ(∣d(x,y)−d(x,y+1)∣) E_{\text{smooth}}=\sum_{(x,y)}\rho\bigl(|d(x,y)-d(x+1,y)|\bigr)+\rho\bigl(|d(x,y)-d(x,y+1)|\bigr) Esmooth=(x,y)∑ρ(∣d(x,y)−d(x+1,y)∣)+ρ(∣d(x,y)−d(x,y+1)∣)
ρ 函数可选:- 二次 (Tikhonov)
- 截断二次 $ \rho(\Delta)=\min(\Delta^2,\tau) $
- Potts/全变分 (Boykov 2001)
-
梯度加权平滑
ρI(ΔI)={p∣ΔI∣<opt_grad_thresh1otherwise \rho_I(\Delta I)=\begin{cases} p & |\Delta I|<\text{opt\_grad\_thresh}\\[4pt] 1 & \text{otherwise} \end{cases} ρI(ΔI)={p1∣ΔI∣<opt_grad_threshotherwise
使得深度跳变与图像边缘对齐。
3.3.3 优化算法
| 算法 | 思想 | 备注 |
|---|---|---|
| Graph Cut (GC) | α-β swap/expansion | Boykov et al. 2001 |
| Simulated Annealing | Metropolis/Gibbs | 慢,易陷局部极小 |
| Dynamic Programming | 每条扫描线独立最小路径 | O(N D) |
| Belief Propagation | 在网格图上迭代消息传递 | Sun et al. 2002 |
- DP 细节
状态:Match / Left-only / Right-only
递推:
M(x,d)=C(x,d)+min{M(x−1,d),L(x−1,d),R(x−1,d)}L(x,d)=occlusion cost+min{M(x−1,d−1),L(x−1,d−1)}R(x,d)=occlusion cost+min{M(x−1,d+1),R(x−1,d+1)} \begin{aligned} M(x,d)&=C(x,d)+\min\bigl\{M(x-1,d),L(x-1,d),R(x-1,d)\bigr\}\\[4pt] L(x,d)&=\text{occlusion cost}+\min\bigl\{M(x-1,d-1),L(x-1,d-1)\bigr\}\\[4pt] R(x,d)&=\text{occlusion cost}+\min\bigl\{M(x-1,d+1),R(x-1,d+1)\bigr\} \end{aligned} M(x,d)L(x,d)R(x,d)=C(x,d)+min{M(x−1,d),L(x−1,d),R(x−1,d)}=occlusion cost+min{M(x−1,d−1),L(x−1,d−1)}=occlusion cost+min{M(x−1,d+1),R(x−1,d+1)}
最终回溯得整条扫描线最优路径。
3.4 Disparity Refinement
-
亚像素二次拟合
设离散最优 d*,用 C(d*-1), C(d*), C(d*+1) 三点拟合抛物线:
dsub=d∗+C(d∗−1)−C(d∗+1)2(C(d∗−1)−2C(d∗)+C(d∗+1)) d_{\text{sub}} = d^* + \frac{C(d^*-1)-C(d^*+1)}{2\bigl(C(d^*-1)-2C(d^*)+C(d^*+1)\bigr)} dsub=d∗+2(C(d∗−1)−2C(d∗)+C(d∗+1))C(d∗−1)−C(d∗+1)
要求分母>0(曲率正)。 -
遮挡检测
左右一致性检查:
∣dL(x,y)−dR(x+dL,y)∣>1⇒标记遮挡 |d_L(x,y)-d_R(x+d_L,y)|>1 \Rightarrow \text{标记遮挡} ∣dL(x,y)−dR(x+dL,y)∣>1⇒标记遮挡
4. 实现细节(Implementation)
表 2 给出主要可调参数(节选):
| 参数名 | 典型值 | 含义 |
|---|---|---|
| disp_min / max | 0 / 15 | 视差搜索范围 |
| match_fn | AD / SD | 代价函数 |
| match_max | 20 | 截断阈值 |
| aggr_window_size | 9 | 聚合窗口 |
| aggr_minfilter | 9 | Shiftable min-filter 宽度 |
| opt_fn | WTA / DP / SA / GC | 优化器 |
| opt_smoothness | 20 | λ |
| opt_occlusion_cost | 20 | DP 遮挡代价 |
| refine_subpix | true/false | 是否亚像素 |
5. 评测方法(Evaluation)
5.1 误差指标
-
RMS 误差
R=1N∑(x,y)(dC−dT)2 R=\sqrt{\frac1N\sum_{(x,y)}\bigl(d_C-d_T\bigr)^2} R=N1(x,y)∑(dC−dT)2 -
Bad Pixel Ratio
B=1N∑(x,y)I(∣dC−dT∣>δd),δd=1.0 B=\frac1N \sum_{(x,y)}\mathbb I\bigl(|d_C-d_T|>\delta_d\bigr),\quad \delta_d=1.0 B=N1(x,y)∑I(∣dC−dT∣>δd),δd=1.0 -
分区掩码生成
- Textureless:窗口内平均梯度 < 4
- Occluded:正向映射后落在更近像素
- Discontinuity:邻域视差跳变>2 像素,膨胀 9 像素
5.2 数据集
-
采集流程
- Canon G1 固定曝光对焦,水平滑轨拍 9 张。
- 2048×1536 → 512×384 8-tap 下采样 → 裁剪边界。
- 手工分平面 → 直接法求仿射 → 水平位移转视差(亚像素)。
-
公开序列
- Sawtooth:14–20 像素视差,海报+锯齿纸板。
- Venus:斜坡背景+桌面物体。
- Tsukuba:标准头灯序列,5–14 像素视差整数真值。
- Map:灰度地图,30 级视差。
6. 实验结果(逐实验展开)
6.1 Matching Cost(实验 1–3)
-
实验 1:
固定 9×9 box + WTA,改变截断值 τ∈{1,2,5,10,20,50,∞}。
结果:τ=20 左右最好;BT 在低 τ 有帮助。 -
实验 2:
同上但加 min-filter(shiftable)。
结果:无需截断,不截断反而最好。 -
实验 3:
全局算法(DP/SO/GC)+ 不同 τ。
结果:τ=20 略好,BT 轻微提升;λ 需随算法重新调。
6.2 Aggregation(实验 4)
- 对比 5 种聚合:
Box、Box+min、Binomial、Regular Diffusion、Membrane。
结果:- 大窗口 → 无纹理区好,边界差;
- Shiftable 窗口在边界区最佳。
6.3 Optimization(实验 5–6)
-
实验 5:
固定 AD 代价,调 λ∈{5,10,20,50,100,200,500,1000}。
结果:- GC 始终最优;
- λ 需按图调:Map 需 500,Tsukuba 需 20–200。
-
实验 6:
GC + 梯度加权平滑 + BT。
结果:- 梯度惩罚 p=2–4 提升边界;
- BT 再提 0.1–0.3 % bad pixel。
6.4 Sub-pixel(实验 7)
- 平面裁剪测试
- 只用 SSD 9×9:RMS=0.296
- +sub-pixel:0.088
- +BT:0.082
- 1/2 像素步长初始采样:0.051(最佳)
结论:
- 先 ½ 像素步长;2. 再二次曲线 refine;3. BT 可再微提。
7. 20 算法大对比(Overall Comparison)
表 5 给出 4 张图、3 指标(B̄O, B̄T, BD)的完整数字。
仅列前几名(B̄O 数值越小越好):
| Rank | Algorithm | Tsukuba B̄O | Venus B̄O | 关键技术 |
|---|---|---|---|---|
| 1 | Layered stereo | 1.58 | 0.34 | 分段平面+GC |
| 2 | GC+occlusions | 1.27 | 0.36 | 显式遮挡项 |
| 3 | Belief Prop. | 1.15 | 1.00 | BP 优化 |
| 4 | Graph Cuts | 1.86 | 0.42 | 标准 GC |
| 5 | Compact window | 3.36 | 1.67 | 自适应窗口 |
| … | … | … | … | … |
- 观察
- 全局 MRF(GC/BP)> 局部聚合 > 纯扫描线。
- 平面先验在 Sawtooth/Venus 优势巨大。
- 参数敏感:表 6 显示若允许逐图调参,GC 可把 Map 的 B̄O 压到 0.09。
8. 结论与未来工作
- 分类法价值:让研究者一眼看出算法缺哪块积木。
- 数据集价值:发现简单平面场景已难不住顶级算法,需更复杂真值。
- 未来方向
- 自动 λ / τ / 窗口大小估计;
- 更真实纹理、复杂几何、遮挡;
- 多帧、任意相机、非朗伯表面;
- 把 prediction error(重投影误差)作为补充指标。

被折叠的 条评论
为什么被折叠?



