您的位置:首页 > 其它

最小割与最大流(mincut & maxflow)

2015-11-30 19:33 330 查看
这里先介绍mincutmaxflow,为介绍Grabcut打下基础。Grabcut可以用在图像分割和文字二值化中。

1
首先介绍Mincut问题
这部分内容主要翻译自[1],可以看原版理解的更深.由于个人没有看过中文教材,因此可能一些专业术语翻译的不太对,敬请见谅。
一个有向图,并有一个源顶点(source vertex)和目标顶点(target
vertex).边的权值为正,又称之为容量(capacity).如下图



一个st-cut(简称割cut)会把有向图的顶点分成两个不相交的集合,其中s在一个集合中,t在另外一个集合中(在图像分割中,你可以将s理解成前景,t理解成背景)。
这个割的容量(capacity of the cut就是A到B所有边的容量和。注意这里不包含BA。参见下面几幅图。最小割问题就是要找到割容量最小的情况







可以想象成某某国家要控制网络,使得国民不能跟外面联络,S代表某个国家,t代表其余的世界。而每条边上代表着是带宽,带宽越大,肯定建设成本也越大,在进行cut的时候当然希望能达到完全断开的效果但又能破坏越少的基建设施,这就是最小割问题。

2 Maxflow
接着介绍maxflow问题。跟mincut问题类似,maxflow要处理的情况也是一个有向图,并有一个原顶点(source
vertex)和目标(target vertex).边的权值为正,又称之为容量(capacity).如下图



一个st-flow(简称flow)是为每条边附一个值,这个值需要满足两个条件
1 0<=边的flow <<边的capacity
2
除了s和t外,每个顶点的inflow要等于outflow
见下图,其实这个很好理解,可以想象成水管或者电流。



一个flow的值(value
of the flow
)就是tinflow.Maxflow就是找到这个最大值





后面会发现Mincut和maxflow的问题是对偶的,解出了maxflow也就知道了mincut的解。
现在先介绍一种解maxflow的算法Ford-Fulkerson,为了方便,简称FF算法。
(1)初始化,所有边的flow都初始化为0



(2)沿着增广路径增加flow。增广路径是一条从s到t的无向路径,但也有些条件,可以经过没有满容量的前向路径(st)或者是不为空的反向路径(t->s)











opencv用的是文献[2]的算法。这里先不做介绍。
3 maxflow-mincut理论证明对偶性(optional
首先定义一个概念net flow,经过一个割cut(A,B)的net
flow等于从A到B的边flow的和减去从B到A边flow的和。

然后我们就有了flow-value引理:f为任意的流,(A,B)为任意的割,那么f的值
value of flow(也就是t的inflow)等于经过(A,B)的netflow.

如下图,value offlow = 8+9+10 = 27 ,
而割的net flow = 8+2+7-2+12 = 27.要证明这个引理可以用数学归纳法。



Weak duality(弱对偶):f为任意的流,(A,B)为任意的割,那么Valueof
flow <= capacity of cut(A,B)
因为cut(A,B)等于从A到B流量,而value
offlow等于cut(A,B)的netflow,还得减去从B到A边的流量。



那么现在我们可以引出两个定理:
增广路径定理(Augmenting Path theorem:一个流f是最大流当且仅当没有增广路径。
最小割最大流定理(Maxflow-mincut theorem:Maxflow的值等于最小割的容量。
要证明上面的定理,只要证明下面三个条件是等价的就可以了:
(1)存在一个割的容量等于flow
f的值
(2)f是最大流
(3)对于f没有增广路径
首先我们证明(1->2。假设我们有一个割(A,B)的容量等于f的值,那么利用弱对偶的关系,其他流的值<=(A,B)的容量,而由于1的假设,(A,B)的容量等于f的值,因此得到其他流的值都小于f的值,从而(2)成立

接着证明(2->(3)。我们来证明它的逆否命题。对于f如果还有还有增广路径,那f不是最大流,这很显然,如果按照FF算法的话,我们还可以增加flow
f的值,因此f就不会是最大流,因此逆否命题成立,也就代表(2)->(3)成立。

最后证明从(3->(1)。让割(A,B)满足这么一个条件:s在A中,且A中的顶点通过一些无向的边连接而成,这些边要么是不是满的前向边要么是非空的反向边。如下图中加粗的边。
那么根据定义,s在A中,由于没有增广路径,因此t在B中。
由于这个割的B到A的边流量全是0,
这个割的容量
= 沿着这个割的netflow(从A到B边的流量-从B到A边的流量)
又根据flow-value引理,netflow
= value of low,因此推出(1).



最后我们怎么根据最大流的解得到最小割的解呢,就是和证明(3)->(1)中的一样让割(A,B)满足这么一个条件:s在A中,且A中的顶点通过一些无向的边连接而成,这些边要么是不是满的前向边要么是非空的反向边

[1]PrincetonUniversity - Algorithm:
https://class.coursera.org/algs4partII-006/lecture/22
[2]An Experimental Comparison of
Min-Cut/Max-Flow Algorithms for
Energy Minimization in Vision
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: