Fast Approximate Energy Minimization via Graph Cuts
来源:互联网 发布:java反序列化漏洞扫描 编辑:程序博客网 时间:2024/05/18 02:41
本文为转载,原博客地址:http://blog.csdn.net/nothinglefttosay/article/details/48554555
简介
主题:采用图割方法解决视觉问题中常见的能量最小化问题
主要参考文献:Fast Approximate Energy Minimization via Graph Cuts, Cornell University, Boykov, Veksler, Zabih, IEEE PAMI 23(11), pp 1222ff, 2001
在诸多视觉图像问题中,研究人员最后都能将其归结为最小化一个能量函数的问题,很多文献中都引用这篇文章:Fast Approximate Energy Minimization via Graph Cuts,该文章在 google scholar 上显示截至目前引用超过5k+。该文章中介绍了两种采用图割来解决能量最小化问题的算法:
下面本文通过拜读并翻译原文,加上个人理解试着弄清楚这两个算法的来龙去脉,如有错误敬请指出。
计算机视觉中的能量最小化问题描述
在计算机视觉领域中,我们经常需要估计一些在空间(像素平面)上变化的量,例如图像灰度、视差大小等。这些量都有着共同的特征:分块平滑(piecewise smoothness)。分块平滑意味着两个方面:这些量在块的内部变化平滑,在块与块之间(物体边界)变化很大。对每一个像素点
基于以上想法,这些视觉问题就可以表达成以下寻找标签函数
在这里
其中
平滑项
由于能量最小化是非凸优化问题,具有很多局部极小值,并且解空间有
在这篇文章中主要考虑的平滑项具有以下形式:
这里
该论文中提出了两种对任意有限大小的标签集
那么我们就称
采用图割来最小化能量
对所面临的问题进行了简单的形式化的描述后,我们下面就会采用一种图割的方法来求解这个问题。总体思路是每一次 expansion(swap)调整一(两)个标签来使得能量函数下降,遍历所有标签(组合)直至能量函数在所有的一次 expansion(swap)调整标签中不能下降,算法停止,达到局部最优。
分割和移动空间
每一个标签映射函数
任意一种标签方式
每一次标签调整,也就是
-
-
上面定义了一次 expansion(swap)操作对象是具体的一(两)个标签集合,和操作规范,并没说明具体哪些像素进行扩张或交换操作。对不同的操作对象,必然产生截然不同的 expansion(swap)操作,相同的操作对象,对不同的像素操作,也是不同的 expansion(swap)操作。
算法流程和性质
上面定义了 expansion(swap)操作空间和每一次 expansion(swap)调整操作规范,算法总流程如下图:
图中上部分是
两种算法区分就在对当前标签对象进行具体调整的方式 3.1 - 3.2 这两步上,两种标签调整方式在上一部分已经进行了说明。
该文中的算法就是每一次在整个操作空间的一个有限的(
图割
上面只是给出了算法的框架流程,但具体解决算法的最关键步骤就是 3.1:在当前标签对象的一次
这里简单介绍下图割问题:给定一幅无向带边权图
最小割问题就是找到一个割使得代价最小。这是一个很成熟的问题,已经提出了不少低阶多项式复杂度的算法,例如 Ford-Fulkerson,Push-relabel,这些算法在实际中都是近乎线性复杂度。
找到最佳的 swap 移动
对于一个输入的标记方式
这里采用构建图
构建图
每次我们都是基于当前分割
图中,顶点集合包含汇源节点
每条边的权值:
最小割与最佳 swap 移动
对于构造的图中的一个割有如下的几种情况:
从图中可以看到每个像素顶点有且仅有一条t边在割集中(也意味着每个像素只能拥有一个标签),如果两个相邻的像素被标记为不同的标签,那么他们之间的n边也属于割集。有这样的观察我们可以得到以下两个引理:
- Lemma 1: 与一个割
- Lemma 2: 对于任意一个割
因为割集与n边交集只有在两个不同标签交界处才会产生。由此得到:
Theorem 1: 图
图
对于前一项,割集与t边相交,结合权值表中的定义,我们有:
后一项表示割集中的n边权值,结合 Lemma 2 可以得到:
注意到前一项中产生的平滑项与后一项中的平滑项结合定义的平滑项对象是两个相邻像素且至少有一个属于
这时候我们就可以将割集代价写为:
这个数值对于当前
Corollary 1:
找到最佳的 expansion 移动
对于一个输入的标记方式
这里采用构建图
构建图
每次我们都是基于当前分割
汇源节点分别代表标签
- 图在整幅图像的所有像素点上构造,
- 在相邻且具有不同标签顶点(
- 相应的对于辅助节点我们需要添加额外的三条辅助边,分别与两个边界点和
所有边的集合及权重如下图:
最小割与最佳 expansion 移动
与上一部分类似,每个像素顶点有且仅有一条t边在割集中,如果
Lemmma 3:
特别的,对于最小割我们有以下割边情形:
- 图中中间情形:当之前相邻边界像素保留原标签(
- 图中右边情形:当之前相邻边界像素其中一个变成
三角不等式在这里的意义就是尽量只切辅助节点的某一条边。
与上一部分类似,通过之前定义的割边权值计算最小割代价可以证明
Corollary 2: 从当前
总结
整个系统的目的就是最小化能量
Fast Approximate Energy Minimization via Graph Cuts 文中提出的两个算法都能同时改变大范围像素集的标号;而其它的标准算法一般用微小的移动,一次仅能改变一个像素的标号。
算法可以类比于梯度下降法:在操作空间的每一个
基本的图割方法一般用来解决两个标签的问题,而在这篇文章作者中通过巧妙的构造网络,每次进行两个标签—
- Fast Approximate Energy Minimization via Graph Cuts
- Fast Approximate Energy Minimization via Graph Cuts
- Energy Minimization
- CUDA Cuts: Fast Graph Cuts on the GPU
- CUDA Cuts: Fast Graph Cuts on the GPU
- CUDA Cuts: Fast Graph Cuts on the GPU
- what energy function can be minimized by graph cuts
- GCMex - MATLAB wrapper for graph cuts multi-label energy min
- ZOJ 2539 Energy Minimization
- zoj 2539 Energy Minimization
- Graph Cuts
- EFANNA : An Extremely Fast Approximate Nearest Neighbor Search Algorithm Based on kNN Graph
- FXAA “Fast Approximate Anti-Aliasing”,
- Graph Cuts学习心得与体会
- Image Smoothing Via L0 Gradient Minimization
- Image Smoothing via L0 Gradient Minimization
- Graph Cuts学习笔记2014.5.16----1
- Graph Cuts on the GPU解析
- Java标准教程:Java 2D绘图--第3章 基本几何图形
- FZU 2205
- 【POJ2728】Desert King-最优比率生成树
- python中元组的基本概念和应用
- 超简单的获取某图片上的某种颜色对应的css颜色值:不需要photoshop
- Fast Approximate Energy Minimization via Graph Cuts
- 创建ServerSocket出错Permission denied
- Android 知识图谱
- HDU
- linux语系
- OS知识总结(2)
- Lambda——JDK8推出的一个新特性
- Linux下设置变量的三种方法
- 石墨烯超材料仿真的有趣的文章