图割-最大流最小切割的最直白解读

本文转自图割-最大流最小切割的最直白解读,感谢原创作者!!

目录

  • 图割-最大流最小切割的最直白解读
    • 什么是图?
    • 什么是最大流?
      • 最大流的计算方法
      • 算法的有效性解读:
    • 什么是最小割?
      • 如何找到这个最小割?
      • 算法的有效性解读:
      • 实例

导读: 本文主要针对图像分割中提及的图割算法作一个最直白的介绍,面向的读者是所有对这个方面感兴趣的同学。从目标上来说,希望所有读者在阅读本文后,都能够自己通过自己熟悉的编程语言实现这个算法。

什么是图?

本文针对的图主要是有向图,具体定义先不给出,先看一个具体例子:

上图就是一个有向图,不用看官方定义,我们自己就能给出自己的定义:

  1. 有向图包含了顶点与边;

  2. 每一条边有两个端点,并且指明了两个端点之间的指向方向;

  3. 每一条边有对应的值(具体含义与具体的模型化场景有关)。

以上定义虽然不是官方定义,但在本文中,这样的定义已经足够使用。为了更好的描述我们总结的定义,所以我给出一个形式化的有向图定义:
上述定义中,V表示为顶点集合,E表示为有向边集合。当k=0,那么就表示两个顶点之间的有向边无效。

什么是最大流?

在正式开始介绍最大流之前,必须将前一章节中一个遗留的小问题确定下来,那就是有向边的数值到底是什么含义?这里将其定义为边的容量,代表了该边所能通过的最大值。在网络上有很多类比,比如有些类比把有向图看作是水管,容量就是能够通过该水管段最高单位流量。基于此类比,最大流就是从起点到终点所能达到的最高单位流量。为了下文表示上的方便,将容量、最大流都给出一个形式化的定义:

(以上两个公式太丑陋,第一个容量定义公式,可能让读者产生是一个固定值得歧义理解,实际想要表达的含义是容量就是有向边绑定的数值。最大流定义也同样丑陋,实在不知道该如何表示更加好,所以直接使用了中文描述,对于以上丑陋的表达,我深表歉意。)

最大流的计算方法

为了有效地描述算法,所以必须在具体描述之前再引入几个定义,(很抱歉,会有这么多定义产生,但还是恳请读者耐心一下):

通路:从图起点(S)到达图结束点(T)的路径,由一系列顶点组成;

通路流量:该通路上所能达到的最大单位流量;

饱和边:容量等于通路流量的有向边。

具体算法描述:

Step1:初始化最大流Flow=0;Step2:在图中找一条通路,如果通路不存在,则结束;Step3:Flow = Flow+通路流量;Step4:对通路上所有边的容量进行更新 Cij = Cij-通路流量;Step5:跳转Step2

注意:在上述算法中,当容量为0时,代表该边已经无效,不能作为通路路经中的边。

算法的有效性解读:

这里使用了解读,而没有使用证明,也就表示以下说法是从一种直观的角度来描述,不是严谨的推理证明。算法是有效的,因为当图中已经没有通路的时候,已经不可能再增加图的流量,所以至少已经达到了本次计算过程中的最大流。剩下的另一部份就是如何来说明通路选择的顺序与最终计算的最大流结果无关?如果两条通路之间是独立的,那么先选择的通路不会对后选择的通路产生影响。如果两条通路并非独立,那么也是可以简单证明通路的先后选择与这两条通路上的最大流无关。如果两条通路的可以被证明,那么将两条通路看作一条通路,证明N+1情况下同样成立。

什么是最小割?

一个割就是一组边的集合,将给集合边从图中边集合中移除,那么图被分割为两个部分,这两个部分之间没有任何边连接。如果说得有点绕口,那么最简单来说,一块肉被从中间隔开,分成两个部分,中间断开的连接的集合就是割。

最小割就是将图切割为两个部分时,代价最小的割的集合,代价就是边上容量的和(S部分到T部分边的容量)。还是拿猪肉作类比,最小割就是找到一块肉连接最小的部分,一刀劈开,那个部分的连接就是最小割。

如何找到这个最小割?

当一个图被割分成两个部分时,不再存在S到T的通路,所以割的代价必定大于等于图的最大流(这个需要添加额外说明吗?应该不需要吧,算是非常明显的结论了吧)。那么也就是说,割的代码最小不能小于图的最大流,也就是割的代价等于图的最大流。

现在确定了割的代价,但如何去找到这样一组割?在进行具体算法说明之前,给出额外一个概念:

影响边:在计算最大流的算法中,会对边的容量进行修改,而将一条通路中修改后容量为0的边称为修改后容量非0边的影响边;

算法描述:Step1: 初始化边影响边集合;Step2: 初始化最小割边集合;Step3: 记录边的原始容量Rij=Cij;Step3: 寻找一个通路,如果没有通路,则结束;Step4: 修正边的容量Cij = Cij-通路流量;Step5: 在通路的边中找一个Cij=0的边,作为预切割边;Step6: 如果预切割边的容量等于该边的原始容量(Cij=Rij),那么将该边加入最小割边集合;否则,找到该边的所有影响边,将影响边从最小割边集合中移出,将该边加入最小割边集合;Step7: 对通路其他边记录影响边;

算法的有效性解读:

算法的核心原理就是在寻找最大流的过程中,找出一组边代价等于最大流,并且能够将遍历的通路有效分割的边。

实例

按本文描述算法对最初的图进行最小割求解。

步骤1:寻找第一个通路

红色字体表示该通路的通路流量。根据算法进行容量修正:

修改后的容量是用红色字体表示。在此通路中,AC边容量为0,所以将该边加入最小割边集合{AC},同时记录影响边信息,SA的影响边{AC},CT的影响边{AC}。

步骤2:寻找第二条通路:


此时,最小割边集合为{AC,DT}

步骤3:寻找第三条通路:


此时最小割边集合为:{AC,DT,DC}

此时,已经不再存在通路,所以当前最小割边集合就是求解的最小割,其代价为23。

图割-最大流最小切割的最直白解读相关推荐

  1. matlab实现图割算法中的最大流最小割Max-flow/min-cut问题(一)

    转载自:http://blog.csdn.net/on2way/article/details/43276155 本篇主要介绍matlab实现Max-flow/min-cut的方法,介绍一种只实现了M ...

  2. 【图割】最大流/最小割算法详解(Yuri Boykov and Vladimir Kolmogorov,2004 )

    本博客主要翻译了Yuri Boykov and Vladimir Kolmogorov在2004年发表的改进最大流最小割算法用于计算机视觉的论文:An Experimental Comparison ...

  3. 图像分割之(二)Graph Cut(图割)

    上一文对主要的分割方法做了一个概述.那下面我们对其中几个比较感兴趣的算法做个学习.下面主要是Graph Cut,下一个博文我们再学习下Grab Cut,两者都是基于图论的分割方法.另外OpenCV实现 ...

  4. stereo matching的能量函数最小值求解——alpha expansion 和alpha-beta swap算法(图割)

    alpha expansion以及alpha-beta swap介绍 写在前面的话 α \alpha α-expansion 和 α − β \alpha-\beta α−βswap的算法流程 生成带 ...

  5. 实战|基于图割算法的木材表面缺陷图像分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 鉴于图割方法的明显优势,白雪冰及其团队采用G ...

  6. 基于图割优化的多平面重建视觉 SLAM(ISMAR2021)

    本文来自于AR领域最著名的学术会议ISMAR,结合了之前介绍过的图割理论. 作者提出了一种语义平面 SLAM 系统,该系统使用来自实例平面分割网络的线索来改进位姿估计和映射.虽然主流方法是使用 RGB ...

  7. efficientransac_【泡泡图灵智库】基于图割优化的RANSAC算法(CVPR)

    主要贡献 本文提出了一种使用局部优化算法改进RANSCA精度的方法,其主要贡献为: 1.提出了一种考虑空间一致性的内点判断方法,从而改进了RANSCA算法的精度: 2.采用图割算法解决内点判断的优化问 ...

  8. 阿里重磅发布大规模图神经网络平台AliGraph,架构算法解读

    图神经网络(GNN)主要是利用神经网络处理复杂的图数据,它将图数据转换到低维空间,同时最大限度保留结构和属性信息,并构造一个用于训练和推理的神经网络.在实际应用中,为了加速GNN训练和新算法的快速迭代 ...

  9. 设无向图g如图所示_阿里重磅发布大规模图神经网络平台 AliGraph,架构算法解读...

    图神经网络 (GNN) 主要是利用神经网络处理复杂的图数据,它将图数据转换到低维空间,同时最大限度保留结构和属性信息,并构造一个用于训练和推理的神经网络.在实际应用中,为了加速 GNN 训练和新算法的 ...

最新文章

  1. 服务部署如何做到高可用?这份“三级跳”秘籍送给你\n
  2. 用爬虫实现验证码识别并模拟登陆和cookie操作、代理操作、线程池
  3. 如何用数学和化学方法测量英国海岸线的长度
  4. SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)
  5. 13万张表+数亿行代码,迁移只需数小时,还是异构数据库
  6. jQuery的表单验证
  7. jQuery formValidator表单校验代码生成器ver1.1,一键产生所有代码
  8. hadoop2.9.2安装hadoop_pid_dir_Hadoop3.2 +Spark3.0全分布式安装
  9. 放弃微博,继续回来写月经
  10. Debian8.1 安装samba与windows共享文件,在系统重启后samba服务无法自动启动
  11. 简单说下H5+打包apk
  12. 睡眠阶段分期——SVM和ELM分别与粒子群算法结合(function)
  13. 将前端传过来的base64加密图片保存到本地,并且判断来自于哪个终端
  14. 基于Qt开发的AES文件加解密工具
  15. Python爬虫:盖楼抽奖还手动?自动的她不香吗?
  16. ACL(访问控制列表)
  17. u盘Linux、window双系统文件格式安装
  18. GAN ZOO - 第1节: 分析GAN的缺陷与改进方向,介绍典型的改进模型:CGAN、InfoGAN
  19. 音频处理二:(左右声道分离)
  20. 推荐一款免费的带有坐标系的在线绘图web应用(汇报神器)

热门文章

  1. 傅里叶级数、傅里叶变换、短时傅里叶变换 公式
  2. 打造心中的暗黑传奇3
  3. 怎么把做好的ps保存成图片_PS怎么把一张图片切片保存成多张png图片?
  4. 你需要了解的 http 协议基础知识
  5. 英语学习笔记--英语口语(6)
  6. Dava基础Day17
  7. 树与二叉树——有关n叉树的若干问题
  8. linux使用usermod修改用户主目录
  9. HTML CSS JS 特殊字符编码表
  10. 瞧一瞧~看一看~MyCat架构剖析免费不要钱!(下)