對SGM中主要算法的理解

上一篇主要講了雙目立體視覺中的對極約束和深度計算,我們知道解決深度問題,關鍵就是找到視差(disparity)。本篇還是我在之前group meeting上分享的,主要涉及Stereo Processing by Semiglobal Matching and Mutual Information by Heikoin 2008 IEEE論文中對MI(mutual information)和DP(dynamic programming)的理解。希望有興趣的童鞋能不吝賜教害羞

首先回顧一下,立體視覺匹配的一般過程:

step

簡單闡述一下:確定用什麼來衡量matching cost,有很多思路,比如SSD/SAD是比較普遍(簡單)的,用一個移動窗口掃描式的檢測窗內每組點的像素差的絕對值,它們求和得到此窗口的matching cost。然後通過一種算法來找到最佳匹配點路線,使得cost aggregation的error最低。我們找到匹配路線之後就可以計算視差了,之前兩步僅僅在單方向(比如從左到右)考慮的,可能會導致視差圖拖尾效應,一些更完善,降低算法誤差的方法可以被使用。最後爲了提高圖像處理精度,也可以考慮對灰度圖亞像素化。

Heikoin的論文中涉及到的上述過程,我暫時只學習了前三步,希望分享的內容能幫到大家微笑

對論文標題的解讀:半全局的意思是並沒有使用參考圖像的所有像素點而是部分像素點,這應該是比較合理的,畢竟還有類似於像素點遮擋(在目標圖像對應位置消失)的情況。衡量matching cost的是互信息(MI),還可以用於圖像檢測等。而動態規劃算法可以在對極約束的條件下根據參考圖像中的所選興趣點(這裏興趣點可能不是角點檢測出來的點,主要是排除overlapping的情況)找到最佳匹配路線。

OK,我們先來看看MI的原理和應用吧!

MI_function

   

I1是參考視點的成像圖Ib,I2是目標視點的成像圖Im經過初始視差圖D(可以用隨機方式)計算得到,這樣是爲了兩幅圖在之後計算指定位置灰度互信息時能夠儘量逼近,不斷迭代算法能夠收斂。H代表I圖像的信息熵,信息熵是度量信息不確定性的,也就是說變量所包含的信息量多少。假設我們知道聯合信息熵的表達式,其中的概率可以同圖像的聯合灰度直方圖聯繫起來理解

function h = Jointh_My(image1,image2)
%   JOINTH_MY    統計圖像image1和image2的聯合灰度直方圖
[rows,cols] = size(image1);
h = zeros(256,256);
for k = 1:rows
    for l = 1:cols
        h(image1(k,l)+1,image2(k,l)+1) = h(image1(k,l)+1,image2(k,l)+1)+1; % 更新聯合直方圖
    end
end




這樣利用二維矩陣h就可以統計兩幅圖像的聯合信息熵。但是如前所述論文中並不是把所有像素點都遍歷了,而只選擇很多(n個)像素點,我們可以對每個P點計算h

MI_function

與高斯核函數進行卷積在這裏起到平滑的作用(給大家推薦一個有趣理解卷積運算的帖子 還有一個講解關於處理平滑的核函數的筆記)。概率P是對所有的corresponding points(假設有n個)構成灰度值對的統計,可以用聯合直方圖計算。如果兩個圖像匹配得越好,計算得H就會非常小,加負號後就是非常大,也就是互信息會越大。

等號右邊前兩個H分別是對I1和I2而言,可以由之前聯合分佈直方圖快速求到。至於爲什麼加上他們的原因,結合論文中的闡述,我認爲忽略遮擋情況(可以在選點階段避免)某幅圖像的像素點P的信息熵,代表了這個點的灰度值在圖中信息量的多少,HI越大,說明越信息量越多,越有價值。

綜上,圖像I1和I2的匹配點互信息計算如下:

MI

MI的應用就分析到這裏,接下來說一下DP(dynamic programming)在論文中的作用。通過利用MI計算的某個像素點P的matching cost可以如下表示:

        MI

其中q是滿足對極約束的在Im圖像中的點,d是通過初始視差圖D的數據。想在2D的圖像找到使得cost aggregation 最小的視差圖是個NP-hard的問題,那麼單獨在某方向r上(比如從左到右,從右到左等)選擇匹配點的路徑使得cost aggregation 最小(即最終L最小),該問題就變成多項式時間內可以解決的。我們採用具有全局性質的動態規劃算法,如下狀態轉移方程大家應該不陌生了:

DP

P1是對物體不平整表面的適應,P2是對灰度不連續(可能是多個物體)的適應,這樣可以起到平滑視差圖的效果。最後一項減去r方向在前一個像素點的L,添加這一項並不會改變最終視差圖結果,只是爲了限制L(不斷增長至極大值)的規模。

整個DP過程可以看做如下空間的搜索,x,y分別是參考圖像的xy座標,d是某像素點可能的視差。

                         DP

但是我們提到過單獨從一個方向來計算的L會使視差圖產生長尾效應,比如

      

那麼對cost aggregation,之前單方向的L可以用多方向的S來代替

                                             DP

DP的應用就分析到這裏,現在可以理一理算法流程圖了得意

   Flowdiagram

Ib是參考圖像(base image),Im是待匹配的圖像(matching image),第一次迭代的初始視差圖Dinit可以隨機產生。我們首先選擇在Ib中的n個點,使他們儘量避免在兩幅圖的遮擋情況,然後找到Im中的對應位置通過Dinit變換後的n個點,按照立體視覺視差的計算步驟——matching cost,cost aggregation,disparity computation完成一次迭代,再把本次計算得到的視差圖作爲下一次的初始視差圖進入下一輪迭代。

驚訝有兩點還需要解釋:在C階段,作者交換“主”“客”位置,可以得到兩個視差圖Db和Dm,然後用一致性檢測保證一對一的映射,否則該點作爲黑點(255)。

                                                  consistent constrain

其次,爲了縮短迭代的時間,作者採用了層次計算matching cost(MI)的方法。Dinit和Ib,Im可以通過三次分辨率爲原圖的1/16(scale factor)來迭代得到,之後依次改爲1/8,1/4、1/2的分辨率則迭代結束,Run time 比用BT(openCV中使用此方法)計算matching cost只多出14%。流程圖中Down scale 和 Up scale 保證了圖像在輸入輸出的大小不變。

                                              

由於我的才疏學淺,論文暫時就理解到這裏,希望有興趣的同學留言探討!






發佈了28 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章