1. 算法思想
本文的算法思想,是放棄原有的基於支持窗口的方式,採用基於全局MST的方式,構建代價聚合公式。MST,採用像素之間顏色信息作爲“邊權值”,以全圖的像素作爲結點,構建過程中不斷刪除權值較大的邊,然後用克魯斯卡爾或者普里姆算法進行計算,求得最小生成樹(MST),就得到了全圖像素之間的關係。
因爲支持窗口的辦法,本質上只考慮了窗口內像素對中心像素的影響,窗口之外的像素的影響徹底忽略,其實想想看,這樣做也沒有什麼不妥,但是它並不適用一些場合,比如文獻列舉的圖像,
左上角的圖像就是原始灰度圖像,這個時候我們就會發現,這幅圖像中像素與像素之間的關係用支持窗口來處理明顯不靈,比如說周圍框狀區域的任何一個像素,肯定與框狀區域內部的像素的深度信息一致,而與中間區域的像素不同。或者說,如果單考慮顏色信息,紅框內的像素關係最大,如何表徵這樣的關係就是一個問題。很遺憾,我們不能事先提取出這樣的區域,因爲圖像分割真的很耗時,並且不穩定,這就是作者的牛逼之處,他想到了MST可以表示這種像素關係,於是採用像素之間顏色信息作爲“邊權值”,進一步構建MST。
這裏還要仔細說一下,這幾幅圖代表的其實是全圖像素點對(0,0)點的權值大小,大家可以看一下論文裏面BF的公式,也就是b、c兩幅圖,文章把參數看成了窗口的大小標誌,如果參數足夠大,其實exp裏面的值就是0,空間信息的作用完全消失,這個時候就要看像素顏色差的作用了,我想這一點給作者一個提示,那就是BF中空間信息的考慮可能是多餘的!!!於是作者只利用顏色差信息來構建MST。
MST指的是最小生成數,全稱是最小權重生成樹。它以全圖的像素作爲節點,構建過程中不斷刪除權值較大的邊。注意,是全圖所有的像素,然後採用kruskal(克魯斯卡爾)算法或prim(普里姆)算法進行計算。這樣便得到了全圖像素之間的關係。然後基於這層關係,構建代價聚合,這便是文章標題Non-Local Cost Aggregation的由來。
通過MST計算權值的效果如上圖第二行所示,紅色代表高權值,藍色代表低權值。明顯發現MST有效的表徵了像素對像素的影響。代價聚合公式如下所示,具體的符號含義,這裏就不說了,相信做過立體匹配的童鞋一眼就會看明白。
2. 算法核心
2.1 leaf-to-root
假設上圖是一個MST,邊上的數值代表權重,此時如果計算的是V4的代價聚合,那麼很容易,直接計算子節點(V3, V4)的代價聚合值與各自邊緣的乘積集合,因爲V4是根節點,不需要考慮父節點的影響。公式如下所示,
箭頭向上代表從葉子到當前節點的代價聚合值,爲何只需要考慮子節點,而不考慮孫子節點,重孫子節點等等的原因就是由於在我們實際計算的時候,要從葉子節點一層一層往上算,這樣就會利用樹的特性,子節點的代價聚合值已經包含了孫子節點等等對我自己的影響。有點一本萬利的感覺。。。
2.2 root-to-leaf
2.3 時間複雜度
3. 實驗效果&結論
附上作者對於算法核心部分的PPT文檔的下載地址,作者詳細圖解了算法的每一步,很詳細。