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

论文下载: PatchMatch Stereo - Stereo Matching with Slanted Support Windows

摘要

1.1 思路

 像素区域可以用近似的平面来模拟。
论文阅读笔记:《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》_第1张图片
(a) 平面图形具有恒定的视差值。(b) 实际不可能是平面,本文估计每个像素上的单独3D平面。
主要难点: 在所有可能无限数量的平面中找到一个像素的最优 3D 平面
解决方法: PatchMatch算法 (空间传播) + 拓展 (图传播,时间传播)

1.2 亚像素精度计算视差图

法一: 通常,亚像素信息是通过在后处理中将 cost volumn 拟合成一条抛物线而得到的。
法二: 在匹配中直接考虑亚像素精度更复杂(本文采用)。除了全值的视差之外,还考虑了一些分数视差值 (一半或四分之一像素)。

算法

2.1 模型

 对于两张图像中的每个像素 p,都寻找一个平面 fp 。 一旦平面 fp 被找到,就可以计算像素 p 处的视差 dp
d p = a f p p x + b f p p y + c f p ( 1 ) d_{p}=a_{f_{p}} p_{x}+b_{f_{p}} p_{y}+c_{f_{p}} \qquad (1) dp=afppx+bfppy+cfp(1)
 其中,afp、bfp、cfp 为平面 fp 的参数。像素 p 的坐标为(px , py)。目标函数为寻找聚合代价最小的平面 fp :
f p = argmin ⁡ f ∈ F m ( p , f ) ( 2 ) f_{p}=\underset{f \in \mathscr{F}}{\operatorname{argmin}} m(p, f) \qquad (2) fp=fFargminm(p,f)(2)
 其中, F \mathscr{F} F表示所有可能的平面。与平面 f 对应的匹配像素 p 的聚合代价为:
m ( p , f ) = ∑ q ∈ W p w ( p , q ) ⋅ ρ ( q , q − ( a f q x + b f q y + c f ) ) ( 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) \qquad (3) m(p,f)=qWpw(p,q)ρ(q,q(afqx+bfqy+cf))(3)
 其中,Wp 表示一个以像素p 为中心的3D方形窗口。权重函数 w(p,q) 用来解决边缘肥胖问题,并且实施自适应支持权重的思想,它根据像素之间的颜色信息计算它们之间的相似性。ρ(q,q′) 部分计算像素 q 和 对应匹配点 q′ 之间的不相似性。(q′ 根据平面 f 计算像素 q 处的视差得到)
w ( p , q ) = e − ∥ I p − I q ∥ γ ( 4 ) w(p, q)=e^{-\frac{\left\|I_{p}-I_{q}\right\|}{\gamma}}\qquad (4) w(p,q)=eγIpIq(4)
 其中, γ \gamma γ 是用户定义的参数, ∥ I p − I q ∥ \left\|I_{p}-I_{q}\right\| IpIq 计算像素p 和 q 在 RGB 空间中的 L1 距离。
ρ ( q , q ′ ) = ( 1 − α ) ⋅ min ⁡ ( ∥ I q − I q ′ ∥ , τ c o l ) + α ⋅ min ⁡ ( ∥ ∇ I q − ∇ I q ′ ∥ , τ g r a d ) ( 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_{g r a d}\right)\qquad (5) ρ(q,q)=(1α)min(IqIq,τcol)+αmin(IqIq,τgrad)(5)
 其中, ∥ ∇ I q − ∇ I q ′ ∥ \left\|\nabla I_{q}-\nabla I_{q^{\prime}}\right\| IqIq 表示像素 p 和 q 之间灰度值的梯度之差的绝对值。由于像素 q′ 的 x 坐标在连续区域内,通过线性插值来找到它的颜色和梯度值。用户定义的参数 α 用来平衡颜色和梯度项的影响,参数 τ c o l \tau_{c o l} τcol τ g r a d \tau_{g r a d} τgrad 截断代价,使得结果在遮挡区域也适用。

2.2 PatchMatch应用

(1) 随机初始化

 给两张图像的每个像素初始化一个随机平面 ( 目标是寻找最优的拟合3D平面 ) 。初始化后一个区域内至少有一个像素的平面接近正确的平面 (保证了空间传播能够进行,空间相邻像素进行传播)。
  给像素 (x0,y0) 计算一个随机平面,首先选择一个在所允许的连续视差值之间的随机的视差 z0 ,这样就给出随机平面中的一个点 P(x0,y0,z0)。然后计算这个平面的法向量为一个随机的单位向量 n ⃗ = ( n x , n y , n z ) \vec{n}=\left(n_{x}, n_{y}, n_{z}\right) n =(nx,ny,nz) 则平面参数为 a f : = − n x n z a_{f} :=-\frac{n_{x}}{n_{z}} af:=nznx b f : = − n y n z b_{f} :=-\frac{n_{y}}{n_{z}} bf:=nzny c f : = n x x 0 + n y y 0 + n z z 0 n z c_{f} :=\frac{n_{x} x_{0}+n_{y} y_{0}+n_{z} z_{0}}{n_{z}} cf:=nznxx0+nyy0+nzz0

(2) 迭代

  先处理左图中的所有像素,然后处理右图所有像素。在奇数次迭代中,从左上角的像素开始,逐行遍历像素,直到到达右下角的像素。在偶数次迭代中,从右下角的像素开始,然后在左上方停止。

step1 空间传播

  空间上相邻的像素很有可能具有相似的平面。 p 表示当前像素,fp 是它的平面。评估是否将 p 空间邻居 q 的平面 fq 分配给它。 若 m ( p , f q ) < m ( p , f p ) m\left(p, f_{q}\right)m(p,fq)<m(p,fp) 则将平面 fq 作为像素 p 的新平面, 更新 f p : = f q f_{p} :=f_{q} fp:=fq。在奇数次循环中,考虑左边和上方邻居,在偶数次循环中,考虑右边和下方的邻居。

step2 图传播

  左右视差图之间具有强相干性 (左图像素和它在右图中的匹配点很可能有相似的平面) 。取像素 p 点对应匹配点 p′ ,若 m ( p , f p ′ ) < m ( p , f p ) m\left(p, f_{p^{\prime}}\right)m(p,fp)<m(p,fp) 则将平面 f p ′ f_{p^{\prime}} fp 作为像素 p 的新平面, 更新 f p : = f p ′ f_{p} :=f_{p^{\prime}} fp:=fp

step3 时间传播

  用在立体视频序列中 (双目匹配不需要这一步) 。当前视频帧中的像素 p 和前面帧或后面帧图像中相同坐标上的像素 p′ 可能具有相似的平面。若 m ( p , f p ′ ) < m ( p , f p ) m\left(p, f_{p^{\prime}}\right)m(p,fp)<m(p,fp) 则将平面 f p ′ f_{p^{\prime}} fp 作为像素 p 的新平面, 更新 f p : = f p ′ f_{p} :=f_{p^{\prime}} fp:=fp

step4 平面细化

Δ z 0 max ⁡ \Delta_{z 0}^{\max } Δz0max : 3D 点的 z 坐标 z0 的最大允许变化, Δ n max ⁡ \Delta_{n}^{\max } Δnmax : 限制了法向量的分量变化范围
 估计 Δ z 0 \Delta_{z 0} Δz0 在区间 [ − Δ z 0 max ⁡ , Δ z 0 max ⁡ ] \left[-\Delta_{z_{0}}^{\max }, \Delta_{z_{0}}^{\max }\right] [Δz0max,Δz0max] 的一个随机值,并计算 z 0 ′ : = z 0 + Δ z 0 z_{0}^{\prime} :=z_{0}+\Delta_{z_{0}} z0:=z0+Δz0,从而得到新的3D点 P ′ = ( x 0 , y 0 , z 0 ′ ) P^{\prime}=\left(x_{0}, y_{0}, z_{0}^{\prime}\right) P=(x0,y0,z0)
  类似,估计三个随机值的区间 [ − Δ n max ⁡ , Δ n max ⁡ ] \left[-\Delta_{n}^{\max }, \Delta_{n}^{\max }\right] [Δnmax,Δnmax], 形成新矢量 Δ ⃗ n \vec{\Delta}_{n} Δ n。并计算修正后的法向量为 n ′ → : = u ( n ⃗ + Δ ⃗ n ) \overrightarrow{n^{\prime}} :=u\left(\vec{n}+\vec{\Delta}_{n}\right) n :=u(n +Δ n),其中 u () 计算单位向量。
  我们将由 p′ 和 n ⃗ ′ \vec{n}^{\prime} n 定义的平面转换为方程 (1) 的表示形式,得到了修改后的平面 f p ′ f_{p^{\prime}} fp。若 m ( p , f p ′ ) < m ( p , f p ) m\left(p, f_{p^{\prime}}\right)m(p,fp)<m(p,fp) 则将平面 f p ′ f_{p^{\prime}} fp 作为像素 p 的新平面, 更新 f p : = f p ′ f_{p} :=f_{p^{\prime}} fp:=fp
  细化过程迭代进行,初始化: Δ z 0 max ⁡ : = max ⁡ disp ⁡ / 2 \Delta_{z 0}^{\max } :=\max \operatorname{disp} / 2 Δz0max:=maxdisp/2 , ∇ n max ⁡ : = 1 \nabla_{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 的时候停。

2.3 后处理

  通过一致性检验处理遮挡像素和不匹配的像素。对于每个像素 p,在另一个图像中计算它的匹配点 p’,若条件 d p − d p ′ ≤ 1 d_{p}-d_{p^{\prime}} \leq 1 dpdp1不成立,则像素点 p 无效。
  无效像素填充有效视差,向左和向右搜索它最接近的有效像素,记录两个点的平面 f l f^{l} fl, f r f^{r} fr 根据(1)式计算视差,选择较小的视差作为 p 的填充视差。但是这种策略在视差图中产生水平条纹,应用加权中值滤波来处理填充的不均匀性(所用参数和匹配时一致)。

2.4 为全局方法构建一个数据项

  基于窗口的匹配使得全局算法可以像自适应支持权重方法一样精确捕获不连续的深度,但视图是一个平面时引入了误差。这个问题在以像素为基础计算匹配度量的标准全局数据术语中不存在。
  构造一个 cost volume ,可以存储所有是整值视差像素点的代价,但缺点是视差太过离散。计算固定视差 d 情况下所有匹配点的视差代价。设置  mindisp : = d − 0.5 \text { mindisp} :=d-0.5  mindisp:=d0.5 , maxdisp : = d + 0.5 − e p s \text {maxdisp} :=d+0.5-eps maxdisp:=d+0.5eps。然后按照2.2计算。将此数据项融入代价公式,结合参考文献方法进行处理。

实验分析

3.1 局部方法

 设置窗口大小35*35, { γ , α , τ c o l , τ g r a d } : = { 10 , 0.9 , 10 , 2 } \left\{\gamma, \alpha, \tau_{c o l}, \tau_{g r a d}\right\} :=\{10,0.9,10,2\} {γ,α,τcol,τgrad}:={10,0.9,10,2}
(1) fronto-parallel窗口在整值视差上匹配
 之前的方法采用特殊的自适应支持权重函数确保运行时不依赖匹配窗口大小,本文保留了对窗口大小的依赖关系,但是删除了对视差搜索范围的依赖关系。
(2) fronto-parallel窗口在连续亚像素位置上匹配
 解决了亚像素匹配需要将视差进行量化的问题
(3) 倾斜的窗口
论文阅读笔记:《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》_第2张图片
定性分析: (1) 的问题通过不同的前向平行视差段重建一个倾斜的表面,如图倾斜平面看起来像一个楼梯。(2) 允许亚像素匹配只是削弱的这种影响。(3) 成功显示平面,并且在重建圆形表面上是有效的 (例如杯柄)。
论文阅读笔记:《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》_第3张图片
  nocc: unoccluded regions无遮挡区域 \qquad all: 全部图像 \qquad disc: 视差不连续图像
定量分析: 本文方法在误差阈值为1时在大约 110 种算法中排名第 11,是该排名中性能最好的局部方法。注意 Teddy 图像集,从无遮挡区域的错误率来看,本文斜窗方法是性能最好的方法,这是因为大多数其他算法在重构斜地平面时都会遇到问题。误差阈值0.5时,本文方法在表中排名第 2,在复杂的 Teddy 和 cone 图像集上表现最好。
 同时也可处理高分辨率 (1024 * 576) 立体视频,设置3D立体窗 71 * 71 * 3,只需要在内存中保存当前平面参数和对应的每个像素的聚合成本。

3.2 全局方法

  用 Teddy 图像集评估第 2.4 节中描述的数据项。首先利用式 (5) 测度,通过像素级相关 (不执行聚合) 构造 cost volume ,(像素相关是标准全局方法通常做的事情)
论文阅读笔记:《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》_第4张图片
 图 6a 显示,在使用这个数据术语时,不能很好地保存视差边界。图 6b 显示使用自适应支持权重窗口构建成本卷,但只允许fronto-parallel窗口。视差边界的结果得到了改善,但是算法没有捕捉到倾斜的地面。图 6c 构造的数据项与倾斜窗口正确地重建对象边界和倾斜的地面。
  一般意见。局部自适应支持权重方法在 Middlebury 上的表现开始优于全局方法。全局方法无法比较 (图像集几乎没有无纹理的区域,比较丰富,适合局部方法) 。全局方法仍然有意义,因为它允许在匹配过程中直接处理遮挡,并且可以处理较大的无纹理区域。举个例子,我们生成了包含大量无纹理区域的 Middlebury 塑料材质图集。从图 6d 中可以看出,我们的局部方法失效,而全局方法 (使用倾斜的窗口数据项) 可以正确地重构视差 (图 6e)。

结论

  本文提出了一种局部算法,在每个像素上计算一个三维平面预测支持区域。算法思路来源是PatchMatch。得到好的亚像素的结果,并在Middlebury基准中排名靠前。同时展示了倾斜的窗户可为全局方法的数据术语发挥作用。在之后工作中,我们将把这个算法扩展到计算中光流和 GPU 实现,可能会实现实时性能。

你可能感兴趣的:(论文阅读)