基于MVS的三维重建算法学习笔记(五)— 立体匹配经典算法PatchMatch论文翻译及要点解读
基于MVS的三維重建算法學(xué)習(xí)筆記(五)— 立體匹配經(jīng)典算法PatchMatch論文翻譯及要點(diǎn)解讀
- 聲明
- 問題提出
- 問題建模
- 通過PatchMatch獲取平面參數(shù)——Inference via PatchMatch
- 1. 隨機(jī)初始化(Random Initialization)
- 2. 迭代傳播(Iteration)
- 2.1 空間傳播(Spatial Propagation)
- 2.2 視圖傳播(View Propagation)
- 2.3 時(shí)序傳播(Temporal Propagation)
- 2.4 平面優(yōu)化(Plane Refinement)
- 總結(jié)
- 參考文獻(xiàn)和資料
聲明
本人書寫本系列博客目的是為了記錄我學(xué)習(xí)三維重建領(lǐng)域相關(guān)知識的過程和心得,不涉及任何商業(yè)意圖,歡迎互相交流,批評指正。
問題提出
在局部立體匹配方法中,支持窗口(a support window)位于reference圖像某一像素點(diǎn)的中間位置,并且在target圖像中支持窗口會(huì)通過移動(dòng)來找到顏色差異最小的點(diǎn),作為該點(diǎn)的匹配對應(yīng)點(diǎn)。在這個(gè)問題過程中,存在一個(gè)隱含的假設(shè)——即支持窗口內(nèi)的所有像素都具有恒定的視差。但實(shí)際情況往往不是這樣,一是支持窗口包含位于與中心像素不同的表面上的像素(也就是支持窗口中的像素可能在場景中處于不同表面),二是支持窗口有可能位于傾斜的表面。自適應(yīng)支持權(quán)重方法(the adaptive support weight strategy)利用離散視差上的正面平行窗口(fronto-parallel windows at discrete disparities)很好地解決了問題一,重建的1維結(jié)果如下圖(a)所示;但是可以看到,這種方法只能為點(diǎn)P找到最佳的支持窗口,因?yàn)辄c(diǎn)P的表面部分在全值視差1處與正面平行平面(the fronto-parallel plane)重合,很明顯現(xiàn)實(shí)場景中很少能滿足這樣的情況。對于位于亞像素視差處的點(diǎn)Q、位于傾斜平面的點(diǎn)R以及位于球形平面的點(diǎn)S均無法用正面平行平面找到合適的支持窗口。
這樣就引出了本文的策略,即在每一個(gè)像素點(diǎn)都計(jì)算一個(gè)單獨(dú)的3D平面并且應(yīng)用在待投影的支持區(qū)域。如上圖(b)所示,這使得生成的支持窗口明顯改善,能夠完整的表示點(diǎn)P、Q、R所在的平面,而且對于S點(diǎn)處的平面,在實(shí)驗(yàn)中(如下圖(c)所示)也顯示具有較好的效果。在下圖(a)具有高度傾斜以包含球形物體的走廊場景中,本文的方法(c)展現(xiàn)了比正面平行平面方法(b)更好的性能。
在本文中,作者提出了一種基于PatchMatch的算法,用以有效解決在每個(gè)像素處尋找一個(gè)好的傾斜支持平面(a good slanted support plane),與其他方法不同的是,該方法并不重建整個(gè)立體代價(jià)體——對于一個(gè)無限標(biāo)簽空間包含所有的3D平面是不可能的,而是巧妙地遍歷其中一部分。PatchMatch是一種近似的稠密最近鄰算法,即對于一個(gè)圖像的每個(gè)patch計(jì)算第二個(gè)圖像中相似顏色的patch的整數(shù)值向量(x,y)。并且使用隨機(jī)搜索和傳播的PatchMatch思想,在一個(gè)平面的極線上尋找最近鄰點(diǎn),這能夠有效的處理傾斜表面和亞像素精度的問題。
問題建模
對于兩幅圖像的每個(gè)點(diǎn)對ppp,搜尋一個(gè)平面fpf_pfp?,一旦fpf_pfp?被搜索到,就可以計(jì)算ppp點(diǎn)的視差值dp=afppx+bfppy+cfpd_p=a_{f_p}p_x+b_{f_p}p_y+c_{f_p}dp?=afp??px?+bfp??py?+cfp??,其中afpa_{f_p}afp??、bfpb_{f_p}bfp??和cfpc_{f_p}cfp??是平面fpf_pfp?的三個(gè)參數(shù),pxp_xpx?和pyp_ypy?是點(diǎn)p的橫縱坐標(biāo)。最后希望找到的平面fpf_pfp?應(yīng)該是所有可能平面中聚合匹配代價(jià)(aggregated matching costs)最小的平面之一:fp=argminf∈Fm(p,f)f_p=\text{argmin}_{f\in \mathcal{F}}m(p, f)fp?=argminf∈F?m(p,f),其中F\mathcal{F}F代表大小為無限的所有平面的集合——但是這個(gè)無限的標(biāo)簽空間無法簡單地檢查所有可能的標(biāo)簽。平面fff的匹配像素ppp的聚合代價(jià)為:m(p,f)=∑q∈Wpw(p,q)?ρ(q,q?(afppx+bfppy+cfp))m(p,f)=\sum_{q\in W_p}w(p,q)·\rho(q,q-(a_{f_p}p_x+b_{f_p}p_y+c_{f_p}))m(p,f)=q∈Wp?∑?w(p,q)?ρ(q,q?(afp??px?+bfp??py?+cfp??)),其中WpW_pWp?表示以像素ppp為中心的方形窗口,權(quán)重函數(shù)w(p,q)w(p,q)w(p,q)用于克服邊緣肥大問題(edge-fattening problem)并實(shí)現(xiàn)自適應(yīng)支持權(quán)重思想。其通過查看像素的顏色來計(jì)算ppp和qqq位于同一平面上的可能性,即如果顏色相似,它會(huì)返回高值:w(p,q)=e?∣∣Ip?Iq∣∣γw(p,q)=e^{-\frac{||I_p-I_q||}{\gamma}}w(p,q)=e?γ∣∣Ip??Iq?∣∣?。函數(shù)ρ\rhoρ是在衡量兩個(gè)像素的不相似性。假設(shè)左視圖像素q的視差平面方程為(afp,bfp,cfp)(a_{f_p},b_{f_p},c_{f_p})(afp??,bfp??,cfp??)則它的視差值dp=afppx+bfppy+cfpd_p=a_{f_p}p_x+b_{f_p}p_y+c_{f_p}dp?=afp??px?+bfp??py?+cfp??,在右視圖上的對應(yīng)點(diǎn)q′=q?dqq'=q-d_qq′=q?dq?,則q和q′q'q′的不相似性計(jì)算公式為:ρ(q,q′)=(1?α)?min(∣∣Iq?Iq′∣∣,τcol)+α?min(∣∣ΔIq?ΔIq′∣∣,τgrad)\rho(q,q')=(1-\alpha)·min(||I_q-I_{q'}||,\tau_{col})+\alpha·min(||\Delta I_q-\Delta I_{q'}||,\tau_{grad})ρ(q,q′)=(1?α)?min(∣∣Iq??Iq′?∣∣,τcol?)+α?min(∣∣ΔIq??ΔIq′?∣∣,τgrad?)式中∣∣ΔIq?ΔIq′∣∣||\Delta I_q-\Delta I_{q'}||∣∣ΔIq??ΔIq′?∣∣為q和q′q'q′的梯度之差的絕對值,該式的含義就是兩個(gè)像素的顏色相差越大、梯度相差越大,則不相似的程度越大;α\alphaα參數(shù)為自定義參數(shù),在顏色和梯度之間做一個(gè)平衡。注意到根據(jù)平面算出來的視差值是小數(shù)值,所以像素q′q'q′的位置不是整數(shù)而是小數(shù),它的顏色值和梯度值通過線性內(nèi)插得到。參數(shù)τcol\tau_{col}τcol?和τgrad\tau_{grad}τgrad?為自定義截?cái)鄥?shù),為了讓遮擋區(qū)的像素代價(jià)計(jì)算更魯棒,意思就是不能讓代價(jià)過大,保持在一個(gè)良好的局部范圍內(nèi)。
至此得到了一個(gè)完整定義的代價(jià)函數(shù)用來衡量一個(gè)平面表示的好壞,在匹配時(shí)應(yīng)當(dāng)選擇代價(jià)最小的平面;但是由于空間中存在著無限個(gè)平面,所以不能簡單的利用窮舉的方法來搜尋,而是需要PatchMatch的思想來搜索。
通過PatchMatch獲取平面參數(shù)——Inference via PatchMatch
PatchMatch的基本思想是:在自然圖像中,一個(gè)有一定大小的像素塊內(nèi)所有像素都可以用同一個(gè)平面來近似。這也構(gòu)成了PMS的基本思想,即圖像可看作多個(gè)像素塊,而每個(gè)像素塊可有一個(gè)近似的視差平面,算法的目標(biāo)就是要找到圖像的所有視差平面。
1. 隨機(jī)初始化(Random Initialization)
初始化的規(guī)則為:在給定的視差范圍內(nèi)每個(gè)像素隨機(jī)生成一個(gè)視差值z0z_0z0?,這樣就得到了一個(gè)隨機(jī)平面上的點(diǎn)P=(x0,y0,z0)P=(x_0,y_0,z_0)P=(x0?,y0?,z0?),緊接著生成一個(gè)隨機(jī)的單位向量n?=(nx,ny,nz)\vec{n}=(n_x,n_y,n_z)n=(nx?,ny?,nz?)作為平面的法線,就可以得到平面的三個(gè)參數(shù)值:af=?nxnza_f=-\frac{n_x}{n_z}af?=?nz?nx??,bf=?nynzb_f=-\frac{n_y}{n_z}bf?=?nz?ny??,cf=nxx0+nyy0+nzz0nzc_f=\frac{n_xx_0+n_yy_0+n_zz_0}{n_z}cf?=nz?nx?x0?+ny?y0?+nz?z0??,初始化后的平面視差值為上圖(a)右中下方的“雪花點(diǎn)”。
2. 迭代傳播(Iteration)
一次迭代過程中,每個(gè)像素點(diǎn)會(huì)運(yùn)行四個(gè)階段:(1)空間傳播(2)視圖傳播(3)時(shí)序傳播(4)平面優(yōu)化,首先處理左幀的所有像素,然后處理右圖像的所有像素。在偶數(shù)迭代中,我們從左上角的像素開始,按行優(yōu)先順序遍歷像素,直到到達(dá)右下角的像素;在奇數(shù)迭代中,我們顛倒順序,即我們從右下角的像素開始,在左上角的像素處停止。
2.1 空間傳播(Spatial Propagation)
這種傳播形式背后的想法是空間相鄰像素可能具有相似的平面,令ppp表示當(dāng)前像素,fpf_pfp?表示其對應(yīng)平面,接下來評估將ppp分配給空間鄰近點(diǎn)qqq的對應(yīng)平面fqf_qfq?是否能夠提高代價(jià)函數(shù)的值,如果m(p,fq)<m(p,fp)m(p,f_q)<m(p,f_p)m(p,fq?)<m(p,fp?),則令fp:=fqf_p:=f_qfp?:=fq?,在偶數(shù)迭代中,我們考慮左鄰和上鄰,而在奇數(shù)迭代中,檢查右鄰和下鄰。
2.2 視圖傳播(View Propagation)
接著利用左右視差圖之間存在的強(qiáng)相干性,即視圖中的像素及其另一個(gè)視圖中的匹配點(diǎn)可能具有相似的平面;根據(jù)當(dāng)前平面檢查第二個(gè)視圖中所有將當(dāng)前像素ppp作為匹配點(diǎn)的像素,對于像素ppp的某個(gè)對應(yīng)點(diǎn)p′p'p′以及其平面fp′f_{p'}fp′?,若m(p,fp′)<m(p,fp)m(p,f_{p'})<m(p,f_p)m(p,fp′?)<m(p,fp?),則令fp:=fp′f_p:=f_{p'}fp?:=fp′?。
2.3 時(shí)序傳播(Temporal Propagation)
這種傳播形式只能在處理立體視頻序列時(shí)使用,該思路假設(shè)當(dāng)前視頻幀的像素ppp和前一個(gè)或連續(xù)圖像中相同坐標(biāo)的像素p′p'p′可能具有相似的平面。若m(p,fp′)<m(p,fp)m(p,f_{p'})<m(p,f_p)m(p,fp′?)<m(p,fp?),則令fp:=fp′f_p:=f_{p'}fp?:=fp′?。
2.4 平面優(yōu)化(Plane Refinement)
該步驟的目的是通過優(yōu)化位于像素點(diǎn)p=(x0,y0)p=(x_0,y_0)p=(x0?,y0?)的視差平面fpf_pfp?參數(shù)以便進(jìn)一步降低代價(jià)函數(shù)的值。首先將fpf_pfp?轉(zhuǎn)換為點(diǎn)+法線向量的表示方法,并且提出兩個(gè)新參數(shù):
- Δz0max\Delta^{max}_{z_0}Δz0?max?——定義了3D點(diǎn)z軸坐標(biāo)z0z_0z0?的最大變化范圍,緊接著在[?Δz0max,Δz0max][-\Delta^{max}_{z_0},\Delta^{max}_{z_0}][?Δz0?max?,Δz0?max?]區(qū)間內(nèi)隨機(jī)取一個(gè)值Δz0\Delta_{z_0}Δz0??作為修正:z0′=z0+Δz0z_0'=z_0+\Delta_{z_0}z0′?=z0?+Δz0??,由此得到新的3D點(diǎn)P′=(x0,y0,z0′)P'=(x_0,y_0,z_0')P′=(x0?,y0?,z0′?);
- Δnmax\Delta^{max}_nΔnmax?——定義了法向量n?\vec{n}n各分量的可變化范圍,然后,在[?Δz0n,Δz0n][-\Delta^{n}_{z_0},\Delta^{n}_{z_0}][?Δz0?n?,Δz0?n?]區(qū)間內(nèi)隨機(jī)取三個(gè)值組成法向量修正Δ?n\vec{\Delta}_nΔn?:n′?:=u(n?+Δn?)\vec{n'}:=u(\vec{n}+\vec{\Delta_n})n′:=u(n+Δn??);
通過修正后的P′P'P′和n′?\vec{n'}n′,計(jì)算并比較代價(jià)函數(shù),若m(p,fp′)<m(p,fp)m(p,f'_p)<m(p,f_p)m(p,fp′?)<m(p,fp?),則令fp:=fp′f_p:=f'_pfp?:=fp′?。
平面優(yōu)化步驟是迭代進(jìn)行的,初始設(shè)置Δz0max=maxdisp/2\Delta^{max}_{z_0}=maxdisp/2Δz0?max?=maxdisp/2(maxdisp為設(shè)置的最大視差值),Δnmax=1\Delta^{max}_{n}=1Δnmax?=1;每次迭代后,設(shè)置Δz0max=Δz0max/2\Delta^{max}_{z_0}=\Delta^{max}_{z_0}/2Δz0?max?=Δz0?max?/2,Δnmax=Δnmax/2\Delta^{max}_{n}=\Delta^{max}_{n}/2Δnmax?=Δnmax?/2,由此來逐漸縮小搜索空間。
總結(jié)
以上就是PatchMatch匹配算法中的創(chuàng)新部分,論文里還有一小節(jié)是講視差后處理的,由于后處理的方法很多,常見的就幾種,每個(gè)匹配算法或多或少都會(huì)用到幾種后處理的方法,所以在具體的算法解讀中就不做贅述,而是會(huì)單獨(dú)介紹一下常見的后處理方法。本人已經(jīng)開學(xué),所以時(shí)間精力有限,接下來可能會(huì)將SGM和PatchMatch的代碼注釋更完,緊接著就會(huì)進(jìn)行其他方面的學(xué)習(xí),歡迎大家一同學(xué)習(xí)討論~
參考文獻(xiàn)和資料
[1]78. 三維重建12-立體匹配9,經(jīng)典算法PatchMatchStereo
[2]【理論恒叨】【立體匹配系列】經(jīng)典PatchMatch: (1)Slanted support windows傾斜支持窗模型
[3]PatchMatch Stereo - Stereo Matching with Slanted Support Windows
總結(jié)
以上是生活随笔為你收集整理的基于MVS的三维重建算法学习笔记(五)— 立体匹配经典算法PatchMatch论文翻译及要点解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统服务
- 下一篇: UNIFI 多wan端口转发设置