GBIS

论文原文: Efficient Graph-Based Image Segmentation

最近看RCNN,里面用到了Selective Search来产生region proposal。Selective Search用到的方法就是本文中提到的产生Region的方法。即:基于图的贪心聚类算法。该算法实现简单,速度较快。

1. 图像分割

图像分割的主要目的就是将图像(image)分割成若干个特定的、具有独特性质的区域(region),然后从中提取出感兴趣的目标(object)。而图像区域之间的边界定义是图像分割算法的关键,论文给出了一种在图表示(graph-based)下图像区域之间边界的定义的判断标准(predicate),其分割算法就是利用这个判断标准(predicate)使用贪心选择(greedy decision)来产生分割(segmentation)。该算法在时间效率上,基本上与图像(Image)的图(Graph)表示的边(edge)数量成线性关系,而图像的图表示的边与像素点成正比,也就说图像分割的时间效率与图像的像素点个数成线性关系。这个算法有一个非常重要的特性,它能保持低变化(low-variability)区域(region)的细节,同时能够忽略高变化(high-variability)区域(region)的细节。这个性质很特别也很重要,对图像有一个很好的分割效果(能够找出视觉上一致的区域,简单讲就是高变化区域有一个很好聚合(grouping),能够把它们分在同一个区域).

在做图像分割,首先需要理解如何定义一个区域,我们人眼可以很轻松地解决这个问题,但是使用数字化语言定义就没有那么容易了。比较直观的区域划分方法有,区域的颜色,边缘,纹理。

比如下面的这个图:
这里写图片描述
我们希望把它们分割成三个区域:左半部分是灰度渐进变化的,右半部分外层灰度均匀变化,内层灰度变化较大。

2. 图像(image)的图(graph)表示

图像(image)的图表示是指将图像(image)表达成图论中的图(graph)。具体说来就是,把图像中的每一个像素点看成一个顶点vi ∈ V(node或vertex),像素点之间的关系对(可以自己定义其具体关系,一般来说是指相邻关系)构成图的一条边ei ∈ E,这样就构建好了一个图 G = (V,E)。图每条边的权值是基于像素点之间的关系,可以是像素点之间的灰度值差,也可以是像素点之间的距离(如果是4-邻域相邻关系的话,这个权值就没意义了)。

将图像表达成图之后,接下来就是要如何分割这个图,或者这么理解,将每个节点(像素点)看成单一的区域,然后进行合并。文中使用最小生成树方法合并像素点,然后构成一个个区域。最小生成树(MST, minimum spanning tree), 给定需要连接的顶点,选择边权之和最小的树。上图即是一棵MST。

这里写图片描述
本文中,初始化时每一个像素点都是一个顶点,然后逐渐合并得到一个区域,确切地说是连接这个区域中的像素点的一个MST。如图,棕色圆圈为顶点,线段为边,合并棕色顶点所生成的MST,对应的就是一个分割区域。分割后的结果其实就是森林。

3. 相关定义

3.1 Internal Difference

假定图G已经简化成了MST, 一个分割区域C包含若干个顶点。顶点之间通过最小生成树的边连接。这个内部差(ID)就是指分割区域C中包含的最大边的权值。

Int(C)=maxeMST(C,E)w(e)

即一个最小生成树中最大边的权值。对于单个像素点, Int=0

3.2 Difference

两个区域的类间差异为Diff(C1,C2)。指的是两个分割区域之间顶点相互连接的最小边的权值。

Diff(C1,C2)=minviC1,vjC2,(vi,vj)Ew((vi,vj))

如果两个分割部分之间没有边连接,定义Diff(C1,C2)=。其实也不一定要选择两个区域连接的边的最小值,但是其他的标准将是一个NP-Hard问题。因此文中选择的是最小值。

4. 两个区域的合并标准

根据直观的理解,如果满足下面的条件,则将两个区域合并:

Diff(C1,C2)<min(Int(C1),Int(C2))

即两个区域的不相似度的最小值,小于任何一个区域的不相似度的最大值,就将两个区域合并。刚开始,每个区域都是单个的像素点,Int为0。因此都是0容忍的,只有像素值完全一样才能合并,导致过分割。因此刚开始的时候,应该给每个像素点一个可以容忍的范围。当生长到一定范围时,应该去掉初始容忍值的作用。原文条件为:
Diff(Ci,Cj)MInt(Ci,Cj)

其中:
MInt(Ci,Cj)=min(Int(Ci)+r(Ci),Int(Cj)+r(Cj))

在每个Int值后面增加了一个r(C):
r(C)=k|C|

其中|C|为区域C所包含的像素点的个数。这样随着区域的逐渐扩大,这一项的作用就越来越小,最后几乎可以忽略。k就是一个可以控制所形成的区域大小的一个因子。如果k=0,则每个像素成为一个独立的区域。如果k=+,则整张图片聚成一块。因此k越大,分割后的图片也就越大。

5. 算法分割步骤

这里写图片描述
0. 对于图G的所有边,按照权值进行升序排序。
1. S[0]是一个原始分割,相当于每个顶点都是一个分割区域。
2. q=1,2,,m,不断重复4中的操作。(m为边的条数,每次处理一条边)。
3. 根据上次S[q1]的构建,选择一条边o[q](vi,vj),如果vi,vj在两个互不相交的区域中,并且这两个区域满足合并条件,则合并这两个区域。否则什么也不做。
4. 最后得到的分割就是所求的分割S=S[m]

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012897374/article/details/79980610
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭