Stereo Processing by Semiglobal Matching and Mutual Information
基於半全局匹配和互信息的立體處理
摘要
本文描述了半全局匹配的立體算法。該算法採用逐像素的基於互信息的匹配代價補償不同亮度的輸入圖像。逐像素匹配通過一個平滑約束支持,平滑約束通常表示爲全局代價函數。SGM通過從各個方向進行逐像素優化來執行快速近似。討論還這幾到遮擋檢測、亞像素求精和多基線匹配。此外,還提出了去除離羣值、從結構化環境的特殊問題中恢復以及提出了間隙插值方法。最後,提出了幾乎任意大小圖像的處理策略和通過正交投影進行視差圖像融合的策略。對標準立體圖像的比較表明,SGM算法是目前在排名最靠前的算法之中,並且在考慮亞像素的情況下是最好的一個。算法複雜度與像素的數量和視差範圍成線性關係,這使得在典型測試圖像上的運算時間只有1-2秒。基於MI的匹配代價的深度評估證明了對廣泛的亮度變化有較好的容忍度。最後,通過對大型航拍和推掃圖像的重建實例驗證了本文提出的方法在實際問題中的有效性
1 介紹
2 半全局匹配
半全局匹配方法是基於互信息的逐像素匹配的思想和近似全局,通過結合多個一維約束條件得到的二維平滑約束。該算法採用不同的處理步驟進行描述。其中一些步驟是可選的,這取決於應用情況。
2.1 逐像素匹配代價計算
輸入圖像被假定已知其中的對極幾何模型,但是並不需要是被校正過的,因爲有些情況是難以被校正的。例如推掃式圖像中。由於平行投影在運動方向上,透視投影與運動方向正交,線性運動使極線變成雙曲線[21]。 非線性運動在航空影像中是不可避免的,導致極線成爲一般的曲線和圖像不能夠被校正[22]。
要計算參考圖像中某一像素點 p 的匹配代價,需要用到其灰度 Ibp ,及在待匹配圖像的疑似匹配點 q 的灰度 Imq ,通過 q=ebm(p,d) 。函數 ebm(p,d) 代表參考圖像中像素 p 和極線參數 d 下匹配圖像中的極線。對於校正後的圖像,且匹配圖像在參考圖像的右側,則 ebm(p,d)=[px−d,py] ,且 d 代表視差。
一個重要的方面是考慮匹配區域的大小和形狀。匹配的魯棒性隨面積的增大而增強。然而,面積增大後會出現不連續的位置,在不連續位置上違反了視差在區域內恆定的假設,這將導致模糊了物體邊界和精細結構。某些形狀和技術能夠用於減少模糊,但是模糊不能避免[8]。因此,這裏不使用在 p 鄰域內視差恆定的假設。也就是說只有 Ibp 和 Imq 這兩個灰度值被用於計算匹配代價。
逐像素代價計算的一個選擇是 Brichfield 和 Tomasi 提出的採樣不敏感測量[2](簡稱BT )。代價CBT(p,d) 通過極線中在每一個方向上的半個像素範圍內的像素 p 和像素 q=ebm(p,d)的最小灰度差的絕對值進行計算。
另一種匹配代價計算是基於互信息(MI,Mutual Information)[4],它對記錄和光照變化不明顯。互信息由兩個圖像各自的熵 H以及他們的聯合熵來定義:
MII1,I2=HI1+HI2−HI1,I2
熵是通過計算相關圖像的概率分佈P得到:
HI=−∫01PI(i)logPI(i)di
HI1,I2=−∫01∫01PI1,I2(i1,i2)logPI1,I2(i1,i2)di1di2
對於配準良好的圖像,聯合熵HI1,I2較低因爲一個圖像能夠被另一幅圖像預測,這與低信息相對應。這增加了他們的互信息。在立體匹配的情況下,一幅圖像需根據視差圖像D來進行修正,爲了匹配另一幅圖像,使得兩幅圖像中對應的像素處於相同的位置,也就是 I1=Ib 而且 I2=fD(Im)。
式(1)對整個圖像進行計算並且需要有一個先驗的視差圖。同時防止MI的使用變成逐像素匹配代價。kim等人[6]利用泰勒展開將聯合熵HI1,I2的計算轉化爲對像素的求和運算。有關推導的細節,請參閱他們的論文。因此,聯合熵的計算表示爲一個依賴於像素p對應灰度的數據項的和的形式:
HI1,I2=p∑hI1,I2(I1p,I2p).
數據項hI1,I2由對應灰度的聯合概率分佈PI1,I2計算。對應像素的個數爲n。通過一個二維高斯卷積(由⊗g(i,k))有效的執行Parzen估計[6]:
hI1,I2(i,k)=−n1log(PI1,I2(i,k)⊗g(i,k))⊗g(i,k).
對應灰度的概率分佈由操作T[]來定義,這裏如果參數爲真就是1,不是就爲0,
PI1,I2(i,k)=−n1p∑T[(i,k)=(I1p,I2p)].
整個計算過程如圖1所示。待配準圖像Im根據初始視差圖D進行修正。這可以通過一個簡單的查詢在圖像Im內的所有像素p通過ebm(p,Dp)。然而,應該注意避免由於遮擋而在圖像Im中的雙重對應。P的計算根據公式(6)是通過計算所有灰度組合的像素個數,除所有對應像素的個數。之後根據公式(5),高斯平滑是通過卷積實現。我們發現,使用小內核(即7×7)與大內核的結果幾乎一樣,但是計算的更快。對每一個結果元素做對數運算。因爲0的對數沒有意義,所有零元素都被一個很小的數值說替代。之後再進行一次高斯平滑有效的生成一個數據項hI1,I2的查找表。
Kim等人認爲,熵HI1是恆定,熵HI2由於視差圖像僅僅是重新分佈了I2的灰度,幾乎也是恆定的。因此,hI1,I2(I1p,I2p)作爲代價計算的兩個灰度。然而,如果遮擋被考慮進來那麼I1和I2中的一些灰度就沒有對應項。這些灰度不能夠被包含在計算中,這將導致熵HI1和HI2。除了這一理論證明之外,我們還發現在代價計算中加入這些熵能夠略微改善目標邊界。
HI=p∑hI(Ip),
hI=−n1log(PI(i)⊗g(i))⊗g(i)
概率分佈PI只能在覆蓋對應區域內計算,而一定不要在覆蓋整個I1和I2圖中計算(否則,遮擋將被忽略,且HI1和HI2將幾乎恆定)。只要把聯合概率分佈中相應的行和列相加,也就是,PI1(i)=∑kPI1,I2(i,k)。互信息的最終定位爲:
MII1,I2=p∑miI1,I2(I1p,I2p)
miI1,I2(i,k)=hI1(i)+hI2(k)−hI1,I2(i,k).
這就引出了MI匹配代價的定義:
CMI(p,d)=−miIb,fD(Im)(Ibp,Imq),
q=ebm(p,d).
剩下的問題是視差圖需要爲了修正Im在mi()能夠被計算前得到。Kim等人提出了一種迭代求解方法,中隨機視差圖開始計算代價CMI。這個代價之後用於圖像的匹配和新視差圖的計算,作爲下一個迭代的基礎。迭代的次數相當少(如例3),因爲,由於像素個數很多,儘管錯誤的視差圖(如,隨機生成)也可以很好的估計概率分佈P。這種解決方案非常適合與圖割等迭代立體算法,但是這將不必要的增加非迭代算法的運行時間。
因爲初始視差的一個粗略估計已經足夠估計P,因此可以在第一次迭代中使用快速相關基礎算法。在這種情況下,只有最後一次迭代纔會使用更精確、更耗時的方法。但是這將涉及實現兩個不同的立體視覺方法。使用單一方法看起來更優雅。
因此,提出了一種分層計算方法,遞歸地使用以半分辨率計算的視差圖像作爲初始視差。如果算法的整體複雜度是O(WHD)(寬×高×視差範圍),然後運行一半分辨率減少比率是23=8。從分辨率爲1\16的隨機視差圖像開始,最初計算三次迭代將會將總體運行時間增加比率爲,
1+231+431+831+31631≈1.14.
因此,分層計算的CMI的理論運行時間只會比CBT慢百分之14,忽略了MI計算和圖像縮放的開銷。值得注意的是,低分辨率下的視差圖像僅用於估計高分辨率下的概率分佈P和計算高分辨率下的代價CMI。其他的一切都是從頭計算的,以避免錯誤從低分辨率傳遞到高分辨率。
分層MI(HMI)計算的實現需要收集所有由初始視差定義的所謂對應(也就是說,從之前的層次級別或一開始隨機的進行放大)。根據對應關係,概率分佈P通過公式(6)進行計算。P的大小是灰度個數的平方,這大小是恆定的(例如,256×256)。後續的操作包括P的高斯卷積和對數的計算。由於P的大小不變,其複雜度取決於所謂對應的集合。因此,O(WH)其中W是圖像的寬度,H是圖像的高度。
2.2 代價聚合
逐像素代價計算通常是模糊的,並且由於噪聲等因素的存在,錯誤匹配能夠很容易得到比正確匹配更小的代價。爲此,增加一個額外的約束,通過懲罰臨近視差的變化來保證平滑。逐像素代價和平滑約束通過定義基於視差D的能量 E(D) :
E(D)=p∑⎝⎛C(p,Dp)+q∈Np∑P1T[∣Dp−Dq∣=1]+q∈Np∑P2T[∣Dp−Dq∣>1]⎠⎞
第一項是對於視差D的所有像素匹配代價之和。第二項添加了一個懲罰函數P1,針對p鄰域Np內的所有像素q,對於視差變化非常小的地方(例如,1個像素)。第三項,添加了一個更大的常數懲罰P2,對於較大的視差變化。採用一個小的懲罰對於小的視差變化能夠適應傾斜或彎曲的表面。常數懲罰對於所有大的變化(也就是說,與它們大大小無關)保持不連續[23]。當灰度發生變化時,不連續往往是可見的。這是利用P2適應灰度梯度來實現的,就是說,在參考圖像Ib內像素q和鄰域內像素p,P2=∣Ibp−Ibq∣P2′。然而,我們需要確保P2≥P1。
立體匹配問題現在能夠被表述爲尋找使能量E(D)最小化的視差圖D。不幸的是,這種全局最小化在二維當中是NP完全問題,對於許多不連續保持的能量[23]。於此相反,在一維情況下,利用DP可以在多項式時間內有效地實現圖像沿某一行的最小化[2],[15]。然而,DP解決方案容易遭受條紋[1],由於在二維圖像中很難將單個圖像行之間的一維優化關聯起來。問題是,在一個方向上非常強的約束,即沿着圖像行,與在另一個方向上沒有約束或弱得多的約束相結合,即沿着圖像列。
這就導致了從各個方向平均聚合匹配代價的新方法。聚合(平滑)代價S(p,d)對於一個像素p和視差d,是通過累加所有一維最小代價路徑中的代價,路徑以在視差d處以像素p爲終點,如圖2所示。這些路徑通過視差空間,作爲直線被投影到參考圖像內,但是作爲非直線映射到對應的待匹配圖像,根據沿路徑的視差變化。值得注意的是,只需要路徑的代價而不需要路徑本身。
代價Lr′沿着在像素p的r方向上在視差d的路徑累加,被遞歸的表示爲:
Lr′(p,d)=C(p,d)+min(Lr′(p−r,d)),Lr′(p−r,d−1)+P1,Lr′(p−r,d+1)+P1,iminLr′(p−r,r)+P2).
逐像素匹配代價C能夠是CBT或者CMI。方程的剩餘部分添加了之前路徑上的像素p−r的最低代價,包括對不連續的適當懲罰。這實現了公式(11)沿着任意的一維路徑。這個代價並不執行可視或排序約束,因爲對於與極限不同的路徑,這兩個概念都不能被實現。因此,該方法比傳統的DP解法更相似與掃描線優化[1]。
L′的值會沿着路徑一直增加,這將導致得到非常大的值。然而,公式(12)能夠被修改通過減去整個項內先前像素的最小路徑代價:
Lr(p,d)=C(p,d)+min(Lr(p−r,d)),Lr(p−r,d−1)+P1,Lr(p−r,d+1)+P1,iminLr(p−r,i)+P2)−iminLr(p−r,k)
這種修改不會改變視差空間的實際路徑,因爲對於像素p的所有視差,減除的值都是常數。因此,最小值的位置不會改變。然而,它的上限可以給出,爲 L≤Cmax+P2。
代價Lr是對所有方向r的路徑進行累加。路徑的數量至少8條並且對於要想很好的覆蓋二維圖像需要16條。在後一種情況下,非水平、垂直或者對角線的路徑的實現方法是先水平或豎直走一步,然後對角線走一步。
S(p,d)=r∑Lr(p,d).
對於16路徑,S上限容易確定爲 S≤16(Cmax+P2)。
一個有效的實現將預先計算逐像素匹配代價C(p,d),如果有必要,在MI值的情況下,通過一個因子s按比例縮小到11位整數值,就是,Cmax<211。縮放到11位保證聚合代價在之後的計算中不會超過11位的限制。所有代價都存儲在一個16位大小爲W×H×D的數組C[]。因此,C[p,d]=sC(p,d)。第二個相同大小的16位整數數組S[]用於存儲聚合代價值。數組初始化爲0。從圖像邊界所有像素b的每個方向r通過Lr(b,d)=C[b,d]開始計算。根據公式(13)沿正向遍歷路徑。對於路徑上每個被訪問的像素p,代價Lr(p,d)被加入到每個視差d的S[b,d]值。
由於前一個像素的最小成本,計算公式(13)在每個像素上需要O(D)步,例如,minkLr(p−r,k),對於像素的所有視差都是常數且能夠被預先計算。每個像素恰好被訪問16次,導致總複雜度爲O(WHD)。規則的結構和簡單的操作,即添加和比較,允許採用基於整數的SIMD2彙編語言指令進行並行計算。
2.3 視差計算
對應參考圖像Ib的視差圖像Db被定義爲局部立體方法通過尋找每一個像素p上對應最小代價的視差d,即,mindS[p,d]。對於亞像素估計,通過鄰域代價擬合出二次曲線,即,在下一個更高和更低的視差,並計算出最小值的位置。使用二次曲線只有在相關使用平方差的和,理論上纔是合理的。然而,由於計算使用它作爲一個近似。這支持快速計算。
視差圖像Dm對應於匹配圖像能夠被決定從相同代價通過遍歷極線對應匹配圖像像素q。再次,選擇視差d,即,mindS[emb(q,d),d]。然而,代價聚合步驟並不對稱地處理參考圖像和匹配圖像。如果Dm是從頭開始計算,可以期望得到稍好一點的結果。也就是說,通過再次執行逐像素匹配和代價聚合,但是Im作爲參考圖像且Ib作爲匹配圖像。這取決於應用程序是否可以接受通過增加運行時間來得到稍微好一點的對象邊界。離羣值從Db和Dm中濾掉通過使用一個3×3的小窗口中值濾波。
Db和Dm的計算,用過執行一致性檢查來確定遮擋和錯誤匹配。每個Db的視差跟與它對應的Dm中的視差相比較。視差被設置爲無效(Dinv)如果都不同:
Dp={Dbp,Dinv,if∣Dbp−Dmq∣≤1,othrewise.
一致性檢查強制執行唯一性約束,只允許一對一的映射。視差計算和一致性檢測需要對每個視差處的每個像素進行一定次數的訪問。因此,這一步驟的複雜度還是O(WHD)。
圖3概述了SGM核心算法包括MI的分層計算的所有處理步驟。
2.4 多基線匹配
該算法可以通過計算參考圖像與所有匹配圖像之間的對應關係的一個組合的像素匹配代價,擴展到多基線匹配。然而,遮擋問題必須在逐像素匹配層面上解決,就是說,在聚合之前,這是非常不穩定的。因此,多基線匹配是通過參考圖像與所有匹配圖像之間的逐對匹配來實現的。一致性檢測(2.3節)是在成對匹配後使用的,用於消除遮擋處的錯誤匹配和其他多種不匹配。最後,視差圖的結果融合通過考慮單個尺度。
視差Dk是參考圖像Ib與匹配圖像Imk的匹配結果。根據一些係數tk,對圖像Dk的視差進行了不同的縮放。如果所有圖像都相互校正,這個係數與Ib和Imk之間基線的長度是線性的,也就是說,如果所有的圖像都被投影到一個與所有光學中心距離相同的平面上。由此,差異標準化爲tkDkp。
視差值的融合是通過計算加權平均視差,其中用tk作爲權重。可能的離羣值被丟棄,通過考慮那些某一像素所有像素視差中值附近一個像素範圍內的視差。
Dp=∑k∈Vptk∑k∈VpDkp,
Vp={k∣∣∣∣∣tkDkp−mediiiDip≤tk1∣∣∣∣},
這種解決方法由於中值增強了魯棒性,同時由於加權平均而提高了準確性。此外,如果有足夠的待匹配圖像可用,則可以強制設置Vp的最小值,以增加由此殘生的差異的可靠性。不符合條件的像素被設置爲無效。如果基於互信息進行多層計算,則在每個層次內對所提出的視差圖像進行融合,以計算下一層次的視差圖。
一種方法是將參考圖像與所有k個匹配圖像成對匹配,並通過訪問每個像素將他們結合起來。因此,所有必要步驟的整體複雜性對於多基線匹配是O(KWHD),這裏K是待匹配圖像的個數。