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

这里先介绍mincutmaxflow,为介绍Grabcut打下基础。Grabcut可以用在图像分割和文字二值化中。

 

1首先介绍Mincut问题

这部分内容主要翻译自[1],可以看原版理解的更深.由于个人没有看过中文教材,因此可能一些专业术语翻译的不太对,敬请见谅。

一个有向图,并有一个源顶点(source vertex)和目标顶点(target vertex.边的权值为正,又称之为容量(capacity.如下图


一个st-cut(简称割cut)会把有向图的顶点分成两个不相交的集合,其中s在一个集合A(包含了一部分顶点)中,t在另外一个与A不相交的集合B中(在图像分割中,你可以将s理解成前景,t理解成背景)。

这个割的容量(capacity of the cut就是AB所有边的容量和。注意这里不包含BA。参见下面几幅图。最小割问题就是要找到割容量最小的情况


 


 

 


 

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

 

2 Maxflow

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


 

 

一个st-flow(简称flow)是为每条边附一个值,这个值需要满足两个条件

1  0<=边的flow <<边的capacity

2除了st外,每个顶点的inflow要等于outflow

见下图,其实这个很好理解,可以想象成水管或者电流。

 


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


 


 

后面会发现Mincutmaxflow的问题是对偶的,解出了maxflow也就知道了mincut的解。

现在先介绍一种解maxflow的算法Ford-Fulkerson,为了方便,简称FF算法。

1)初始化,所有边的flow都初始化为0


 

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


 


 


 


 


 

opencv用的是文献[2]的算法。这里先不做介绍。

3 maxflow-mincut理论证明对偶性(optional

首先定义一个概念net flow,经过一个割cut(A,B)net flow等于从AB的边flow的和减去从BAflow的和。

 

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

 

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


 

Weak duality(弱对偶)f为任意的流,(AB)为任意的割,那么Valueof flow <= capacity of cut(A,B)

因为cut(A,B)等于从AB流量,而value offlow等于cutAB)的netflow,还得减去从BA边的流量。


那么现在我们可以引出两个定理:

增广路径定理(Augmenting Path theorem:一个流f是最大流当且仅当没有增广路径。

最小割最大流定理(Maxflow-mincut theorem:Maxflow的值等于最小割的容量。

要证明上面的定理,只要证明下面三个条件是等价的就可以了:

1)存在一个割的容量等于flow f的值

2f是最大流

3)对于f没有增广路径

首先我们证明(1->2。假设我们有一个割(A,B)的容量等于f的值,那么利用弱对偶的关系,其他流的值<=(A,B)的容量,而由于1的假设,(AB)的容量等于f的值,因此得到其他流的值都小于f的值,从而(2)成立

 

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

 

最后证明从(3->(1)。让割(A,B)满足这么一个条件:sA中,且A中的顶点通过一些无向的边连接而成,这些边要么是不是满的前向边要么是非空的反向边。如下图中加粗的边。

那么根据定义,sA中,由于没有增广路径,因此tB中。

由于这个割的BA的边流量全是0

这个割的容量=沿着这个割的netflow(AB边的流量-BA边的流量)

又根据flow-value引理,netflow = value of low,因此推出(1.


 

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

 

[1]PrincetonUniversity - Algorithm:https://class.coursera.org/algs4partII-006/lecture/22

[2]An Experimental Comparison ofMin-Cut/Max-Flow Algorithms forEnergy Minimization in Vision

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值