OPenMVS學習筆記(二)之深度圖計算


  • 深度圖計算(DenseReconstructionEstimate

    • SGM/tSGM(Semi-Global Matching)計算視差圖

      • 參考文獻:【1】Stereo Processing by Semi-global Matching and Mutual Information.【2】SURE: Photogrammetric Surface Reconstruction From Imagery.

 

      • 代碼框架:

      • 原理介紹:

        • 立體匹配算法介紹(基於區域和基於像素點,基於單個點的匹配計算會產生很多 噪聲)

          • a.全局立體匹配算法:全局立體匹配算法主要是采用了全局的優化理論方法估計視差,建立全局能量函數,通過最小化全局能量函數得到最優視差值。通過二維相鄰像素視差之間的約束(如平滑性約束)而得到更好的匹配效果,但是對內存占用量大,速度慢不適合實時運行。主要算法有圖割(graph cuts),信念傳播(belief propagation),動態規划等算法。(用到全圖所有像素的與該像素的相關性)|I_R(x,y)-I_r(x+d,y)|用灰度值的差的絕對值表示相似性。

 

          • b.局部立體匹配算法:主要是采用局部優化方法進行視差值估計,局部立體匹配算法有SAD,SSD等算法,與全局立體匹配算法一樣,也是通過能量最小化方法進行視差估計,但是在能量函數中,只有數據項,而沒有平滑項。該算法每個像素計算互不干擾可以並行計算,所以可以實時。但由於所基於的局部窗口視差相同的假設在很多情況下並不成立導致匹配效果較差。(只用到該像素相鄰局部的像素的相關性)。

 

          • c.半全局立體匹配算法SGM:綜合上述局部和全局算法的優缺點,半全局算法依舊采用全局框架,但是在計算能量函數最小化的步驟時使用高效率的一維路徑聚合方法來代替全局算法中的二維最小化算法,使用一維最優來近似二維最優,得到的視差圖在效果上和全局算法沒有太大的差別,但是算法效率卻有非常大的提升
        • SGM算法詳細介紹

          • 匹配代價計算:文獻[1]中SGM的代價計算是基於互信息(Mutual Information,MI)的匹配測度計算算法來計算匹配代價,互信息是一種對影像明暗變化不敏感的相關性測度。但由於原理復雜且計算需要迭代效率比較低,在實際應用中,更簡單有效的方法如Census變換,故在此不介紹MI。

          • Census變換:

 

            • 1.使用像素鄰域內的局部灰度差異將像素灰度轉換為比特串即為census值。(小於中心值的灰度值置1,大於中心灰度值的置0,組成比特串時按行序,中心值不計入)
            • 2.基於Census變換的匹配代價計算方法是計算左右影像對應的兩個像素的Census變換值的漢明(Hamming)距離(兩個比特串的對應位不相同的數量:先進行異或運算(相同為0,相異為1),再統計運算結果中1的個數)大於中心像素的置為0,小於中心像素的置為1.

          • 代價聚合

 

            • 采用全局立體匹配算法,即找到每個像素的最優視差使得整體能量最小。能量方程如下:
            • 這是一個二維優化問題,為了提高優化效率,SGM將問題轉化為使用以為路徑聚合的方式來近似二維最優,提高效率的同時也保證了效果。懲罰項屬於平滑操作。P_2遠大於P_1.
            • 式中,C為匹配代價,第二項和第三項是平滑項,我們期望的是視差是連續的。所以如果當前像素x_b與領域像素x_N視差相差比較小(1個像素)我們會給一個比較小的懲罰P_1,如果大於一個像素則給一個大的懲罰P_2但是實際場景中肯定會有一些視差不連續區域相差比較大(比如:前景和背景)如圖示:
            • 思考:為什么這樣調整第二個懲罰項?

 

              • 如果像素和它的鄰域像素亮度差很大,那么該像素很可能是位於視差非連續區域,則一定程度上允許其和鄰域像素的視差差值超過1個像素,對於超過1個像素的懲罰力度就適當減少一點。

 

            • 具體求解過程中,SGM路徑代價聚合的思路:
              • 將像素所有視差下的匹配代價進行像素周圍所有路徑上的一維聚合得到路徑下的路徑代價值,然后將所有路徑代價值相加得到該像素聚合后的匹配代價值。
            • 視差計算
              • 代價聚合后,每個像素直接找聚合代價最小對應的視差值就是我們所要求的視差值。
            • 視差優化
              • 視察一致性檢查將左右圖互換,得到R-L視差圖。與L-R視差圖對比,根據左圖的視差找到在右圖中的對應視差,如果兩者小於閾值則認為是准確的,反之是錯的把該值剔除。如下圖:(以左圖為准算一張視差圖,以右圖為准算一張視差圖)
              • 亞像素計算:上述計算的視差圖是像素級別的,在實際使用中精度是無法滿足要求的。SGM通過在上述計算的最小代價的視差層附近進行插值找到亞像素級的精度。如下圖:
            • tSGM

 

              • 與SGM的區別主要是在代價聚合的時候:
                • 1.使用金字塔圖像計算視差(由粗糙到精細即從低分辨率到高分辨率計算匹配代價
                • 2.每個像素的視差范圍都不同只在真值附近搜索大大減少了搜索范圍和內存占用,如下圖:
                • 每個像素的視差范圍計算方法:如果當前像素的視差值d(x)無效,在搜索窗口win=31,反之win=7以當前像素為中心,窗口大小win搜索所有有效視差存儲在disps中,disps的大小是numdisp,中值是disp,最大值max,最小值min
                • 3.代價聚合時,SGM由於每個像素是差范圍都一樣,所以各個搜索路徑都有對應的視差,tSGM由於每個像素視差范圍不一樣有的可能都沒有重疊范圍,所以之前的代價聚合計算方法需要調整,把沒有重合的情況考慮進去。


免責聲明!

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



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