通過前面的介紹,已經獲得了相機的參數,我們可以利用這些參數使用基於面片的三維多視角立體視覺算法(PMVS)重建出稠密的點雲。下面詳細介紹一下PMVS算法。
一、基本概念介紹
1、面片(patch)
面片p是一個近似的正切與重建物體表面的一個小矩形,他的一邊平行於參考相機的x軸。對於一個面片p,他的幾何特征如下:
中心點:c(p);
單位法向:n(p),該向量指向相機的光心;
面片p對應一個參考圖像R(p),在R(p)中p是可見的。針對p有擴展矩形,p在R(p)中的投影是μ×μ大小的,在原論文中μ=5 or 7
2、灰度一致性函數(Photometric Discrepancy Function)
首先,我們定義圖像集合V(p)表示所有在自身圖像中可見面片p的圖像集合(顯然這里有R(p)∈V(p),將在后面介紹V(p)的獲得已經R(p)的確定)那么,灰度一致性函數定義如下:
在這里,V(p)\R(p)是指除去R(p)的V(p)的其他元素;h(p,I1,I2)是指I和R(p)的灰度一致性函數,計算過程如下:
1. 首先把面片p划分為μ×μ的小格;
2. 通過雙線性差值的方法,對p在Ii的圖像上的投影進行差值,得到像素灰度q(p,Ii);
3. 用1減去q(p,I1)和q(p,I1)的NCC(normalized cross correlation)值。
過程如下圖所示:

由於g(p)對於圖像中出現高光或者有障礙物的情況下的效果不好,因此在實際情況下,我們需要保證圖像I和圖像R(p)的灰度一致性函數大於一定的值α(后面將會介紹如何選擇這個閾值)。因此有:
3、面片的優化
面片優化的目的就是恢復那些g∗(p)較小的面片,每個面片的重建過程分為以下兩步:
4. 初始化面片的相關參數中心點c(p),法向量n(p),可視化圖像集V∗(p)和參考圖像R(p);
5. 優化幾何參數c(p)和n(p)
這里的第一步初始化的過程在后面用到,這里先講以下c(p)和n(p)的優化。幾何參數c(p)和n(p)的優化是通過最小化光度一致性分數(the photometric discrepancy score)g∗(p)而得到的。為了簡化計算,將c(p)約束在某一條光線上,這樣p在其對應的可視圖集V∗(p)中某個圖像的投影位置就不會變,因此降低了p的自由度和只能求出一個深度。n(p)是由歐拉角(yaw and pitch)決定的,可以用共軛梯度法求解這個優化問題。
4、圖像模型
基於面片的物體表面的表示的優勢是他的靈活性,然而卻不容易找到面片的連續性。為了解決這個問題進行了如下的操作,把圖像Ii分成了許多β1×β1像素的的小塊Ci(x,y),這里x,y表示圖像塊的下標,i表示這是第i張圖像的。給定一個面片p和對應的V(p),把p投影到V(p)的圖像中,以得到面片p對應的圖像塊,每個圖像塊Ci(x,y)用一個集合Qi(x,y)記錄了所有投影到這個圖像塊的面片。同理,我們用Q∗i(x,y)來表示用V∗(p)得到的結果。如下圖所示:

二、面片的重構
基於面片的多視角三維立體視覺算法的目的就是保證在每個圖像塊Ci(x,y)上至少有一個面片的的投影。主要分為以下三步:
1. 初始化特征匹配(initial feature matching);
2. 面片生成(patch expansion);
3. 面片篩選(patch filtering);
初始化特征匹配的目的就是生成一系列稀疏的面片,面片的生成和篩選都要執行n次使得面片足夠稠密,同時去除不好的面片。下面依次進行介紹。
1、初始化特征匹配
首先用DOG和Harris來提取圖像的角點特征,即為每幅圖像的特征點。對於圖像Ii,以及其對應的光心O(Ii),該圖像中的特征點f,通過允許有兩個像素誤差的極線約束找到它在其他圖像中的同種類型的特征點f′,構成匹配點對(f,f′)。然后用這些匹配點對使用三角化的方法生成一系列三維空間點,然后將這些點按照距離O(Ii)從小到大順序進行排列,然后依次嘗試生成面片,直到成功。
嘗試生成面片的方法如下所示:首先初始化候選面片的c(p),n(p)和R(p),如下所示:

由於生成的面片可能有很多錯誤的情況,因此我們認為在圖像Ii中可見的面片是面片的法向量與面片中心到相機光心的連線夾角小於一定角度α的圖像,即滿足:
同樣V∗(p)的獲得與前面所講的方法相同。這樣面片的信息都已經初始化過了,然后根據前面所講的對c(p)和n(p)進行優化,並將優化過后的c(p)和n(p)帶入
中對V(p)和V∗(p)進行更新。如果|V∗(p)|≥r,集認為面片p的可視圖像至少為r幅,即接受面片p,重建成功。並將面片p存儲到對應的可視圖像的圖像塊中(即更新Qi(x,y)和Q∗i(x,y))。
具體的算法描述和圖示如下圖所示,過程就是我上面說的過程,懶得翻譯了,很好理解。

2、面片生成(patch expansion)
面片生成的目的就是保證每個圖像塊至少對應一個面片。通過上面生成的面片,重復的生成新的面片,具體來說就是給定一個面片p,首先獲得一個滿足一定條件的鄰域圖像塊集合C(p),然后進行面片生成的過程。
下面是面片p的兩個相關概念:
圖像塊鄰域C(p):

面片p和p′的臨近關系:
即當面片p和p′滿足上式時,即判定兩者為臨近關系,上式中的ρ1由R(p)在c(p)和c(p′)中的深度決定。
當存在一個面片p′其所屬的圖像塊Ci(x′,y′)滿足Ci(x′,y′)∈C(p),同時p和p′屬於近鄰關系時,此時將Ci(x′,y′)從C(p)中刪除,不對他進行面片生成。同時,即使這個條件沒有滿足,只要Qi(x′,y′)不為空,也不需要再此圖像塊上執行生成操作。
對於C(p)中其余的圖像塊,將會執行面片生成的操作流程以生成新的面片p′。首先用p的相應變量初始化p′的n(p′)、R(p′)和V(p′),對於c(p’)的初始值為穿過Ci(x,y)的可視光線與面片p所在平面的交點。使用
由V(p)得到V∗(p′),再由上面提到的方法對c(p′)和n(p′)進行優化。在優化的過程中,將c(p′)約束在一條直線上,使得p′在圖像Ii上的位置不會改變,始終對應的是Ci(x,y)。優化完成后,給V(p′)加上一組圖像,這些圖像塊些根據深度測試判斷為p′對其應該是可見的,並根據此更新V∗(p′)。
最終如果|V∗(p′)|≥r,則判定p′是可接受的,即生成成功,同時更新Qi(x,y)和Q∗i(x,y)。具體的參數設置參見原論文。
面片生成的算法流程如圖所示:

3、面片過濾(patch filtering)
在面片的重建過程中,可能會生成一些誤差較大的面片,因此需要過濾來確保面片的准確性。
第一個過濾器是通過可視一致性進行過濾,另U(p)表示與當前可視信息不連續的面片集合,所謂的不連續就是p和p′兩個面片不屬於近鄰關系,但是卻存在於同一個Qi(x,y)中。對於U(p)中的面片p,如果滿足下列條件,則將其過濾掉。
直觀上來講,如果p是一個異常值,那么1−g∗(p)和|V∗(p)|都會比較小,這樣p一般都會被過濾掉。
第二個過濾器同樣也是考慮可視一致性,不過會更加嚴格,對於每個面片p,我們計算他通過深度測試得到的可視圖像的總數,如果數目小於r,那么則認為p是異常值,從而過濾掉。
第三個過濾器,對於每個面片p,在V(p)中,收集這樣的一組面片,他們的映射到面片p自己所在的圖像塊以及所有相鄰的圖像塊,如果p的八鄰域內的面片數量占收集所得面片數量的比例小於0.25,則任務p是異常值,將其過濾掉。
三 多邊形網格重建
這一章主要講的是仍然希望將它們的面片集合應用到基於圖像的建模應用的表面網格。主要是是兩個初始化多邊形網格模型的算法:
4.1 網格初始化
1簡單使用泊松表面重建軟件直接將一組定向點轉換為三角化的網格模型。
2從分割信息中計算可視化外殼,然后迭代變形成重構的面片,其中網格中所有頂點的三維坐標模型是通過梯度體方法優化成最小化每個頂點的兩個能量函數的總和。
Es(Vi)=|-ζ1Δvi+ζ2Δ^2vi|^2/τ^2
其中Δ表示離散拉普拉斯算子相對到Vi中的切平面的局部參數化,τ是網格模型平均邊緣長度,Vi表示一個頂點Vi的位置(ζ1=0.6,ζ2=0.4)
使重構面片的連續性(光度一致性項)
Es(vi)=max(-0.2,min(0.2,d(vi)*n(vi)/τ))^2
n(vi)是在vi處表面的外單位法線,d(vi)是vi和重構面片n(vi)之間的符號距離。
d(vi)=∑p∈∏(vi)w(p)[n(vi)*c(p)-vi]
面片p的法向n(p)與vi方向一致,計算中心點C(P)和由vi和n(vi)定義的線的距離,然后集合π=10,設置∏(vi)的最近面片集,最后計算從vi到∏(vi)沿n(vi)的加權平均距離, 權重n(p)是C(p)和線距離的高斯函數標准偏差ρ1定義在3.2.1中,歸一化總和為1.8
4.2 網格細化
所有頂點的是三維坐標被優化和關於每個頂點光度一致性和幾何平滑能量函數總和
1)一個表面的深度和方向被估計,它的每對可視化圖像集相對每個頂點通過用面片優化過程
2)評估深度和方向信息被聯合計算能量函數
V(vi)表示一組圖像集,其中vi是可視化的圖像,從一個標准深度圖測試集評估的當前網格模型
E'p(vi)=ζ3∑p∈P(vi)1-exp(-(d'(vi,p)/τ/4)^2)
d'(vi,p)=n(p)*(c(p)-vi)
其中d‘(vi,p)是面片p和頂點vi沿着單位面片的符號距離,τ是網格平均加權長度,ζ3是線性組合權重。
(以上是我的修改和補充的部分,如有錯誤請指正,我會繼續修改直到最好。。。。。。)