关键词:
- 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} ight|)计算的p和q在RGB空间的距离。
- 公式( holeft(q, q^{prime} ight))计算q和q‘的不相似度。
这儿(left| abla I_{q}- abla I_{q^{prime}} ight|)表示灰度梯度的差异。
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} ight))。
- [ ] In addition, we can switch off sub-pixel precision by enforcing an integer-valued disparity for (z_0).
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 (mleft(p, f_{p^{prime}} ight)<mleft(p, f_{p} ight)), we set (f_{p} :=f_{p^{prime}}).
Temporal Propagation
这个传播只在stereo video sequences中使用。
- 四路:在连续帧中同一个帧可能会有相同的平面(小运动中更可能)。
If (mleft(p, f_{p^{prime}} ight)<mleft(p, f_{p} ight)), we set (f_{p} :=f_{p^{prime}}).
Plane Refinement
。。。
后处理
使用occlusion treatment via left/right consistency checking.
检查条件(left|d_{p}-d_{p^{prime}} ight| leq 1),如果不满足的话,像素(p)就是无效的。
这种一致性检查一般会使被遮挡的像素失效,对于错误的匹配也有效果。
对于一个失效的像素(p), 我们从左右搜索最近的有效点,两个平面(f^l), (f^r)被记录。然后把像素往两个平面上投,并计算disparity,然后选择不一致性比较低的。
- [ ] 思路:the fact that occlusion occurs at the background.