第2回「コンピュータビジョン最先端
     ガイド」勉強会
       5.1-5.2章
    presented by takmin
5. グラフカットによる大域最小化
• この章の目的
 – データ項+平滑化項で表される以下のエネル
   ギーを最小切断アルゴリズムを使って,最小化す
   る


E( X )   gv ( X v )      h        ...
この章の流れ
• 2値の場合
 – 5.1 2値の大域最小化
 – 5.2 実装例
• 大域最小解を持つための辺の重みの決め方
 – 5.3 劣モジュラ条件
 – 5.4 劣モジュラでないとき:QPBO
• 多値の場合
 – 5.5 多値の大域...
5.1 2値の大域最小化
  E( X )   gv ( X v )      h         uv   (Xu, Xv)
           vV              ( u ,v )E



 このエネルギーの大域最...
グラフの構築
       E( X )   gv ( X v )      h         uv   (Xu, Xv)
                vV              ( u ,v )E

頂点を設定: V1 ...
グラフの構築
    E( X )   gv ( X v )          h         uv   (Xu, Xv)
             vV                  ( u ,v )E

頂点s,tを追加...
グラフの構築
          E( X )   gv ( X v )               h      uv   (Xu, Xv)
                      vV                 ( u ...
グラフの構築
        E( X )   gv ( X v )           h       uv   (Xu, Xv)
                    vV              ( u ,v )E

辺を...
グラフの切断
         E( X )   gv ( X v )           h         uv   (Xu, Xv)
                     vV                ( u ,v )...
グラフの切断
              E( X )   gv ( X v )                     h         uv   (Xu, Xv)
                                v...
グラフの切断
       E( X )   gv ( X v )      h         uv   (Xu, Xv)
                   vV           ( u ,v )E

切断されたsからtへ...
ノイズ除去の例
                                                 
         E ( X )    Yv  X v                    Xu  Xv   ...
ノイズ除去の例
                                                                    
             E ( X )    Yv  X v        ...
ノイズ除去の例
                                                         
     E ( X )    Yv  X v                          ...
2次元の場合
2次元の場合
3次元の場合
5.2 実装例
• GCライブラリ入手先
 – Vladimir Kolmogorovさんのページ
 – http://www.cs.ucl.ac.uk/staff/V.Kolmogorov/
 – Max Flowライブラリをダウンロード
ライブラリ入手先
Vladimir Kolmogorovさんのページ




        http://www.cs.ucl.ac.uk/staff/V.Kolmogorov/
ソース
void NR2(unsigned char* X, unsigned char* Y, int m, int n)
{
                typedef Graph<int,int,int> GraphType;
   ...
手順
1. GraphTypeインスタンス生成
 – GraphType* g = new GraphType(n*m, n*m*4);
                                               頂点の   ...
手順
4. 頂点間の辺を作成(双方向)
 – g->add_edge (j*n+i, y*n+x, kappa, kappa);
                   wu    wv    c(wu, wv)   c(wv, wu)


5....
結果
最後に
• 図は,石川先生の講演資料から拝借しました。
 – http://w01.tp1.jp/~a031464501/indexJ.html
Upcoming SlideShare
Loading in...5
×

Graph cut5.1 5.2_takmin

3,971

Published on

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,971
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
33
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Graph cut5.1 5.2_takmin

  1. 1. 第2回「コンピュータビジョン最先端 ガイド」勉強会 5.1-5.2章 presented by takmin
  2. 2. 5. グラフカットによる大域最小化 • この章の目的 – データ項+平滑化項で表される以下のエネル ギーを最小切断アルゴリズムを使って,最小化す る E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E
  3. 3. この章の流れ • 2値の場合 – 5.1 2値の大域最小化 – 5.2 実装例 • 大域最小解を持つための辺の重みの決め方 – 5.3 劣モジュラ条件 – 5.4 劣モジュラでないとき:QPBO • 多値の場合 – 5.5 多値の大域最小化 – 5.6 実装例 – 5.7 一般の凸な平滑化項
  4. 4. 5.1 2値の大域最小化 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E このエネルギーの大域最小化を行う 問題をグラフで表し,最小切断問題として解く
  5. 5. グラフの構築 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E 頂点を設定: V1  wv | v  V  wv
  6. 6. グラフの構築 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E 頂点s,tを追加: V  V1  s, t t S
  7. 7. グラフの構築 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E 辺を追加:  1  ( s, wv ), ( wv , t ) | v  V  t S
  8. 8. グラフの構築 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E 辺を追加:  2  ( wu , wv ) | (u, v)  E t 完成! S
  9. 9. グラフの切断 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E このグラフの任意の切断(S,T)について: 0  v  Sのとき (w ) Xv   t 1  v  Tのとき (w ) 0 1 0 0 1 1 wv wu S
  10. 10. グラフの切断 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E 各辺の切断コストを定義: c( wv , t )  g v (0) t c( wu , wv )  huv (0,1)  hvu (1,0) wv wu c( s, wv )  g v (1) S
  11. 11. グラフの切断 E( X )   gv ( X v )  h uv (Xu, Xv) vV ( u ,v )E 切断されたsからtへ向かう辺の切断コストの和とEは等しい t 0 1 0 0 1 1 S
  12. 12. ノイズ除去の例  E ( X )    Yv  X v   Xu  Xv (2) vV ( u ,v )E 2 エネルギーを計算する    E (X )  (0    0  0  0  0)   0  1  1  0  2 2     Yv Xv
  13. 13. ノイズ除去の例  E ( X )    Yv  X v   Xu  Xv (2) vV ( u ,v )E 2 グラフカットで切断コストを計算する c( s, wv )   Yv  1 t c( wv , t )   Yv  0 c( wu , wv )   0 λ λ 0 0 λ κ κ κ κ κ Yv κ κ κ κ κ λ 0 λ λ 0 0 S
  14. 14. ノイズ除去の例  E ( X )    Yv  X v   Xu  Xv (2) vV ( u ,v )E 2 E(X )  0    0  0    0  0     t 0 λ λ 0 0 λ κ κ κ κ κ Yv κ κ κ κ κ λ 0 λ λ 0 0 S
  15. 15. 2次元の場合
  16. 16. 2次元の場合
  17. 17. 3次元の場合
  18. 18. 5.2 実装例 • GCライブラリ入手先 – Vladimir Kolmogorovさんのページ – http://www.cs.ucl.ac.uk/staff/V.Kolmogorov/ – Max Flowライブラリをダウンロード
  19. 19. ライブラリ入手先 Vladimir Kolmogorovさんのページ http://www.cs.ucl.ac.uk/staff/V.Kolmogorov/
  20. 20. ソース void NR2(unsigned char* X, unsigned char* Y, int m, int n) { typedef Graph<int,int,int> GraphType; int lambda=100; int kappa = 25; GraphType* g = new GraphType(n*m, 4*n*m); // 頂点と辺の概数 g->add_node(n*m); // 画素の数だけ頂点を作る int dx[4] = {1,-1,0,1}; int dy[4] = {0, 1, 1, 1}; for(int j=0; j<m; j++){ for(int i=0; i<n; i++){ int g0 = *(Y + n*j + i) * lambda; //g(0) int g1 = (1-*(Y + n*j + i)) * lambda; // g(1) g->add_tweights(j*n+i,g1,g0); // (i,j)の頂点はnj+i番目 for(int d=0; d<4; d++){ int x = i + dx[d]; int y = j + dy[d]; if(0<=x && 0<=y && x<n && y<m){ g->add_edge(j*n+i,y*n+x,kappa,kappa); // 両方向 } } } } g->maxflow(); for(int j=0; j<m; j++){ for(int i=0; i<n; i++){ if(g->what_segment(j*n+i)==GraphType::SOURCE) *(X + n*j + i)=0; else *(X + n*j + i)=1; } } delete g; }
  21. 21. 手順 1. GraphTypeインスタンス生成 – GraphType* g = new GraphType(n*m, n*m*4); 頂点の 辺の概数 概数 2. 画素の数だけ頂点を作る – g->add_node(n*m); 3. データ項(=C(s, wv),C(wv,t))を設定 – g->add_tweights(j*n+i, g1, g0) wu c(s, wv) c(wv, t)
  22. 22. 手順 4. 頂点間の辺を作成(双方向) – g->add_edge (j*n+i, y*n+x, kappa, kappa); wu wv c(wu, wv) c(wv, wu) 5. 最小切断(最大流)を求める – g->maxflow(); 6. 各頂点でs,tのどちらが切断されたかを結果 に格納 – g->what_segment(j*n+i)
  23. 23. 結果
  24. 24. 最後に • 図は,石川先生の講演資料から拝借しました。 – http://w01.tp1.jp/~a031464501/indexJ.html
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×