Interactive Graph Cuts for Optimal Boundary & Region Segmentation of Objects in N-D Images
翻译总结下这篇文章,如果有理解有误的地方,请各位大神指出。
摘要
在本文中,我们描述了一种用于N维图像的通用交互式分割的新技术。用户将某些像素标记为“对象”或“背景”,以为分割提供硬约束。 附加软约束包括边界和区域信息。Graph Cuts用于找到N维图像的全局最优分割。 并在满足硬约束和软约束的情况下得到很好的分割。我们的分割的数量是不受限制的,并且“对象”和“背景”段可以是几个独立的区域。 并通过一个新的max-flow算法可以快速实现我们的分割方法。
1. Introduction
由于自动分割不完美,交互式分割越来越受欢迎了。我们的目标是一个通用的交互分割技术来分割目标和背景。首先通过用户提供的硬约束来初始分割,然后,图像剩下的部分在满足硬约束的条件下,通过计算全局最优值来自动分割。Cost函数由边界项和分割的区域属性来定义(应该就是边界项和区域项)。而边界和区域的cost函数也就是软约束。 当用户增加或者删除硬约束(用户提供的种子像素点)时,全局最优分割也能很快计算出来。所以用户能得到想要的图像分割效果。
我们的方法主要的优势之一是有一个定义清晰的cost函数,从而能很好的得到全局最优的结果。之前的一些方法都没把cost函数定义好,bulabula,,,,。所以分割结果更可靠。
其cost函数同时包含区域和边缘的性质也是很重要的。考虑P是一个数据点集合,N是P中一个元素p和他的邻域的无序对{p,q}(不管p,q的顺序)的集合,以及由N表示的一些邻域系统。比如,P是2D网格中的像素点,N就是一个像素点的8邻域像素对的集合。令A=(A1,A2,….A|P|)是一个二进制vector,对应P中的像素p。每个Ap不是目标,就是背景(比如Ap为0是背景,为1是目标)。那么A就定义了一个分割。现在就可以定义软分割了,也就是cost函数。
系数λ>=0是区域项R(A)相对于边界项B(A)的权重系数。其中,区域项R(A)是把像素p分配到目标或者背景的惩罚,对应Rp(“obj”)和Rp(“bkg”)。例如,R(·)可能反应了如何由一个给定的强度模型来确定像素点p的强度(反正这玩意儿是能求出来的,后面会有介绍)。
边界项B(A):B{p,q}是p和q之间不连续性的惩罚,一般而言,p和q相似性越高,B{p,q}越大,反之亦然。B{p,q}也能随着p和q的距离函数减小。B{p,q}可以由局部梯度强度、拉普拉斯过零点、梯度方向等来决定。B(A)的后一项的意思就是p和q不能是同一像素点。
(E也就是边界项和区域项权衡之后的最小值)
之后就介绍了本文硬约束的优势:用矩形框选目标,简单快捷,而且也支持直接标记目标和背景的方法。
只有硬约束不行,所以本文加入了软约束。同时也说明了如果用户再改变硬约束的话,怎样高效的重新计算。
本文的graph cut从[7,8]中组合优化来,并用了新的“max-flow”[2]。之后的第2节解释术语并介绍背景,第三节是本文分割方法的细节,第四节实验,第五节总结。
2. graph cuts and cumputer vision
一个无向图G=[V,E]由节点的组合V和连接这线节点的边的组合E组成。每一条边都有一个非负权重w。当然还有两个顶点,只有出度的起点和只有入度的终点(图论中有相关知识,简单的来说就是起点只有流出的,终点只有流入的,这样组成的图才能用max-flow理论)。由两个终点促使割集的形成,其中割集是E的子集。一般而言,割的cost是割所经过的边的权重和。|C|=w1+w2+….+wc(1到c是被分割的边)。
Graph Cuts非常适用与图像分割。其节点对应像素点,边的权值对应像素点之间的相关性。如图,是一个简单的例子。Graph cut的3x3图像分割示意图:我们取两个种子点(就是人为的指定分别属于目标和背景的两个像素点),然后我们建立一个图,图中边的粗细表示对应权值的大小,然后找到权值和最小的边的组合,也就是(c)中的cut,即完成了图像分割的功能。
众所周知,低阶多项式能有效的计算有两个终点的图怎样得到全局最小割。那接下来的第三节,我们将介绍如何设置两个终点的图,从而得到最小割,在满足硬约束的条件下。
接下来两段bulabula,就是用自己的新max-flow算法来实现图的分割。
3. Segmentation Technique
这节讲了本文分割算法的细节。设O和B分别是标记为目标和背景的像素点的集合。所以O属于P,B属于P且O和B没有交集。切记我们的目标是在满足硬约束的条件下计算分割集合A的全局最小值。
一般的流程就像上图一样。给一个图以及我们由图生成的图和两个终端。 边权重反映d的是成本函数的区域(2)和边界(3)项中的参数,以及图像中的种子的已知位置。在图的节点和边权重生成之后,就是要通过分割两个终端来求全局最优最小割了。在上图中,最小割恰好把图像分割成了一个前景和一个背景。但一般而言,背景和前景的数量是任意的。比如在第四节中前景和背景就被分割成了孤立的小块。
下面我们描述图的细节,并证明所获得的分割是最优的。 为了分割给定的图像,我们创建了一个图形G = [V,E],其中节点对应于图像的像素p∈P。 有两个附加节点:代表前景的源节点S和代表背景的终点T。所以,G的节点V=P+S+T。
边E的集合包括两种类型的无向边:像素点之间的边n-links和像素与两个终端的边t-links。 每个像素p两个t-links,{p,S}和{p,T}。 N(N是P中一个元素p和他的邻域的无序对{p,q},前边有讲)中的每对相邻像素{p,q}都由一个n-links连接。 在不引入任何歧义的情况下,连接一对邻居p和q的n-links将由{p,q}表示。 因此,E=N+(所有的){p,S}和{p,T}。
具体的边权值对应下表:
现在图G已经构建好了。这时就能通过求G的最小割来分割图像了。图的最小割C能通过计算两个终端的图割用多项式时间来计算出来(第二节)(设上表中的权值都是非负的)(我们的算法要求权值是非负的,所以我们对每个惩罚都加了一个大的正数,以确保权值非负。当然,由于整个公式都加了正数,所以不影响最后结果)
下边我们介绍最小割C如何定义,并证明分割的图像是最佳的。我们需要先介绍一个技术引理。假设F代表G中所有可行的C的集合,那么:
1.C在每个P上只切割一个t-links(就是要么切割为前景,要么切割为背景)
2.如果相邻像素对{p,q}是一个割,那么p,q就分别连接不同的终端。(p,q一个是前景,一个是背景,他们就有一个割)
3.如果p属于前景,那么p和背景终点T就是一个割
4.如果p属于背景,那么p和前景起点S就是一个割
引理 一个图的最小割是存在的
证明,其实就是对上边4点的解释。Bulabula…反正任何一个可行割都能精确分割p的两个t-links之一,把他划分为前景或者背景。下边的定理完整的介绍了本文算法。
对于割集F中的任意一个割C,我们定义与之对应的唯一一个图形分割A(C):
定理 在满足硬约束的条件下,一个图的最小割能最小化能量公式。(也就是求割的过程就是最小化能量的过程)
证明:使用表格中的数据,定义一个可行割集F,通过(6)l来表明F中的一个割C:
也就是|C|=E(A(C))-const(C),其中A(C)都满足硬约束。事实上,(6)是F中所有C和H(the set H of all assignments A)中所有A的一一对应的关系。然后
就被证明了。
这部分我们说明了我们的算法在满足硬约束的条件下能有效的分割。具体来说,假设用最大流算法来生成图的最小割。最大流算法在给定G的边权重的情况下逐渐增加从S到T的flow。最大流量饱和时终止。饱和的边对应图的最小割,从而给出最优解。(也就是最大流等于最小割的定理。Max-flow有两种经典的方法,增广路径就是其中之一,而作者的这个方法就是增广路径的改进方法。增广路径算法遵循循循渐进的原则,不断在图上查找从S到T的可用路径,从0开始慢慢提升图的流量到最大。可以参考图论方面的知识,还有作者的论文:An Experimental Comparison of Min-cut/max-flow Algorithms for Energy Minimization in Vision)
假设已经通过用户交互的种子点得出了最优分割。这时用户又加了前景的标记,也就是种子点,且不同于之前的种子点。我们就需要改变像素点p的两个t-links的costs了。
然后再计算新的图的最大流最小割。实际上,我们能从第一次计算的结果来开始flow的建立。唯一的问题是上述边权重的重新分配会减少一些边的权重。如果一个flow通过这样的边,就会破坏整个flow的一致性。但是,增加边缘的权重就不是问题了。这下我们就能解决问题了,如下。
为了计算新加的目标种子像素点,我们增加了t-links的权重,如下表:
这个新的costs和边缘权重表(最前边那张表)是一致的,因为两个t-links中额外的cp没有改变最佳割。然后,从前一个flow就能有效的得到新图中的最大流,而不用重新计算。
同样的,增加背景或者删除种子点也是童谣的道理,在相应的像素点上增加两个t-links的权重。这个新的costs的加减的常数应该与边缘权重表一致。
4. Example
在照片/视频编辑,和医疗数据处理等方面做了实验。
我们当前的实现实际上对用户输入的种子做了双重使用。首先,像第三节那样,提供了硬约束。另外,我们用标记的像素强度来得到目标和背景的强度分布直方图:Pr(I|O)和Pr(I|B)(或者从之前的计算当中获得)。然后对直方图做负对数似然来设置区域惩罚Rp(·):
这种惩罚要通过底层MAP_MRF来激发。(不懂)
使用一个ad-hoc(点对点)函数来设置边缘惩罚
像素强度相差越小,惩罚越大,像素强度相差越大,惩罚越小。直观的来说,这个函数就对应于相邻像素之间分布的噪声。因此,σ能被估计为“相机噪点”。(这里和前边的说法不太一样)
注意我们在2D中用的8邻域系统,3D中用的26邻域系统。用333MHz Pentium III处理器。用一种新的“max-flow”算法(也就是上边提到的作者提出的基于增广路径的改进方法)。
下边就是几个实验和最后的介绍了….
最后总结一下。首先构建一个图,这个图除了像素点对应的节点之外,还有两个终端节点。此时一个图就有两类节点和两类边。那么,普通节点之间边的权重由边界项决定;普通节点与两个终点的边权重由区域项决定。组成图后,使用作者改进的max-flow来分割图。
只看论文的话一般是没法完全理解的,需要对应代码一起。但是我没找到这篇论文的代码,请问有人有代码么。
点这,作者主页上有一些代码,包括max-flow