PatchMatch立体匹配(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录

  • 摘要
  • 一 算法思想
  • 二 算法模型
  • 三 算法框架
    • 3.1 Random Initialization
    • 3.2 Iteration
      • Spatial Propagation
      • View Propagation
      • Temporal Propagation
      • Plane Refinement
    • 3.3 后期处理

摘要

本博文来自对《PatchMatch Stereo_stereo matching with slanted support windows》文章的翻译,辅之个人的理解。
算法解决的主要问题是:1、恒定视差的隐含假设不适用于倾斜表面并且该假设导致倾向于重建前平行表面;2、这种方法的主要困难是在无限数量的所有可能平面中找到像素的最佳3D平面。
算法的思想是:将PatchMatch 扩展到根据一个平面找到近似最近邻居。除了PatchMatch的空间传播方案,提出(1)视图传播,其中平面在立体图像对的左视图和右视图之间传播;(2)视频帧的时间传播,当进行跨帧的立体匹配时,平面在视频的前一帧和连续帧传播之间。自适应支持权重用于匹配代价聚合以改善视差不连续边界处的结果。并且倾斜支撑窗口可用于计算全局立体方法的匹配代价量,这允许显式处理遮区域并且可以处理大的弱纹理区域。

一 算法思想

在局部立体匹配中,支撑窗口以参考图像的像素为中心。然后在第二图像中移位该支撑窗口以找到最低颜色差异像素点,其表示匹配点。在该过程中存在隐含的假设,即支撑窗口内的所有像素具有恒定的视差。实际上,这种假设不太可能的原因有两个。
(1)支撑窗口包含位于与中心像素不同的表面上的像素。
(2)窗口捕获倾斜的表面,即不是平行的。
本算法对问题(2)进行研究。
图1a说明了这个问题。标准局部算法在离散的视差下应用前平行窗口来重建图1a的四个点。在例子中,只能找到点P的一个最佳支撑,其中表面段与全值视差 d = 1 d=1 d=1处的前平行平面重合。注意,这种情况在实践中是不太可能的。对于所有其他情况,该方法未能找到最佳支撑,因为表面切割位于亚像素差异(Q),该点位于倾斜平面(R)或圆形(S)上。算法的补救措施是在投影支撑区域上的每个像素上计算单个3D平面。图1b显示出该方法能显着改善支撑区域。例如,可以对P,Q和R的最佳支持建模。在S点,平面模型表示真实圆形表面形状的过度简化。然而,即使在这种情况下,平面近似也能很好地工作(例如,参见图2c中的球)。图2说明了算法对于由几个高度倾斜的表面组成的走廊区域图像对的优势。在图2b中,产生的三维重建相对较差,因为单个倾斜表面由几个前平行表面近似(地板,天花板和墙壁)。相比之下,倾斜支撑窗口以亚像素精度正确地重建了这些倾斜表面(图2c)。
在这里插入图片描述
图1 支撑区域(1D)。绿色表面的点应该被重建。支撑区域用红色条表示。(a)标准方法中使用的整数级视差的前平行窗口。(b)我们提出的支撑区域。我们估计每个点的3D平面。
PatchMatch立体匹配(二)_第1张图片
图2 我们的方法的优势。(a)走廊图像对的左图和地面真值差异。(b)用前平行窗口计算的视差图通过许多前平行窗口近似倾斜表面。(c)我们的倾斜支撑窗正确地将场景重建为倾斜平面的集合。

二 算法模型

对于两个帧的每个像素p,我们搜索平面 f p f_p fp。我们计算左右视差图,因为与大多数其他局部方法一样,我们通过左/右一致性检查执行遮挡处理。一旦找到 f p f_p fp ,我们就可以将p的视差计算为

在这里插入图片描述)
其中 , a f p a_{f_p} afp b f p b_{f_p} bfp c f p c_{f_p} cfp是平面 f p f_p fp 的三个参数, p x p_x px p y p_y py表示p的x和y坐标。我们希望找到的平面 f p f_p fp是所有可能平面中最小的聚合匹配代价之一:
在这里插入图片描述
其中 F F F表示无限大的所有平面的集合。请注意,这个无限标签空间阻止简单地检查所有可能的标签,就像在标准局部立体匹配中那样标签对应于离散的视差值。根据平面f用于匹配像素p的代价聚合计算为
在这里插入图片描述
这里,Wp表示以像素p为中心的方形窗口。对于视频帧立体匹配的情况下,Wp不再是2D,而是3D窗口,其中第三维由视频序列的前帧和连续帧的像素形成。权重函数w(p,q)被用于克服边缘不连续问题并实现自适应支持权重思想。它通过查看像素的颜色来计算p和q位于同一平面上的可能性,即如果颜色相似则返回高值:
在这里插入图片描述
这里,γ是用户定义的参数,|| Ip – Iq || 计算RGB空间中p和q颜色的L1距离。函数可以看作是中提出的加权函数的简化形式。等式(3)的第二部分。这里,根据平面f计算q的视差,并通过从q的x坐标减去该视差来导出另一视图中的q匹配点q’。函数 ρ ( q , q ′ ) \rho(q,q') ρ(q,q)现在计算q和q’之间的像素差异:
在这里插入图片描述
其中 ∥ ∇ I q − ∇ I q ′ ∥ \left\| {\nabla {I_q} - \nabla {I_{q'}}} \right\| IqIq 表示在q和q’处的灰度值梯度的绝对差值。由于q’的x坐标位于连续域中,因此通过线性插值得出其颜色和梯度值。用户定义的参数α平衡颜色和梯度项的影响。参数 τ c o l {\tau _{col}} τcol τ g r a d {\tau _{grad}} τgrad截断了遮挡区域中鲁棒性的代价。由于使用了梯度该方法具有处理输入图像中的辐射度差异的优点

三 算法框架

3.1 Random Initialization

给两个视图中的每个像素分配一个随机平面。原则上,通过将随机值直接分配给平面f的三个参数 a f a_f af b f b_f bf c f c_f cf 就可以获得随机平面。但是,此策略不会均匀地对所有允许的平面进行采样。在计算像素 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) 处的随机平面的方法中,首先选择位于允许的连续视差值范围内的随机视差 。这在随机平面上给出了一个点P =(x0,y0,z0)。现在计算平面的法线向量作为随机单位向量 n ⃗ = ( n x , n y , n z ) \vec n = ({n_x},{n_y},{n_z}) n =(nx,ny,nz)。然后通过 在这里插入图片描述
转换为等式(1)的平面表示。请注意,可以通过设置 n ⃗ = ( 0 , 0 , 1 ) \vec n = (0,0,1) n =(0,0,1)来强制执行前向并行窗口。此外,可以通过强制 z 0 z_0 z0的整数级视差数值来关闭子亚像素精度。我们将在我们的实验中执行此操作。
PatchMatch立体匹配(二)_第2张图片
图3 算法的不同步骤。(a)在第一次迭代的步骤中的左和右视差图。已经处理了标记为红色的所有像素。其他的仍然分配给随机初始化中的平面。我们使用箭头所示的三种传播方式。(b)3次迭代后的结果。(c)后处理后的结果。我们执行左/右一致性检查和遮挡填充。

3.2 Iteration

在迭代中,每个像素经历四个阶段,即(1)空间传播,(2)视图传播,(3)视频帧传播和(4)平面细化。首先处理左图像的所有像素,然后处理右图像的所有像素。在偶数迭代中,从左上角像素开始,以主行顺序遍历像素,直到到达右下角像素。
在奇数迭代中,颠倒顺序,即从右下角像素开始,然后在左上角停止。运行三次迭代。

Spatial Propagation

这种传播形式背后的想法是空间相邻像素可能具有相似的平面。设p表示当前像素, f p {f_p} fp表示其平面。我们评估是否将p分配给空间上相邻点q的平面 f p {f_p} fp改善了等式(3)的代价,即检查是否满足条件 m ( p , f q ) < m ( p , f p ) m(p,{f_q}) < m(p,{f_p}) m(p,fq)<m(p,fp) 。如果是这种情况,接受 f p {f_p} fp作为p的新平面,即 f p : = f q {f_p}: = {f_q} fp:=fq。在偶数迭代中,考虑左相邻点和上相邻点,而在奇数迭代中,检查右相邻点和下相邻点。

View Propagation

利用存在于左右视差图之间的强相干性,即像素和其在另外视图中的匹配点可能具有相似的平面。根据当前点的平面检查第二个视图中所有像素是否作为当前像素p的匹配点。设 p ′ p' p为这样的像素, f p ′ f_{p'} fp表示其平面转换为第一个视图。如果 m ( p , f p ′ ) < m ( p , f p ) m(p,{f_{p'}}) < m(p,{f_p}) m(p,fp)<m(p,fp),那么 f p : = f p ′ {f_p}: = {f_{p'}} fp:=fp

Temporal Propagation

这种传播形式只能在处理视频序列立体匹配时使用。假设当前视频帧的像素p和前一或连续图像中相同坐标处的像素 p ′ p' p可能具有相似的平面。显然,如果序列中的运动很少,则这种假设更可能成立,这种情况经常发生。检查条件 。 m ( p , f p ′ ) < m ( p , f p ) m(p,{f_{p'}}) < m(p,{f_p}) m(p,fp)<m(p,fp),那么 f p : = f p ′ {f_p}: = {f_{p'}} fp:=fp

Plane Refinement

该步骤的目标是在像素 p = ( x 0 , y 0 ) p=(x_0,y_0) p=(x0,y0)处细化平面 f p f_p fp的参数,以便进一步降低等式(3)的代价。我们将 f p f_p fp转换为点加上法线向量的表示。我们有两个参数,即 Δ z 0 max ⁡ \Delta _{{{\rm{z}}_0}}^{\max } Δz0max其定义了3D点的z坐标z0的最大允许变化和 Δ n max ⁡ \Delta _{\rm{n}}^{\max } Δnmax设定了对法线向量 n ⃗ \vec n n 的分量的允许变化的限制。我们现在将 Δ z 0 \Delta _{z_0} Δz0估计为位于区间 [ − Δ z 0 max ⁡ , Δ z 0 max ⁡ ] \left[ {{\rm{ - }}\Delta _{{z_0}}^{\max },\Delta _{{z_0}}^{\max }} \right] [Δz0max,Δz0max]中的随机值并计算 z o ′ : = z 0 + Δ z 0 {z_o}^\prime : = {z_0} + {\Delta _{{z_0}}} zo:=z0+Δz0,这给出了一个新的3D点 P ′ = ( x 0 , y 0 , z 0 ′ ) P' = ({x_0},{y_0},{z_0}^\prime ) P=(x0,y0,z0) 。类似地,我们估计区间 [ − Δ n max ⁡ , Δ n max ⁡ ] \left[ {{\rm{ - }}\Delta _{\rm{n}}^{\max },\Delta _n^{\max }} \right] [Δnmax,Δnmax]的三个随机值,其形成向量 Δ ⃗ n {\vec \Delta _n} Δ n的组成成分。现在估计改进的法向量为 [\vec n’: = u(\vec n + {\vec \Delta _n})]其中u()计算单位向量。最后,将由 P ′ P' P n ⃗ ′ \vec n' n 定义的平面转换为等式(1)的表示,其给出作为改进的平面 f p ′ {f'_p} fp。如果 m ( p , f p ′ ) < m ( p , f p ) m(p,{f_{p'}}) < m(p,{f_p}) m(p,fp)<m(p,fp),接受平面,即 f p : = f p ′ {f_p}: = {f_{p'}} fp:=fp
该细化过程是迭代的。首先设置 Δ z 0 max ⁡ : = m a x d i s p / 2 \Delta _{{{\rm{z}}_0}}^{\max }:{\rm{ = }}maxdisp/2 Δz0max:=maxdisp/2,其中maxdisp是允许的最大视差, Δ n max ⁡ : = 1 \Delta _n^{\max }: = 1 Δnmax:=1。在每次细化之后,我们设置 Δ z 0 max ⁡ : = Δ z 0 max ⁡ / 2 \Delta _{{z_0}}^{\max }: = \Delta _{{z_0}}^{\max }/2 Δz0max:=Δz0max/2 Δ n max ⁡ : = Δ n max ⁡ / 2 \Delta _n^{\max }: = \Delta _n^{\max }/2 Δnmax:=Δnmax/2 ,其指数地减小搜索范围。如果 Δ z 0 max ⁡ < 0.1 \Delta _{{z_0}}^{\max } < 0.1 Δz0max<0.1,停止迭代。这个方案在第一次迭代中允许进行大的改变,这在当前平面是完全错误的情况下很有意义。在以后的迭代中,对非常接近当前平面的平面进行采样,这允许捕获视差细节,例如,在圆形表面处.

3.3 后期处理

通过左/右一致性检查进行咬合处理。对于每个像素p,我们计算其在另一个视图中的匹配点p’。现在检查条件 ∣ d p − d p ′ ∣ ≤ 1 \left| {{d_p} - {d_{p'}}} \right| \le 1 dpdp1 。如果此条件为假,则像素p无效。对于被遮挡的像素,此一致性检查通常会失败,但对于误匹配的像素也是如此。
补充无效像素的视差。对于一个无效的像素p,向左侧和右侧搜索其最近的有效像素。记录两个点的平面 f l f^l fl f r f^r fr 。现在计算将p分配给 f l f^l fl f r f^r fr (等式(1))时的视差,并选择两者中的较低者作为p的填充视差。选择较低视差的原因在于遮挡发生在背景处。注意,该填充方案外推了平面,而不是像通常那样复制恒定的视差。因此,也可以在这个阶段正确地处理倾斜的表面。然而,显而易见的问题是该策略在视差图中生成水平条纹。为了减弱这个问题,我们对填充的差异应用加权中值滤波器。中值滤波器的权重掩模由等式(4)计算。对γ和在匹配过程中使用的窗口大小使用相同的设置。(这也意味着我们在进行时间立体匹配时应用3D中值滤波器。)请注意,所有在左/右一致性检查中幸存的像素不受此操作的影响。后处理之前和之后的视差图如图3b和3c所示。

你可能感兴趣的:(PatchMatch立体匹配(二))