1. 程式人生 > >圖形分割演算法最小割最大流網路流問題

圖形分割演算法最小割最大流網路流問題

最近研究圖形分割演算法,然後就牽扯出了網路流問題中的最大流最小割問題。

反過來學習才是最好的掌握和理解路線:

第一、什麼是網路流問題?

圖中的淺藍色數字,是實際走的流量,並且構成源點到終點的最大流量。

源節點1到節點4為什麼不是7?

因為從節點4流出的水流,加起來才5! 換句話說,到節點4就流不過去這麼多了。

至於為何是4,而不是5,同樣道理,因為節點3到節點6的容量有限制!

分析到這裡大家可能發現了,即使不按照圖中淺藍色數字分配,也可以找到其他水流分配路徑,使最大水流量達到10。但沒有比10更高的了。

第二、最大流、最小割

上圖網路流就是求解最大流的一個例項。10就是求解的最大流。由此,可以引出最大流的一些基本的定義和概念

可以這樣看,圖就是一種管道,管道有最大通過流量的限制,圖中邊的權值就是所謂的“容量”。同時,注意有唯一的源點和匯點。

這裡需要注意容量和流量的區別。其中f(u,v)的範圍需要額外注意,是 0<= f(u,v) <= c(u,v),不會出現所謂的負流量。下圖是對可行流的圖示

有了可行流,我們還需要求最大流

解決最大流問題的常用到Ford-Fulkerson方法,之所以稱其方法而不是演算法,是因為在這種思想下包含著若干種時間複雜度不同的實現。

最小割

就是從圖G(V,E)中去除一些邊,使得圖G中源點S到終點T不連通。如果去除的這些邊的權和最小,就是最小割。這個權和可以證明等於網路的最大流量!(很明顯在上圖2中,如果切除邊2->4、3->5,就是一個最小割,兩條邊的權和為7=最大流量7。)

因此  最大流等價於最小割!!!  求解最大流問題,也可以轉化為最小割。

求最大流和求最小割集是兩類不同的演算法。

求解最小割集普遍採用Stoer-Wagner演算法


第三、圖形分割演算法(基於圖論的方法)

圖形切割演算法通過向圖G(V,E)新增S點和T點,將圖中所有的頂點,與S和T建立邊,並根據能量約束方程賦予邊權值。就將圖形分割與最小割問題相關聯!

最後,最小割將圖G分為兩部分,圖中所有頂點分別被劃分到兩個集合S-node、T-node中。此即圖形分割!


Graph cuts是一種十分有用和流行的能量優化演算法,在計算機視覺領域普遍應用於前背景分割(Image segmentation

)、立體視覺(stereo vision)、摳圖(Image matting)等。

       首先用一個無向圖G=<VE>表示要分割的影象,VE分別是頂點(vertex)和邊(edge)的集合。此處的Graph和普通的Graph稍有不同。而Graph Cuts圖是在普通圖的基礎上多了2個頂點,這2個頂點分別用符號”S”和”T”表示,統稱為終端頂點。其它所有的頂點都必須和這2個頂點相連形成邊集合中的一部分。所以Graph Cuts中有兩種頂點,也有兩種邊。

第一種頂點和邊是:第一種普通頂點對應於影象中的每個畫素。每兩個鄰域頂點(對應於影象中每兩個鄰域畫素)的連線就是一條邊。這種邊也叫n-links

第二種頂點和邊是:除影象畫素外,還有另外兩個終端頂點,叫Ssource:源點,取源頭之意)和Tsink:匯點,取匯聚之意)。每個普通頂點和這2個終端頂點之間都有連線,組成第二種邊。這種邊也叫t-links

最小割問題:就是從圖G(V,E)中去除一些邊,使得圖G中源點S到終點T不連通。如果去除的這些邊的權和最小,就是最小割。這個權和可以證明等於網路的最大流量!(很明顯在上圖2中,如果切除邊2->4、3->5,就是一個最小割,兩條邊的權和為7。)

參考的連結:

網路流問題:

http://wenku.baidu.com/view/7ed3c241a8956bec0975e32b.html
http://www.cnblogs.com/ShaneZhang/p/3755479.html

最大流/最小割演算法總結:http://blog.csdn.net/euler1983/article/details/5954650
影象分割:

http://blog.csdn.net/zouxy09/article/details/8532111


最小割問題:就是從圖G(V,E)中去除一些邊,使得圖G中源點S到終點T不連通。如果去除的這些邊的權和最小,就是最小割。這個權和可以證明等於網路的最大流量!(很明顯在上圖2中,如果切除邊2->4、3->5,就是一個最小割,兩條邊的權和為7。)