Graph Cut

以 Max-flow Min-cut 為延伸

專題動機及目標

Max-flow Min-cut

The Network Flow Problem

想像水流以穩定的速度從左邊流向右邊

每一個管子會流過多少的水流?

演算法的目的即是為了找出兩點間最大流量

Max-flow

  • 從 S 到 T 的流量為最大量,則稱為 Max-flow
  • 條件限制
    • 流量守恆:流入的量必須大於等於流出的量
    • 容量限制:流量必小於等於容量
    • 斜對稱:流過去的量必等於流回來的量

Min-cut

  • Cut 是一條邊,將一張圖切成兩邊不相交的圖
  • 在許多條 Cut 的裡面,總容量最小的這稱為Min-cut

Max-flow Min-cut

  • 目前有兩種演算法
  • Ford-Fulkerson
    • 隨意地找出一條增廣路徑,找出後修正殘餘流量直到找不出增廣路徑為止
  • Edmonds-Karps
    • Ford-Fulkerson 的改進
    • 利用廣度優先搜尋(BFS)來搜尋增廣路徑

Weight

權重

表達的方式

  •  代表一個被劃紅線的點

    • 這是要的(左鍵)

  •  代表一個被劃藍線的點

    • 這是不要的(右鍵)

  • O 這是一般還沒決定前景後景的

OO

OOO

OO

被劃紅線的

                  T

                  |

                  0

                  |

O-weight-Ⓡ-weight-O

                  |

                  1

                  |

                  S

 

被劃藍線的

                  T

                  |

                  1

                  |

O-weight-Ⓑ-weight-O

                  |

                  0

                  |

                  S

 

公式

  • N 相鄰
  •  正比
  • exp 為 指數分配
  • dist 為 1 (上下左右)
  • I  亮度(灰階)
  • σ 標準差

根據

公式

根據

  • λ值為可調
  • ln 自然對數
  • Pr(Ip|O)

公式

  • q:{p, q} => q / {p, q}
    • p, q 相鄰
  • N 鄰近的點
  • K 為 1 + (p 週邊權重相加)

根據

程式

原公式

修改後

使用者畫的紅點 = R
使用者畫的藍點 = B

Rp(“obj”) = max((|IR-Ip|/dist(R, p))/255)

Rp(“bkg”) = max((|IB-Ip|/dist(B, p))/255)

實際測試

滑鼠狀態顯示

測試滑鼠的區域

讀取圖片並畫圖的測試

Max-flow Min-cut的測試

結合測試

實際結果

DEMO

未來展望

若是將速度加速到可以把程式放入到影像上面,而不讓使用者感受到很嚴重的延遲,也許能夠實用在視訊通話或是攝影當中,使人能夠隨意的選擇自己的背景。但這首先要克服的是程式執行效率。光要解決這問題,而要達到這目的應該還有一段距離。

專題分工

graphcut

By Huei-Jhen Jhuang

graphcut

  • 916