动手学图割(graph cut)算法-01:图割两大派系

图割的基本思想是利用最大流算法求最小割,将元素划分为两个不相交的子集。现有的图切割方法可分为两类:一类是基于增广路径(augmented path)的方法,另一类是基于push-relabel的方法。

增广路径(augmented path)派

基于增广路径的图割算法难以并行化。
最早的基于增广路径的算法应该是1962年提出的Ford-Fulkerson算法:

令网络中的初始流量为零,沿着任意从起点到终点(且不含有饱和的正向边或是空逆向边)的增广路径增大流量,直到网络中不存在这样的路径为止。此时,网络中存在最大流和最小割。

其中,增广路径简单来说就是这么一条路径:

  • 该路径是从节点S到节点T的一条路径;
  • 该路径上所有边目前剩下的容量都大于0。

Ford-Fulkerson算法伪代码:

while(true){
	找一条增广路径;
	if(找不到) break;
	找增广路径中未使用容量最小值,路径各个边减去这个值;
}

后续很多增广路径的方法都是基于这个框架的改进,比如研究如何更快地找到一条增广路径。比较经典的是2004年,Boykov and Kolmogorov提出的算法(简称BK算法)。

push-relabel派

基于push-relabel的图割算法容易并行化,但是并行化的算法可能收敛缓慢,或者得不到全局最优解,换句话说就是结果可能出错。
详情见WIKI

如何得到最小割

最小割和最大流经常被放到一起讨论,因为这二者是一个等价问题,当求出最大流的值时,最小割的值等于最大流的值。然而许多文章详细说明了如何求最大流(的值),却没有说明另一个问题:

得到最大流(或最小割)的值后,我怎么进一步确定割边集?

换句话说就是,我应该割掉哪些边,以得到两个不同的集合S和T?很多时候我们更关心应该割哪些边,而不关心最大流(最小割)的值是多少。例如当我需要拿图割这个工具进行图像抠图(图像分割)和三维点云表面(mesh)重建时。

其实确定割边集很简单,无论是增广路径(augmented path)的方法还是push-relabel的方法,得到最大流后,都会同时得到一个剩余网络(residual network),在残余网络中从顶点S出发遍历,能遍历到的顶点都属于集合S,其他的点则属于集合T,集合S指向集合T的那些饱和边就是最小割的割边。

参考文献

  • Peng, Yi, et al. “JF-Cut: A parallel graph cut approach for large-scale image and video.” IEEE Transactions on Image Processing 24.2 (2014): 655-666.
  • 《算法》第四版
  • WIKI: Push–relabel maximum flow algorithm
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值