论文阅读笔记《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》
-
摘要
-
介绍
-
算法
- 1 模型
- 2 通过PatchMatch方法来计算视差
- 3 后处理
- 4 为全局方法建立一个数据项
-
实验结果
摘要
一般的局部立体方法是在一个具有整型数值视差的支持窗口中进行匹配。其中隐含的一个假设:在支持区域中的像素具有恒定的视差,这个假设在倾斜表面是不成立的,因而倾向于重建前端平行的表面。本论文通过估计每个像素上的一个单独的3D平面,并在此基础上投射出支持区域解决了这种偏差。这种方法的主要挑战是在所有可能无限数量的平面中找到一个像素的最优3D平面。我们证明了PatchMatch算法可以用来解决这个问题,我们把PatchMatch拓展成可以根据一个平面来找到一个近似的最近邻。除了PatchMatch的空间传播方法之外,我们还提出了(1)在立体对的左右视图中传播的图传播,(2)时间传播,在做时间立体时,从视频的前和连续帧中传播平面。自适应支持权值用于聚合匹配代价,以改善视差边界的结果。我们还表明,我们的倾斜支持窗口可以用来计算全球立体方法的代价,它允许明确的遮挡处理,并且可以处理大的非纹理区域。结果表明,我们的方法重构了高度倾斜的表面,并以亚像素精度实现了视差细节。
1 介绍
在局部立体匹配中,支持窗口以参考图像的像素为中心。在第二个图像中,这个支持窗口会被替换,以找到最小颜色不相似性的点,即匹配点。在这个过程中有一个隐含的假设,即在支持窗口内的所有像素都有恒定的视差。实际上,这种假设不太可能成立,原因有两个:(1)支持窗口包含与中心像素位于不同表面的像素。(2)窗口捕捉到倾斜的表面,即,而不是fronto-parallel的。最近有大量的论文解决了问题(1),而自适应支持权重策略似乎是解决这个问题的最好方法。与此相反,我们处理的问题(2)较少受到关注。

图1a说明了这个问题。标准的局部算法将fronto-parallel窗口应用于离散的视差,以重构图1a的四个点。在我们的例子中,一个最优的支持只能在点P处找到,它的表面部分与在全值视差中的 fronto-parallel平面重合。请注意,这种情况在实际中是非常不可能的。对于所有其他情况下,这种方法不能找到一个最优的支持,因为表面部分位于一个亚像素视差(Q),或者点位于一个倾斜的(R)或者圆形的(S)平面表面。我们的补救措施是在每个像素计算个体的3D平面,然后通过投影得到支持区域。图1b显示了通过这种方法,得到了非常大改进的支持区域。例如,我们可以对P、Q和R的最优支持建模。我们的平面模型对在S处真实圆形表面形状进行了过度简化。然而,我们将在实验中显示,即使在这种情况下,平面近似也很有效。
目前有几种算法是计算视差图的亚像素精度。通常,亚像素信息是通过在后处理中将cost volumn拟合成一条抛物线而得到的。更复杂的方法(本论文遵循的)是在匹配中直接考虑亚像素精度。在最简单的形式中,这是通过扩展标签空间来完成的,即,除了全值的视差之外,还考虑了一些分数视差值(一半或四分之一像素)。与其在标签空间中添加额外的前端平行平面,还可以添加倾斜的平面。然而,这需要首先提取构成场景的那些平面,考虑到候选平面的数量是无限的,这是一个非常重要的任务。例如,非常流行的基于分割的方法在第一步中使用初始视差图提取了几个平面。在匹配步骤中,检测这些平面以找到每个像素/分割的最适合的一个。这种方法的问题是如果在步骤1中错失了正确的平面,那么匹配的步骤就会失败。这也是局部算法的局限性。
这篇论文提出了一种基于PatchMatch的算法,有效地解决了在每个像素点找到一个“好的”倾斜支持平面的问题。与其他局部算法相比,算法没有构建完整的cost-volume,这在本论文算法中是不可能的,因为标签空间包含了无限个3D平面。相反,算法巧妙地遍历了其中的一部分。这使得一次优化成为可能,平面以及分配给平面的像素能够联合估计,这有效地绕过了错失正确平面的问题。PatchMatch本身就是一个近似稠密的最近邻算法。这篇论文利用随机搜索和传播的PatchMatch思想来寻找平面极线上的最近邻。这使得能够处理倾斜的表面和亚像素精度。
2 算法
2.1 模型
对于两张图像中的每个像素p,我们寻找一个平面f_p。 我们计算左图和右图的视差图,以便通过左右一致性校验来处理遮挡。一旦平面被找到,我们就可以计算像素的视差:
其中,a_{f_p},b_{f_p},c_{f_p}是平面的三个参数,p_x和p_y表示像素的x坐标和y坐标。平面是我们期望找到的,使得在所有可能的平面中聚合代价最小的一个平面:
其中, \xi表示所有可能的平面,它的大小是无限的。注意到,这个无限的标签空间使得我们不能想标准的具有离散视差值的局部立体匹配方法那样,只是简单地检查所有可能的标签。与平面 f对应的匹配像素的聚合代价为:
其中, W_p表示一个以像素 为中心的方形窗口。但是与现有方法不同,不再是2D的,而是3D的。权重函数 w(p,q)用来解决边缘育肥问题,并且实施自适应支持权重的思想。它通过像素之间的颜色来计算它们之间的相似性:
其中, \gamma是一个用户定义的参数, ||I_p-I_q||计算像素 p和q在RGB空间中的L1距离。
现在来关注 \rho(q,q')部分,首先根据平面 计算像素q的视差,并且从 的x坐标减去这个视差得到在另一张图上的匹配点q',函数 现在用来计算像素 q和q'之间的不相似性:
其中, ||\nabla I_q-\nabla I_{q'}||表示像素 之间的灰度值梯度之差的绝对值。由于像素 的x坐标在连续区域内,我们通过线性插值来找到它的颜色和梯度值。用户定义的 \alpha参数用来平衡颜色和梯度项的影响,参数 \tau_{col}和\tau_{grad}截断代价,以在遮挡区域获得鲁棒的结果。
2.2 通过PatchMatch方法来计算视差
现在来关注在两张图像中寻找使得方程(3)中的代价最小的3D平面的问题。本论文的方法基于PatchMatch,它的主要思想是:在自然立体对中,相对较大的像素区域可以用近似的平面来模拟。我们通过将每个像素初始化为一个随机的平面来寻找这样一个平面,并且希望通过这样的随机初始化,这个区域中至少有一个像素具有与正确的平面接近的平面。注意,这点很有可能,因为我们有很多猜测,即,这个区域的每个像素代表一个平面。对于算法来说,有一个“好的”猜测已经足够了,因为有一个传播步骤将这个平面传递到该区域的其他像素上。除了对空间相邻像素进行传播外,我们引入了两个新的传播步骤,即:,图传播和时间传播。最后,还有一个平面优化步骤,我们改变平面参数以接近最优平面。
1)随机初始化
给两张图像的每个像素分配一个随机的平面。本论文中,为了给像素(x_0,y_0)计算一个随机的平面,首先选择一个在所允许的连续视差值之间的随机的视差z_0。这样就给出随机平面中的一个点P(x_0,y_0,z_0)。然后计算这个平面的法向量为一个随机的单位向量\vec n=(n_x,n_y,n_z). 把(1)式中的平面表示成a_f:=-\frac{n_x}{n_z}, b_f:=-\frac{n_y}{n_z}, c_f:=\frac{n_xx_0+n_yy_0+n_zz_0}{n_z}
2)迭代
在每一轮迭代中,每个像素都进行以下四个步骤:
(1) spatial propagation空间传播, (2) view propagation图传播,
(3) temporal propagation,(4) plane refinement
我们首先处理左图中的所有像素,然后处理右图中的所有像素。在奇数次迭代中,从左上角的像素开始,逐行遍历像素,直到到达右下角的像素。在偶数次迭代中,我们颠倒顺序,即,从右下角的像素开始,然后在左上方停止。在我们的实验中,我们三个迭代。图3是在不同的迭代中得到的结果。

(1)Spatial Propagation空间传播
隐藏在这种传播方式中的想法是,空间上相邻的像素很有可能具有相似的平面。让表示当前像素,是它的平面,我们评估是否将分配给它的空间邻居的平面f_q,是通过是否可以减小方程(3)的代价为依据,即$m(p,f_q)pp'm(p,f_{p'})<m(p,f_p)f_p:=f_{p'}f_pz_0m(p,f_{p'})<m(p,f_p)f_p:=f_{p'}
fl和fr
