关键词:
- slanted surfaces: 倾斜的平面
- fronto-parallel windows: ???
- remedy: 补救
- disparity: 视差图
对每一个像素都估计一个3D平面。所以这个方法的挑战就是找到一个最优的3d平面。当平面 \(f_p\) 被找到以后,就可以用下面的式子计算视差图。
这里\((p_x, p_y)\)表示图像的坐标。
我们要找的平面满足下面的要求
黄金公式,patch match的重点:
- 这里的\(w(p, q)\)通过看颜色来计算在平面上的可能性,如果颜色很近似的话就返回比较大的值。\(\left\|I_{p}-I_{q}\right\|\)计算的p和q在RGB空间的距离。
- 公式\(\rho\left(q, q^{\prime}\right)\)计算q和q‘的不相似度。
这儿\(\left\|\nabla I_{q}-\nabla I_{q^{\prime}}\right\|\)表示灰度梯度的差异。
Inference via PatchMatch
然后我们来关注如何为每一个点找到一个3D平面。
首先先随机初始化一个平面。然后希望这个随机的初始化能让至少一个像素blah blah.
有一个传播的步骤会把这个平面传播到这个区域的其他像素。
我们引入了两种传播的四路:
- view propagation
- temporal propagation
最后有一个plane refinement step来算去最优平面。
随机初始化
我们首先会选择一个random disparity \(z_0\), 然后会得到一个在随机平面上的点\(P = (x_0, y_0, z_0)\), 然后计算这个平面的垂直向量 \(\vec{n}=\left(n_{x}, n_{y}, n_{z}\right)\)。
Iteration
- spatial propagation
- view propagation
- temporal propogation
- plane refinement
在每一次迭代中,我们从左上角的像素开始,然后以行为方向进行遍历,直道遍历到右下角的像素。
在基数(ODD)迭代中,我们 reverse the order.i.e. 从右下角开始遍历到左上角。
Spatial Propagation
- 思路: 这里认为在空间中领进的点很可能有一样的平面。
假设\(p\)是当前点,\(f_p\)是它的平面。
检查条件:
如果上述的不等式为true, 则接受\(f_q\)作为\(p\)的新平面
- 在偶数次迭代中检车左上的邻居,在基数词迭代中检车右下的邻居
View Propagation
- 四路: 一个像素和它在另一张图的匹配点有可能有相似的平面。
我们检查在第二张图中所有跟当前像素\(p\)匹配的点。
If \(m\left(p, f_{p^{\prime}}\right)<m\left(p, f_{p}\right)\), we set \(f_{p} :=f_{p^{\prime}}\).
Temporal Propagation
这个传播只在stereo video sequences中使用。
- 四路:在连续帧中同一个帧可能会有相同的平面(小运动中更可能)。
If \(m\left(p, f_{p^{\prime}}\right)<m\left(p, f_{p}\right)\), we set \(f_{p} :=f_{p^{\prime}}\).
Plane Refinement
。。。
后处理
使用occlusion treatment via left/right consistency checking.
检查条件\(\left|d_{p}-d_{p^{\prime}}\right| \leq 1\),如果不满足的话,像素\(p\)就是无效的。
这种一致性检查一般会使被遮挡的像素失效,对于错误的匹配也有效果。
对于一个失效的像素\(p\), 我们从左右搜索最近的有效点,两个平面\(f^l\), \(f^r\)被记录。然后把像素往两个平面上投,并计算disparity,然后选择不一致性比较低的。