zoukankan      html  css  js  c++  java
  • PatchMatch笔记

    关键词:

    • slanted surfaces: 倾斜的平面
    • fronto-parallel windows: ???
    • remedy: 补救
    • disparity: 视差图

    对每一个像素都估计一个3D平面。所以这个方法的挑战就是找到一个最优的3d平面。当平面 (f_p) 被找到以后,就可以用下面的式子计算视差图。

    [d_{p}=a_{f_{p}} p_{x}+b_{f_{p}} p_{y}+c_{f_{p}} ]

    这里((p_x, p_y))表示图像的坐标。

    我们要找的平面满足下面的要求

    [f_{p}=underset{f in mathscr{F}}{operatorname{argmin}} m(p, f) ]

    黄金公式,patch match的重点:

    [m(p, f)=sum_{q in W_{p}} w(p, q) cdot holeft(q, q-left(a_{f} q_{x}+b_{f} q_{y}+c_{f} ight) ight) ]

    • 这里的(w(p, q))通过看颜色来计算在平面上的可能性,如果颜色很近似的话就返回比较大的值。(left|I_{p}-I_{q} ight|)计算的p和q在RGB空间的距离。

    [w(p, q)=e^{-frac{left|I_{p}-I_{q} ight|}{gamma}} ]

    • 公式( holeft(q, q^{prime} ight))计算q和q‘的不相似度。

    [ holeft(q, q^{prime} ight)=(1-alpha) cdot min left(left|I_{q}-I_{q} ight|, au_{c o l} ight)+alpha cdot min left(left| abla I_{q}- abla I_{q^{prime}} ight|, au_{g r a d} ight) ]

    这儿(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))

    [a_{f} :=-frac{n_{x}}{n_{z}}, b_{f} :=-frac{n_{y}}{n_{z}} ext { and } c_{f} :=frac{n_{x} x_{0}+n_{y} y_{0}+n_{z} z_{0}}{n_{z}} ]

    • [ ] 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)是它的平面。

    检查条件:

    [mleft(p, f_{q} ight)<mleft(p, f_{p} ight) ]

    如果上述的不等式为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.
  • 相关阅读:
    Delphi中Format与FormatDateTime函数详解
    常用的日期时间函数
    100m和1000m网线的常见制作方法
    Delphi cxGrid –--> RecordIndex out of Range
    局域网共享需要密码
    提高AdoQuery的速度
    string literals may have at most 255 elements
    001-project基本使用
    Java-idea-创建maven项目,部署项目,部署服务器,简单测试
    003-spring结合java类调用quartz
  • 原文地址:https://www.cnblogs.com/tweed/p/10883091.html
Copyright © 2011-2022 走看看