1. 程式人生 > >經典圖割演算法中圖的構建及實現:one-Cut

經典圖割演算法中圖的構建及實現:one-Cut

經典圖割演算法中圖的構建及實現之one-cut-1

本文目的:

講解目前典型的3種圖割演算法:graph-cut、grab-but、one-cut。本文主要講解one-cut的方法在應用時,準則函式與圖構建關係,如何構建圖,以及如何程式碼實現圖的構建。圖割的原理網上文章和論文已介紹比較詳細,不再詳細介紹。One-cut的人工干預影象分割演算法有2種形式:人工設定正負種子點(graph-cut的方式);人工設定背景區(grab-cut畫框的方式)

  • one-cut思想

one-cut最主要的改進在於將原始圖割的先驗懲罰項進行了修改。使用全圖的前景與背景直方圖的L1距離表示先驗懲罰項。作者表示該修改能提升效能,並且解決了grab-cut的畫框方式中NP難的問題。在grab-cut中需要用EM演算法迭代,其不一定能求解到全域性最優解,而one-cut可以直接求解到準則函式的最優解。該篇文章介紹選擇正負種子點的one-cut演算法,設定背景區方式(bounding-box)的one-cut在下一篇介紹。

  • 準則函式

                                     

準則函式如上,相比graph-cut,先驗項有所不同。此處直接使用直方圖的L1距離為懲罰項。作者的論文中有相關相應的對比實驗,說明該方法的優勢。

       我們可以看到有如下關係成立:

                                                      \begin{array}{l} E({\theta ^S},{\theta ^{\bar S}}) = - {\left\| {{\theta ^S} - {\theta ^{\bar S}}} \right\|_{L1}}\\ = \sum\limits_{k = 1}^K {\min (n_k^S,n_k^{\bar S})} - \frac{{|\Omega |}}{2} \end{array}

       K表示直方圖bin數量,n_k^S,n_k^{\bar S}表示正負類各自在直方圖第K個bin中的數量,\Omega為全集。

  • 圖的建立

1.術語:

  1. 與S和T連結的邊叫t-link(紅線與綠線),領域之間的連結邊叫n-link(黑線),與輔節點相連的a-link(黃線)。其中紅線進一步稱為s-t-link,綠線進一步稱為t-t-link,僅有種子點(紅色為正種子點、綠色為負種子點)才存在t-link。
  2. 黃色點表示的是輔節點,該節點的用處是構造R(A)項,有多少個直方圖Bin就有多少個輔節點。屬於同一bin的畫素點連線向同一個輔節點。
  3. 黑線的權值對應的是B(A)項,黃線的權值對應的是R(A)項,而紅線和綠線對應的種子點硬約束項。
  4. 權值用w表示。
  5. 藍色節點表示類別標誌節點,S表示正類類標節點,T表示負類類標節點。

       最終通過求最小割之後,與節點S相連的所有紅色、白色節點(影象畫素點)屬於一類,同理與節點T相連的所有綠色、白色節點屬於另一類。兩類被最小割割開,割值即是準則函式值。

2.圖的建立

       拿到待分割的影象後,圖的節點與邊已確定,即圖的形狀已確定下來。僅僅需要做的就是給圖中所有邊賦相應的權值,如下圖所示。

       圖中的邊有3種情況:種子點的t-link;每個畫素點對應的a-link;畫素領域關係的n-link。接下來將說明每一種邊的權值取值。

1).種子點t-link權值:種子點認為是硬約束,其使用者預設2類種子點後,種子點類別不會隨分割演算法而改變。

a.對於正類別種子點,s-t-link必須保留,t-t-link必須割去。工程中,通過將s-t-link權值設定為超級大值,t-t-link設定為0。保證一定僅僅割去t-t-link,否則一定不是最小割,因為當前w(s-t-link)權值是超級大值,割去這條邊的代價一定是最大的。

b.反之同理。

2).a-link權值:原始影象確定後其顏色直方圖即確定。將所有畫素點按照其顏色值所屬建立與對應顏色Bin節點的連線。為撒該節點的權值對應R(A)項,請各位讀者自己任意取一個分割看看,其中常數項 直接去掉,因為其不影響最值。

3).n-link權值:n-link用於度量相鄰畫素點之間顏色的差異性。設一對相鄰點Pi,Pj,則n-link(Pi-Pj)的權值w等於:

         其中,dist()是距離函式,表示點之間的影象距離。即4領域下,所以領域點距離均為1;8領域下,對角畫素點距離為 ;在5*5領域下,對角畫素點距離為 。

         設種子點的超級大值是1000, =1,K=4(灰度空間0-255被分割成4個Bin), , 。影象是3*2的灰度圖,數字表示灰度值,紅色和藍色節點表示使用者選擇的正負種子點。

圖3 圖的建立

       如上圖所示,將所有邊的權值賦值後,圖就建立完畢。剩餘則直接運用最小割演算法即可求解。最小割演算法有很多,包括graph-cut作者提出的快速演算法An Experimental Comparison of Min-Cut/Max-Flow Algorithms for Energy Minimization in Vision。Opencv即採用該演算法計算最小割。