论文地址:PatchMatch Stereo - Stereo Matching with Slanted Support Windows

问题提出

  局部匹配方法在计算匹配代价中是基于Fronto Parallel Windows 进行的,而Fronto Parallel Windows 隐含两个假设:

  1. 窗口内所有点在三维空间的深度相同。
  2. 窗口内任意线段在核线像对(经立体校正后的图像对)的投影长度相等。
    但这样的假设在某些情况下是不合理的,如下图所示

      若窗口内的任意A、B两点在三维空间中处于同一个深度如图右侧所示,则A、B两点在左右视图上的投影点线段a1b1=a2b2a_{1}b_{1}=a_{2}b_{2}a1​b1​=a2​b2​,此时左视图支撑窗口中的所有点在右视图中都有一一对应的匹配点。此时计算出的匹配代价时可以正确反映真实的状况。
      若A、B点的深度不一致,则a1b1≠a2b2a_{1}b_{1}\neq a_{2}b_{2}a1​b1​​=a2​b2​,则该支撑窗口不能很好反应左右视图该点的匹配代价值。

      如原文中Figure 1(a)所示,绿线代表物体表面,红色线段表示窗口。P点的窗口符合Fronto Parallel Windows假设,当物体表面倾斜或者表面为曲面时,R点和S点是不符合该假设。Figure 1(b)为Slanted Support Windows,这样的倾斜窗口能更好贴合物体表面。此外,平行窗口基于整数视差计算匹配代价,然后基于一元二次拟合的方式得到亚像素精度的匹配代价,而倾斜窗口可以直接基于亚像素像素视差计算匹配代价,如Q点所示。


    从Figure2 可知:基于平行窗口计算的深度值会出现明显断层而基于倾斜窗口可以更好计算得到更平滑的深度值。

算法思想

  PatchMatchStereo的核心想法是为所有的像素点分别找到一个属于该像素的视差平面,用这个视差平面来计算该点的视差值,若像素点的坐标为(px,py)(p_{x}, p_{y})(px​,py​),则根据该点的视差平面方程来计算该点的视差值如式(1)所示。
dp=afppx+bfppy+cfp(1)d_{p}=a_{f_{p}} p_{x}+b_{f_{p}} p_{y}+c_{f_{p}}\tag{1}dp​=afp​​px​+bfp​​py​+cfp​​(1)
式中,afp、bfp、cfpa_{f_{p}} 、b_{f_{p}} 、c_{f_{p}}afp​​、bfp​​、cfp​​为视差平面的参数,立体匹配的目标从视差估计问题转换为了平面估计问题,为每个像素点找到最优视差平面,约束条件为聚合代价最小。聚合代价函数如式(2)所示:
fp=arg⁡min⁡f∈F{m(p,f)}(2)f_{p}=\underset{f \in F}{\arg \min } \{m(p, f)\}\tag 2fp​=f∈Fargmin​{m(p,f)}(2)
式中,F为一个无边界的平面集合,m(p,f)m(p, f)m(p,f)表示视差平面为f时像素p的聚合代价。m(p,f)m(p, f)m(p,f)如式(3)所示:
m(p,f)=∑q∈Wpw(p,q)⋅ρ(q,q−(afqx+bfqy+cf))(3)m(p, f)=\sum_{q \in W_{p}} w(p, q) \cdot \rho\left(q, q-\left(a_{f} q_{x}+b_{f} q_{y}+c_{f}\right)\right)\tag 3m(p,f)=q∈Wp​∑​w(p,q)⋅ρ(q,q−(af​qx​+bf​qy​+cf​))(3)
式中,WpW_{p}Wp​为以像素点p为中心的方形窗口,若使用于时序图像中,则WpW_{p}Wp​是一个3D窗口。w(p,q)w(p,q)w(p,q)是自适应权值,为了解决edge-fattening问题(视差非连续区域的边缘位置会出现一圈连续的错误匹配点,这样的点会让边缘扩大一圈)。其中,w(p,q)w(p, q)w(p,q)是用来衡量p点和q点在同一个平面的可能性,如式(4)所示:
w(p,q)=e−∥Ip−Iq∥γ(4)w(p, q)=e^{-\frac{\left\|I_{p}-I_{q}\right\|}{\gamma}}\tag 4w(p,q)=e−γ∥Ip​−Iq​∥​(4)
式中,γ\gammaγ为超参数,∣∣Ip−Iq∣∣||I_{p}-I_{q}||∣∣Ip​−Iq​∣∣是p与q像素在颜色空间的L1距离(|r-r|+|g-g|+|b-b|),若两点的颜色差异越大,则两点处于同一平面的可能性更小。
式3中的ρ\rhoρ函数用于衡量两个像素间的不相似性。若左视图中q的视差平面方程为(af,bf,cf)(a_{f}, b_{f}, c_{f})(af​,bf​,cf​),则其视差值为dq=afpx+bfqy+cfd_{q}=a_{f}p_{x} + b_{f}q_{y}+c_{f}dq​=af​px​+bf​qy​+cf​,右视图对应的同名点q′=q−dqq_{'}=q-d_{q}q′​=q−dq​,则p与q的不相似度计算如式(5)所示:
ρ(q,q′)=(1−α)⋅min⁡(∣∣Iq−Iq′∥,τcol)+α⋅min⁡(∥∇Iq−∇Iq′∥,τgrad )(5)\rho\left(q, q^{\prime}\right)=(1-\alpha) \cdot \min \left(\left||I_{q}-I_{q^{\prime}}\right\|, \tau_{c o l}\right)+\alpha \cdot \min \left(\left\|\nabla I_{q}-\nabla I_{q^{\prime}}\right\|, \tau_{\text {grad }}\right)\tag 5ρ(q,q′)=(1−α)⋅min(∣∣Iq​−Iq′​∥,τcol​)+α⋅min(∥∇Iq​−∇Iq′​∥,τgrad ​)(5)
式(5)中, ∣∣∇Iq−∇Iq′∣∣||\nabla I_{q}-\nabla I_{q^{\prime}}||∣∣∇Iq​−∇Iq′​∣∣为qqq点与q′q^{\prime}q′的梯度差的绝对值,两者的颜色差异越大,则梯度差越大,不相似度越大。α\alphaα为超参数,在颜色空间和梯度之间做一个平衡。
此外,根据式(1)得到的视差dqd_{q}dq​为小数,则通过q′=q−dqq_{'}=q-d_{q}q′​=q−dq​计算得到的q′q^{\prime}q′为小数,颜色值Iq′I_{q^{\prime}}Iq′​和颜色梯度值∇Iq′\nabla I_{q^{\prime}}∇Iq′​需要使用线性插值得到。
式(5)中,τcol和τgrad\tau_{col}和\tau_{grad}τcol​和τgrad​为截断参数,为了使代价值保持在一定范围内。

算法框架

  通过上面的分析,PatchMatchStereo目的是在无边界平面集里找到代价最小的视差平面,PMS借鉴了PatchMatch的思路,在自然图像中,一个有一定大小的像素块内所有的像素可以用一个平面来近似。这也是PMS的基本思想,一个图像可以看做是多个像素块,每个像素块拥有一个近似的视差平面,PMS的目的是招待所有像素块的视差平面。
PMS算法流程:

1、随机初始化

  为每个像素初始化一个视差平面,在视差范围内为每一个像素随机一个视差值z0z_{0}z0​,则对于点P(x0,y0.z0)P(x_{0}, y_{0}. z_{0})P(x0​,y0​.z0​)所在的视差平面选取一个随机的单位法向量n⃗=(nx,ny,nz)\vec{n}=\left(n_{x}, n_{y}, n_{z}\right)n=(nx​,ny​,nz​)作为平面的法线。则有:
af=−nxnz、bf=−nynz、cf=nxx0+nyy0+nzz0nz(6)a_{f} = - \frac{n_{x}}{n_{z}}、b_{f} = -\frac{n_{y}}{n_{z}}、c_{f} = \frac{n_{x}x_{0}+n_{y}y_{0}+n_{z}z_{0}}{n_{z}}\tag 6af​=−nz​nx​​、bf​=−nz​ny​​、cf​=nz​nx​x0​+ny​y0​+nz​z0​​(6)若固定n⃗=(0,0,1)\vec{n}=(0,0,1)n=(0,0,1),则倾斜窗口退化为平行窗口,强制z0z_{0}z0​为整数时,则退化为只能取整数视差值。

2、迭代传播

  迭代传播的目的是将随机的所有视差平面中的少数正确的视差平面传播到同一视差平面内的其他像素。迭代传播包含以下四个步骤:(1)空间传播(Spatial Propagation)(2)视图传播(View Propagation)(3)时序传播(Temporal Propagation)(4)平面优化(Plane Refinement)。在偶数迭代中,从左上角像素开始,以主行顺序遍历像素,直到到达右下角像素。在奇数迭代中,从右下角像素开始,然后在左上角停止。运行三次迭代。运行过程如下图所示:

(1)空间传播(Spatial Propagation)

  空间传播基于空间上相邻的像素可能具有相似的视差平面的假设。假设像素p所在的视差平面为fpf_{p}fp​,检查p邻域内的像素q所在平面是否更适合p,即m(p,fq)<?m(p,fp)m(p,f_{q})\stackrel{?}{<} m(p,f_{p})m(p,fq​)<?​m(p,fp​),若成立,则将fqf_{q}fq​更新为像素p的新平面。在偶数迭代中,考虑左相邻点和上相邻点,而在奇数迭代中,检查右相邻点和下相邻点。

(2)视图传播(View Propagation)

  视图传播基于同名点像素对具有相似的视差平面的假设。假设像素p所在的视差平面为fpf_{p}fp​,p的同名点像素为p′p^{\prime}p′,fp′f_{p^{\prime}}fp′​为p′p^{\prime}p′所在的视差平面转换为左视图坐标系后的平面,检查m(p,fp′)<?m(p,fp)m(p,f_{p^{\prime}})\stackrel{?}{<} m(p,f_{p})m(p,fp′​)<?​m(p,fp​),若成立,则将fp′f_{p^{\prime}}fp′​更新为像素p的新平面,其核心思想为:同名点之间的视差平面应该是一致的,如果不一致,那使用代价聚合最低的视差平面作为视差平面。

(3)时序传播(Temporal Propagation)

  时序传播仅用于视频序列的立体匹配,基于相邻帧的同一位置的像素可能具有相似的视差平面的假设。假设像素p所在的视差平面为fpf_{p}fp​,前后帧相同位置点像素为p′p^{\prime}p′,fp′f_{p^{\prime}}fp′​为p′p^{\prime}p′所在的视差平面,检查m(p,fp′)<?m(p,fp)m(p,f_{p^{\prime}})\stackrel{?}{<} m(p,f_{p})m(p,fp′​)<?​m(p,fp​),若成立,则将fp′f_{p^{\prime}}fp′​更新为像素p的新平面。

(4)随机分配

  平面优化是为了通过优化视差平面fpf_{p}fp​的参数进一步减少像素p的聚合代价m(p,fp)m(p, f_{p})m(p,fp​),其核心思想是在已有的视差平面向量的参数基础上,在设定的搜索空间中使用二分查找,查找更好的法向量来更新当前的视差平面,步骤如下:

  1. 将fpf_{p}fp​平面方程转换为点和法向量的表达形式;
  2. 设置两个参数Δz0max⁡和Δnmax⁡\Delta_{z_{0}}^{\max }和\Delta_{n}^{\max }Δz0​max​和Δnmax​。其中Δz0max⁡\Delta_{z_{0}}^{\max }Δz0​max​表示点P(x0,y0,z0)P(x_{0}, y_{0}, z_{0})P(x0​,y0​,z0​)的z坐标的可变范围,Δnmax⁡\Delta_{n}^{\max }Δnmax​为法向量n⃗\vec{n}n各分量的可变范围;
  3. 初始值Δz0max⁡=maxdisp /2\Delta_{z 0}^{\max }=\text { maxdisp } / 2Δz0max​= maxdisp /2,(maxdisp为设置的最大视差值)、Δnmax⁡=1\Delta_{n}^{\max }=1Δnmax​=1。
  4. 当Δz0max⁡>0.1\Delta_{z 0}^{\max }> 0.1Δz0max​>0.1执行循环。
  5. 在[−Δz0max⁡,Δz0max⁡]\left[-\Delta_{z 0}^{\max }, \Delta_{z 0}^{\max }\right][−Δz0max​,Δz0max​]范围内随机生成1个值Δz0\Delta_{z_{0}}Δz0​​加到z0z_{0}z0​上,有:z0′=z0+Δz0z_{0}^{\prime}=z_{0}+\Delta_{z_{0}}z0′​=z0​+Δz0​​,得到新的点P′(x0,y0,z0′)P^{\prime}\left(x_{0}, y_{0}, z_{0}^{\prime}\right)P′(x0​,y0​,z0′​);
  6. 在[−Δz0max⁡,Δz0max⁡]\left[-\Delta_{z 0}^{\max }, \Delta_{z 0}^{\max }\right][−Δz0max​,Δz0max​]范围内随机生成3个值Δn⃗\vec{\Delta_{n}}Δn​​,计算新的法向量n′→=u(n⃗+Δn⃗)\overrightarrow{n^{\prime}}=u\left(\vec{n}+\vec{\Delta_{n}}\right)n′=u(n+Δn​​),uuu取单位向量。新的点P′P^{\prime}P′和新的法向量n′→\overrightarrow{n^{\prime}}n′组成新的平面fp′f_{p^{\prime}}fp′​,m(p,fp′)<?m(p,fp)m(p,f_{p^{\prime}})\stackrel{?}{<} m(p,f_{p})m(p,fp′​)<?​m(p,fp​),若成立,则将fp′f_{p^{\prime}}fp′​更新为像素p的新平面;
  7. 设置Δz0max⁡=Δz0max⁡/2、Δnmax⁡=Δnmax⁡/2\Delta_{z 0}^{\max }=\Delta_{z 0}^{\max } / 2 、 \Delta_{n}^{\max }=\Delta_{n}^{\max } / 2Δz0max​=Δz0max​/2、Δnmax​=Δnmax​/2,减小搜索空间,跳转到第5步。

3、后处理

  后处理操作包括一致性检查和视差填充

  1. 通过左右一致性检查进行咬合处理。对于每个像素ppp,计算其在另外一个视图的匹配点p′p^{\prime}p′,检查∣dp−dp′∣≤1|d_{p}-d_{p^{\prime}}|\le 1∣dp​−dp′​∣≤1,若不成立,则像素p无效。
  2. 填充无效视差,对于一个无效的视差p,向左和向右侧搜索最近有效像素,记录两个点的平面flf^{l}fl和frf^{r}fr,分别用flf^{l}fl和frf^{r}fr来计算p点的视差值,选择视差值小的平面f作为p点的平面(选择较低视差的原因在于遮挡发生在背景处,选择离镜头比较近的点所在的平面来计算无效点的视差),该填充方案外推了平面,而不是像通常那样复制恒定的视差。因此,也可以在这个阶段正确地处理倾斜的表面。然而,该策略在视差图中生成水平条纹(因为只考虑了水平的方向来填充无效点)。为了减弱这个问题,我们对填充的视差应用加权中值滤波器。中值滤波器的权重掩模由等式(4)所示:
    w(p,q)=e−∥Ip−Iq∥γw(p, q)=e^{-\frac{\left\|I_{p}-I_{q}\right\|}{\gamma}}w(p,q)=e−γ∥Ip​−Iq​∥​
    γ\gammaγ和窗口大小和前面使用相同的设置。(时序信号使用3D加权中值滤波器),所有在左/右一致性检查中幸存的像素不受此操作的影响。后处理之前和之后的视差图如图下图所示:

小结

  1. PatchMatchStereo区别于传统的立体匹配算法,模型不是直接估计视差而是估计该像素点所在的最优视差平面。
  2. PatchMatchStereo具有两个优点:(1)可计算亚像素视差;(2)可以处理倾斜表面和较好地拟合曲面;
  3. 由于需要迭代传播,算法时间复杂度较高,算法运行效率较低。

论文阅读《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》(PMS-双目立体匹配)相关推荐

  1. 论文阅读笔记:《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》

    论文下载: PatchMatch Stereo - Stereo Matching with Slanted Support Windows 摘要 1.1 思路  像素区域可以用近似的平面来模拟. ( ...

  2. 【论文阅读】12-PatchMatch Stereo - Stereo Matching with Slanted Support Windows

    [论文阅读]12-PatchMatch Stereo - Stereo Matching with Slanted Support Windows 0 basic information 1 aims ...

  3. 论文阅读笔记《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》

    摘要 介绍 算法 1 模型 2 通过PatchMatch方法来计算视差 3 后处理 4 为全局方法建立一个数据项 实验结果 摘要 一般的局部立体方法是在一个具有整型数值视差的支持窗口中进行匹配.其中隐 ...

  4. PatchMatch Stereo - Stereo Matching with Slanted Support Windows

    Tips MVS: Multi-View Stereo Abstract 思路:一般的局部立体方法是一个具有整形数值视察(disparity)的支持镜头进行匹配,其中有一个隐藏的假设:再支持区域的像素 ...

  5. 《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》

    1. 研究问题 普通的局部立体匹配方法假设支持窗口内视差一致,存在正面平行的偏向,导致倾斜表面重建出现较大偏差. 2. 研究方法 基于PatchMatch,提出PatchMatch Stereo算法, ...

  6. (PatchMatch )PatchMatch Stereo - Stereo Matching with Slanted Support Windows中关于fronto-parallel的理解

    读这篇文章的时候,没有理解fronto-parallel是什么,无意中发现这篇博客,阐述的很好 后续我会把我整理的比较经典的双目匹配论文及相关代码发布出来

  7. 【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型

    一枝独秀不是春 理论恒叨系列 [理论恒叨][立体匹配系列]经典PatchMatch: (1)Slanted support windows倾斜支持窗模型 [理论恒叨][立体匹配系列]经典PatchMa ...

  8. 论文阅读《Revisiting Stereo Depth Estimation From a Sequence-to-Sequence Perspective with Transformers》

    论文地址:https://ieeexplore.ieee.org/document/9711118 源码地址:https://github.com/mli0603/stereo-transformer ...

  9. 自监督论文阅读笔记SELF-SUPERVISED SPECTRAL MATCHING NETWORK FOR HYPERSPECTRAL TARGET DETECTION

    高光谱目标检测是一个像素级的识别问题.给定几个目标样本,它旨在从整个高光谱图像中识别特定的目标像素,例如飞机.车辆.船舶.一般来说,背景像素占图像的大部分并且分布复杂.结果,数据集的注释很弱并且非常不 ...

最新文章

  1. PPT到底是天使还是魔鬼?
  2. 这就是为什么您的开源项目失败
  3. UML类图关系全面剖析[转]
  4. C# 启动与停止进程
  5. QT 基于饼状图的一个抽奖系统
  6. CALayer和Retina显示屏的高分辨率的支持
  7. python中compile函数
  8. Android之路——第一个上线 APP项目总结
  9. 台式计算机的硬件故障,电脑主板坏了会出现什么情况?台式机电脑主板常见故障解决方法...
  10. 百度搜索引擎结果网址参数键盘重复速度(rsv_sug3)
  11. ZBrush控制撤销历史记录次数
  12. 审查元素html表格后缀,审查元素
  13. WWDC19 内参完整解读正式出炉~
  14. In-class Initialization
  15. 少年派 —— 之 读书
  16. 常微分方程数值解matlab欧拉,MATLAB实验报告_常微分方程数值解
  17. 利用NAS免费部署动态解析实现内网穿透
  18. 今天睡眠质量记录67
  19. (二)、Apache doris编译
  20. 关于如何解决360篡改edge等浏览器主页的解决方案

热门文章

  1. 前端工程筹建NodeJs+gulp+bower
  2. 移动校园卡,电信校园卡,联通校园卡
  3. word 无法复制粘贴怎么办
  4. 内存检测工具:sanitizer
  5. 新生宝宝为何天生过敏体质 婴儿过敏体质的症状
  6. SpringBoot上传文件并储存到本地(记录)
  7. python微妙级sleep
  8. wifi卡慢延迟高_wifi卡怎么办(wifi信号满格但网速慢解决方法)
  9. 阿里菜鸟回答2018:智能物流骨干网里的4张技术面孔
  10. Linux SPI 驱动