PatchMatch小詳解


最近發了兩片patch match的,其實自己也是有一些一知半解的,找了一篇不知道誰的大論文看了看,又回顧了一下,下面貼我的筆記。

The PatchMatch Algorithm

patchmatch一開始被應用於結構化的圖片編輯。

  • 是一個隨機性的算法。
  • 致力於找到近似的最近領匹配。

patchmatch的假設:

  • 鄰近的像素有一樣的模型參數\(p\in R^n\)
  • 有一個cost function可以計算給定一個\(p\)的代價

PatchMatch三大步:

  • 隨機初始化
  • 傳播
  • 隨機搜索

PatchMatch for Motion Estimation

因為有些像素可能會被遮擋,我們需要舍棄他們的估計。有一種方法叫forward-backward consistency check.

這個移動也不能是無限大的,在這個論文里如果大於400像素我們就舍棄。

Motion Models

有各種translation motion model.

  • The Translational Motion Model

\[\begin{aligned} x_{2} &=x_{1}+b_{1} \\ y_{2} &=y_{1}+b_{2} \end{aligned} \]

  • The Affine Motion Model

\[\begin{aligned} x_{2} &=a_{1} x_{1}+a_{2} y_{1}+b_{1} \\ y_{2} &=a_{3} x_{1}+a_{4} y_{1}+b_{2} \end{aligned} \]

  • The Projective Motion Model

也就是個Homography.

\[\omega \left( \begin{array}{c}{x_{2}} \\ {y_{2}} \\ {1}\end{array}\right)=\left( \begin{array}{lll}{h_{1}} & {h_{2}} & {h_{3}} \\ {h_{4}} & {h_{5}} & {h_{6}} \\ {h_{7}} & {h_{8}} & {h_{9}}\end{array}\right) \left( \begin{array}{l}{x_{1}} \\ {y_{1}} \\ {1}\end{array}\right) \]

也可以簡化一下:

\[\begin{aligned} x_{2} &=\frac{h_{1} x_{1}+h_{2} y_{1}+h_{3}}{h_{7} x_{1}+h_{8} y_{1}+h_{9}} \\ y_{2} &=\frac{h_{4} x_{1}+h_{5} y_{1}+h_{6}}{h_{7} x_{1}+h_{8} y_{1}+h_{9}} \end{aligned} \]

  • The Quadratic Motion Model

\[\begin{array}{l}{x_{2}-x_{1}=a_{1}+a_{2} x_{1}+a_{3} y_{1}+a_{7} x_{1}^{2}+a_{8} x_{1} y_{1}} \\ {y_{2}-y_{1}=a_{4}+a_{5} x_{1}+a_{6} y_{1}+a_{7} x_{1} y_{1}+a_{8} y_{1}^{2}}\end{array} \]

PatchMatch for Stereo Reconstruction

有幾個模型,比如:eipipolar constraint model, projective planar model, the slanted plane model.

Pipeline

有4個步驟:

  • camera calibration

相機標定是拿內外參,也就是內參相機位姿都要知道。

  • image rectification

簡化下一步驟,因為只需要在橫坐標上搜索。

  • disparity estimation (aka stereo matching)

  • depth reconstruction

有了相機內外參和dispairty,深度很容易估計。

1558322695040

\[Z=\frac{f \cdot b}{x_{1}-x_{2}}, Y=\frac{y_{1} \cdot Z}{f}, X=\frac{x_{1} \cdot Z}{f} \]

這里\(b\)是baseline, disparity \(d=x_1-x_2\),所以\((X, Y, Z)\)都和disparity成倒數。

Models for Stereo Matching

  • The Epipolar Constraint Model

\[\tilde{\mathbf{x}}_{2}^{\top} \mathbf{F} \tilde{\mathbf{x}}_{1}=0 \]

當只有x軸上的移動,也就是在rectified image的時候,\(F\)會退化成如下:

\[\mathbf{F}=\left[ \begin{array}{ccc}{0} & {0} & {0} \\ {0} & {0} & {-1} \\ {0} & {1} & {0}\end{array}\right] \]

這樣的話,\(y_2=y_1\)

  • The Projective Planar Model

\[\begin{aligned} x_{2} &=\frac{h_{1} x_{1}+h_{2} y_{1}+h_{3}}{h_{4} x_{1}+h_{5} y_{1}+h_{6}} \\ y_{2} &=y_{1} \end{aligned} \]

  • The Slanted Plane Model

這個模型假設\((x, y, d)\)和一個法向量\((n_x, n_y, n_z)\)在一個3D平面上,這里\(d\)表示視差。一個穿過點\(\left(x_{1}, y_{1}, d_{1}\right)\)的平面方程如下:

\[n_{x}\left(x-x_{1}\right)+n_{y}\left(y-y_{1}\right)+n_{z}\left(d-d_{1}\right)=0 \]

這個公式其實挺容易理解的,從這個點發射的向量如果和法向量乘積是0,那就在這個平面上。

那么根據上式,視差的表達式也可以很容易推導出來:

\[d=\frac{n_{x} x_{1}+n_{y} y_{1}+n_{z} d_{1}}{n_{z}}-\frac{n_{x}}{n_{z}} x-\frac{n_{y}}{n_{z}} y \]

代價函數 Cost Function

公式:

\[\begin{aligned} \mathcal{C}\left(\mathbf{p} ; x_{1}, y_{1}\right)=\sum_{\delta_{x}=-m}^{m} \sum_{\delta_{y}=-m}^{m}\left(\mathcal{W}\left(f\left(x_{1}, y_{1}\right), f\left(x_{1}+\delta_{x}, y_{1}+\delta_{y}\right)\right)\right.\\ \cdot & \rho\left(f\left(x_{1}+\delta_{x}, y_{1}+\delta_{y}\right), g\left(x_{1}+\delta_{x}-\mathcal{D}\left(\mathbf{p} ; x_{1}+\delta_{x}, y_{1}+\delta_{y}\right), y_{1}+\delta_{y}\right)\right) ) \end{aligned} \]

和公式:

\[\begin{aligned} \mathcal{C}\left(\mathbf{p} ; x_{2}, y_{2}\right)=\sum_{\delta_{x}=-m}^{m} \sum_{\delta_{y}=-m}^{m}\left(\mathcal{W}\left(g\left(x_{2}, y_{2}\right), g\left(x_{2}+\delta_{x}, y_{2}+\delta_{y}\right)\right)\right.\\ & \cdot \rho\left(g\left(x_{2}+\delta_{x}, y_{2}+\delta_{y}\right), f\left(x_{2}+\delta_{x}+\mathcal{D}\left(\mathbf{p} ; x_{2}+\delta_{x}, y_{2}+\delta_{y}\right), y_{2}+\delta_{y}\right)\right) ) \end{aligned} \]

這里\(m\)是patch的大小,而\(\mathcal{W}\)是一個權重函數:

\[\mathcal{W}\left(f(x, y), f\left(x^{\prime}, y^{\prime}\right)\right)=\exp \left(-\frac{\left\|f(x, y)-f\left(x^{\prime}, y^{\prime}\right)\right\|_{1}}{\gamma}\right) \]

\(\rho(.)\)函數計算像素\(f(x,y)\)和它的投影點\(g(x-d,y)\)不相似度:

\[\begin{aligned} \rho(f(x, y), g(x-d, y))=&(1-\beta) \cdot \min \left(\|f(x, y)-g(x-d, y)\|_{1}, \tau_{c o l}\right) \\ &+\beta \cdot \min \left(\|\nabla f(x, y)-\nabla g(x-d, y)\|_{1}, \tau_{g r a d}\right) \end{aligned} \]

這里\(\beta\)就是衡量兩個不同項的權重參數,\(\nabla\)是計算梯度的負號。第一項是在RGB空間里的差異,這里第二項計算的是灰度梯度的絕對值差異。

View Propagation

除了spatial propagation(假設鄰近的像素有相似的模型參數),有一個人還加了另一個假設,認為說對應點的鄰近也有相似的模型參數。

Post-Processing

有三個步驟: 外點剔除,invalid pixels handling和weighted median filter。

  • Outlier Removal: 用forward-backward consistency check來移除被遮擋的點。
  • Invalid Pixels Handling: 在移除了遮擋的點以后,我們在這個像素的左右各找一個最近的點,然后根據鄰近點的參數計算視差,然后選一個小的視差來作為它的模型參數。
  • Weighted Median Filter: 是最后作為refinement的一步,這個只會對在forward-backward consistency check失敗的點來操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM