《A taxonomy and evaluation of dense two-frame stereo correspondence algorithms》是 Scharstein、Szeliski 和 Zabih 三位作者合著的一篇关于立体匹配的综述文章,这篇文章在立体匹配领域具有重要地位,它对此前二十多年的研究进行了总结,并提出许多重要的观点和洞见。Daniel Scharstein 是 Middlebury College 教授。Richard Szeliski 是立体视觉领域重要学者,其专著《Computer Vision: Algorithms and Applications》 在计算机视觉领域具有非常高的价值。
文章目录
1. 文章结构与概述
《A taxonomy and evaluation of dense two-frame stereo correspondence algorithms》的结构如下:
- Abstract.
- 1 Introduction
- 2 Motivation and Scope
- 2.1 Computational Theory
- 2.2 Representation
- 3 A Taxonomy of Stereo Algorithms
- 3.1. Matching Cost Computation
- 3.2. Aggregation of Cost
- 3.3. Disparity Computation and Optimization
- 3.4. Refinement of Disparities
- 3.5. Other Methods
- 3.6. Summary of Methods
- 4 Implementation
- 4.1. Matching Cost Computation
- 4.2. Aggregation
- 4.3. Optimization
- 4.4. Refinement
- 5 Evaluation Methodology
- 5.1. Quality Metrics
- 5.2. Test Data
- 6 Experiments and Results
- 6.1. Matching Cost
- 6.2. Aggregation
- 6.3. Optimization
- 6.4. Sub-Pixel Estimation
- 7 Overall Comparison
- 8 Conclusion
- References
在 1. Introduction 部分,文章首先对研究范围进行界定,研究对象为(1)由确定摄影几何关系的两视图产生(2)密集视差图(即每个像素都估计视差值)的立体匹配算法。然后,文章提出两个研究目标:(1)对既有立体匹配算法进行分类,将各算法分解为独立组件进行比较。(2)提供量化评价平台,可见 http://vision.middlebury.edu/stereo/ (在线评价和数据集。)。
在 2. Motivation and Scope 部分,文章对立体匹配的计算理论进行综述,并对“视差空间(disparity space)”这一关键概念进行回顾。
在 3. A Taxonomy of Stereo Algorithms 部分,文章提出对两视图密集立体匹配算法的分类方法。
在 4. Implementation 部分, 文章依据所提出测试方法,研究了主要算法组件及其交互,以及控制算法行为的变量。
在 5. Evaluation Methodology 部分, 文章讨论了对立体匹配算法的评价指标,和获取带有标准真值的标定数据集的方法。
在 6. Experiments and Results 部分, 作者比较了各算法组件的实验结果。
在 7. Overall Comparison 部分, 作者综合比较了现存20种立体匹配算法。
在 8. Conclusion 部分, 作者得出结论并对未来工作作出展望。
本文下面的部分我将根据论文的主要结构,介绍论文与立体匹配领域的关键内容。
2. 基本理论与研究范畴
立体匹配使用双目相机获得场景的深度信息。首先回顾理想小孔成像模型(图 1.)和理想薄透镜成像模型(图 2.)。
实际上,相机具有十分复杂的光学结构,它有多种成像方式。一般地,相机的镜头是一组透镜,当平行于主光轴的光线穿过透镜时,会聚到焦点上,焦点到透镜中心的距离叫做焦距
f
{f}
f。为简化分析,我们将相机的镜头看作一个凸透镜,感光元件就处在这个凸透镜的焦点处。此时,相机成像模型相当于凸透镜中心到感光元件的距离为焦距
f
{f}
f 的小孔成像模型,如图 3.所示。
立体匹配使用如图 4.所示的双目相机模型,其中每一个相机模型采用图 3. 所示的简化小孔模型。双目相机的两个相机是水平对齐的,两个相机坐标系的
x
{x}
x 轴共线,
y
{y}
y 轴和
z
{z}
z 轴平行,且两个相机的成像平面距离相机中心距离均为焦距
f
{f}
f 。
由于双目相机是水平对齐的,所以三维世界的某一点在它们的成像平面上的投影的垂直方向坐标是相同的,水平方向坐标不同,即点
P
{P}
P 投影得到
p
L
(
x
L
,
y
L
)
{p_L(x_L,y_L)}
pL(xL,yL) 和
p
R
(
x
R
,
y
R
)
{p_R(x_R,y_R)}
pR(xR,yR),且
x
L
≠
x
R
{x_L\not =x_R}
xL=xR,
y
L
=
y
R
{y_L=y_R}
yL=yR。双目相机模型可简化为如图 5.所示。其中,点
P
{P}
P 到双目相机的深度为绿色虚线段的长度
Z
{Z}
Z,基线距离为相机
C
L
{C_L}
CL 到
C
R
{C_R}
CR 的紫色虚线段长度
b
{b}
b, 相机焦距为
f
{f}
f。图 6. 推导了三维世界中点
P
{P}
P 的深度
Z
{Z}
Z 与 视差
d
{d}
d 的关系,
Z
=
b
f
d
{Z=\frac{bf}{d}}
Z=dbf,其中
d
=
x
L
−
x
R
{d=x_L-x_R}
d=xL−xR。可以看出,视差
d
{d}
d (Okutomi and Kanade 1993)与深度
Z
{Z}
Z 成倒数关系,系数为
b
f
{bf}
bf。在很多情况下,视差
d
{d}
d 的参数化表示比实际三维深度
Z
{Z}
Z 更为方便。
将目标视图中每个点相对参视图中对应点的视差值,放在与目标视图相同的像素坐标位置,得到视差图
d
(
x
,
y
)
{d(x,y)}
d(x,y)(二维表示)或者视差空间
D
(
x
,
y
,
d
)
{D(x,y,d)}
D(x,y,d)(三维表示)。论文所研究范围即是对齐的两视图密集立体匹配算法,最终结果为视差图
d
(
x
,
y
)
{d(x,y)}
d(x,y) 或 视差空间
D
(
x
,
y
,
d
)
{D(x,y,d)}
D(x,y,d),如图 7.所示。
将左(右)视图作为目标视图,则右(左)视图为参考视图。设目标视图
I
L
{I_L}
IL 中一点
M
(
x
M
,
y
M
)
{M(x_M, y_M)}
M(xM,yM),对应参考视图
I
R
{I_R}
IR 中一点
N
(
x
N
,
y
M
)
{N(x_N,y_M)}
N(xN,yM),目标视图的视差图为
D
L
{D_L}
DL,参考视图的视差图为
D
R
{D_R}
DR,可得到如下数学关系。
{
x
M
>
x
N
,
y
M
=
y
N
I
L
(
x
M
,
y
M
)
=
I
R
(
x
N
,
y
N
)
D
L
(
x
M
,
y
M
)
=
D
R
(
x
N
,
y
N
)
D
L
(
x
M
,
y
M
)
=
+
(
x
M
−
x
N
)
D
R
(
x
N
,
y
N
)
=
−
(
x
N
−
x
M
)
\begin{cases} x_M>x_N,y_M=y_N\\ I_L(x_M,y_M)=I_R(x_N,y_N)\\ D_L(x_M,y_M)=D_R(x_N,y_N)\\ D_L(x_M, y_M)=+(x_M-x_N)\\ D_R(x_N,y_N)=-(x_N-x_M)\\ \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧xM>xN,yM=yNIL(xM,yM)=IR(xN,yN)DL(xM,yM)=DR(xN,yN)DL(xM,yM)=+(xM−xN)DR(xN,yN)=−(xN−xM)
绝大多数立体匹配算法基于极线约束(epipolar constraint),如图 8.所示。在任意两视图情况下,如图 9. 所示,三维世界中一点
P
{P}
P,在成像平面
I
1
{I_1}
I1 上投影得到
p
1
{p_1}
p1,在成像平面
I
2
{I_2}
I2 上投影得到
p
2
{p_2}
p2,
P
C
1
C
2
{PC_1C_2}
PC1C2 构成平面
S
{S}
S,
S
{S}
S 与
I
1
{I_1}
I1 的交线
e
1
{e_1}
e1 是对应
p
2
{p_2}
p2 的极线,
S
{S}
S 与
I
2
{I_2}
I2 的交线
e
2
{e_2}
e2 是对应
p
1
{p_1}
p1 的极线。当
P
{P}
P 在
P
C
2
{PC_2}
PC2 上移动时,它在
I
1
{I_1}
I1 上的投影都落在极线
e
1
{e_1}
e1 上,它在
I
2
{I_2}
I2 上的投影固定为
p
2
{p_2}
p2;当
P
{P}
P 在
P
C
1
{PC_1}
PC1 上移动时,它在
I
2
{I_2}
I2 上的投影都落在极线
e
2
{e_2}
e2 上,它在
I
1
{I_1}
I1 上的投影固定为
p
1
{p_1}
p1。当满足极线约束时,如图 8. 所示,两成像平面的极线共线,且极线与成像平面水平轴平行。
利用极线约束,可以将任意两视图矫正为对齐的立体图像对,如图 10. 所示。
论文所研究算法都是经过相机标定与矫正,满足极线约束(epipolar constraint),输入对齐的立体图像对,输出视差图。同时,论文研究的算法一般基于两个假设:匹配假设(matching assumptions)和光滑假设(smoothness assumptions)。匹配假设指视图中物体表面都是朗博表面(Lambertian surfaces),也就是说,物体的外观不随视点的移动而变化。光滑假设指视图中的物体表面是分段光滑的,换言之,存在深度连续变化的区域。
根据算法的假设性质,论文在第3部分对所研究的算法进行分类。
3. 立体匹配算法的分类方法
论文从两条线索对当时的算法进行分类。
一条线索是作者基于先前的研究(Scharstein and Szeliski,1998; Scharstein, 1999)的分析结论,发现此前算法基本包含下面四个步骤:
1. 匹配计算(matching cost computation)
2. 代价聚合(cost (support) aggregation)
3. 视差计算(disparity computation/optimization)
4. 视差求精(disparity refinement)
作者将绝大多数算法分解成上述4个模块,通过对比实验量化分析各个模块的具体实现。
另一条线索是,执行上面四个模块的顺序与四个模块在具体算法中的重要性依据特定的算法而不同,根据这些不同可以将大多数算法分为两大类:
1. 基于局部的方法(local (window-based) algorithms)
2. 基于全局的方法(global algorithms)
4. 算法实现与比较研究
vision.middlebury.edu/stereo/code/ 已不再提供算法实现代码。
5. 立体匹配算法的评价方法
5.1 评价指标
1、 有实际真值(groundtruth)的评价方法与统计指标
如果获得立体图像对数据集的视差图的实际真值,通常使用下列两种统计指标评价算法性能:
- 均方误差(RMS (root-mean-squared) error)
计算估计结果 d C ( x , y ) {d_C(x,y)} dC(x,y) 与实际真值(groundtruth) d T ( x , y ) {d_T(x,y)} dT(x,y)之间的均方误差:
R = ( 1 N ∑ ( x , y ) ∣ d C ( x , y ) − d T ( x , y ) ∣ 2 ) 1 2 R=({\frac{1}{N}}{\sum_{(x,y)}}|d_C(x,y)-d_T(x,y)|^{2})^{\frac{1}{2}} R=(N1(x,y)∑∣dC(x,y)−dT(x,y)∣2)21
这里, N {N} N 表示像素总数量。 - 误匹配像素百分比(Percentage of bad matching pixels)
估计结果的视差图中错误估计的像素数量占总体数量的比值:
B = 1 N ∑ ( x , y ) ( ∣ d C ( x , y ) − d T ( x , y ) ∣ > δ d ) B={\frac{1}{N}}{\sum_{(x,y)}}(|d_C(x,y)-d_T(x,y)|>\delta_d) B=N1(x,y)∑(∣dC(x,y)−dT(x,y)∣>δd)
这里, δ d {\delta_d} δd 是视差容错度,表示如果 ∣ d C ( x , y ) − d T ( x , y ) ∣ > δ d {|d_C(x,y)-d_T(x,y)|>\delta_d} ∣dC(x,y)−dT(x,y)∣>δd,则 ( x , y ) (x,y) (x,y) 处视差值正确, ( ∣ d C ( x , y ) − d T ( x , y ) ∣ > δ d ) = 1 {(|d_C(x,y)-d_T(x,y)|>\delta_d)=1} (∣dC(x,y)−dT(x,y)∣>δd)=1; N {N} N 表示像素总数量。论文中,设置 δ d {\delta_d} δd 为 1,这是为了与先前发表的文献(Szeliski and Zabih, 1999; Zitnick and Kanade, 2000; Kolmogorov and Zabih, 2001)保持一致。
除了在视差图全部像素上计算上述两项统计指标外,论文还要额外评估下列三种区域上的结果。
- 无纹理区域 T {\mathcal{T}} T:该区域内的方形窗口平行滑动时,在窗口尺寸( e v a l _ t e x t u r e l e s s _ w i d t h eval\_textureless\_width eval_textureless_width)给定时窗口内像素的平均梯度值要小于给定的阈值( e v a l _ t e x t u r e l e s s _ t h r e s h eval\_textureless\_thresh eval_textureless_thresh)。换言之,无纹理区域内的像素梯度值非常小,像素值变化非常慢。
- 被遮挡区域 O {\mathcal{O}} O:该区域在参考图像的对应区域被遮挡了,也就是说,该区域对应通过前向计算得到的视差图的对应区域周围具有较大(或较近)的视差值。换言之,该区域在目标视图中可见,在参考试图中不可见,该区域在参考视图对应的视差图中具有较大视差值,距离视点较近。
- 深度不连续区域 D {\mathcal{D}} D:该区域在视差图中的像素点与其邻域的视差值相差大于 e v a l _ d i s p _ g a p eval\_disp\_gap eval_disp_gap,邻域范围是宽度为 e v a l _ d i s c o n t _ w i d t h eval\_discont\_width eval_discont_width的窗口。换言之,该区域内的物体忽远忽近。
统计指标包括以上三种区域或其补集的评价结果。
2、 无实际真值(groundtruth)的评价方法与统计指标
使用一个视图和视差图重建另一个视图,比较重建视图和真实视图的误差。
- forward warp:使用目标视差图将参考视图warp得到重建目标视图,比较重建目标视图和真实目标视图间的差异( f o r w a r d p r e d i c t i o n e r r o r forward\ prediction\ error forward prediction error)。
- inverse warp:使用目标视差图将目标视图warp得到重建参考视图,比较重建参考视图和真实参考视图间测差异( i n v e r s e p r e d i c t i o n e r r o r inverse\ prediction\ error inverse prediction error)。
3、 全部统计指标见下表。
名称 | 符号 | 描述 |
---|---|---|
r m s _ e r r o r _ a l l rms\_error\_all rms_error_all | R R R | 视差值的均方误差 |
r m s _ e r r o r _ n o n o c c rms\_error\_nonocc rms_error_nonocc | R O ˉ R_{\mathcal{\bar{O}}} ROˉ | ’’(非遮挡区域) |
r m s _ e r r o r _ o c c rms\_error\_occ rms_error_occ | R O R_{\mathcal{O}} RO | ’’(遮挡区域) |
r m s _ e r r o r _ t e x t u r e d rms\_error\_textured rms_error_textured | R T R_{\mathcal{T}} RT | ’’(纹理区域) |
r m s _ e r r o r _ t e x t u r e l e s s rms\_error\_textureless rms_error_textureless | R T ˉ R_{\mathcal{\bar{T}}} RTˉ | ’’(无纹理区域) |
r m s _ e r r o r _ d i s c o n t rms\_error\_discont rms_error_discont | R D R_{\mathcal{D}} RD | ’’(深度不连续及附近区域) |
b a d _ p i x e l s _ a l l bad\_pixels\_all bad_pixels_all | B B B | 误匹配率 |
b a d _ p i x e l s _ n o n o c c bad\_pixels\_nonocc bad_pixels_nonocc | B O ˉ B_{\mathcal{\bar{O}}} BOˉ | ’’(非遮挡区域) |
b a d _ p i x e l s _ o c c bad\_pixels\_occ bad_pixels_occ | R O R_{\mathcal{O}} RO | ’’(遮挡区域) |
b a d _ p i x e l s _ t e x t u r e d bad\_pixels\_textured bad_pixels_textured | B T B_{\mathcal{T}} BT | ’’(纹理区域) |
b a d _ p i x e l s _ t e x t u r e l e s s bad\_pixels\_textureless bad_pixels_textureless | B T ˉ B_{\mathcal{\bar{T}}} BTˉ | ’’(无纹理区域) |
b a d _ p i x e l s _ d i s c o n t bad\_pixels\_discont bad_pixels_discont | R T R_{\mathcal{T}} RT | ’’(深度不连续及附近区域) |
p r e d i c t _ e r r _ n e a r predict\_err\_near predict_err_near | P − P_{\mathcal{-}} P− | 视图抽取误差(近距离) |
p r e d i c t _ e r r _ m i d d l e predict\_err\_middle predict_err_middle | P 1 / 2 P_{\mathcal{1/2}} P1/2 | 视图抽取误差(中距离) |
p r e d i c t _ e r r _ m a t c h predict\_err\_match predict_err_match | P 1 P_{\mathcal{1}} P1 | 视图抽取误差(匹配) |
p r e d i c t _ e r r _ f a r predict\_err\_far predict_err_far | P + P_{\mathcal{+}} P+ | 视图抽取误差(远距离) |
5.2 测试数据
Middlebury Stereo Datasets Introduction