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 I D )就是指分割区域C中包含的最大边的权值。

Int(C)=maxeMST(C,E)w(e) I n t ( C ) = max e ∈ M S T ( C , E ) w ( e )

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

3.2 Difference

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

Diff(C1,C2)=minviC1,vjC2,(vi,vj)Ew((vi,vj)) D i f f ( C 1 , C 2 ) = min v i ∈ C 1 , v j ∈ C 2 , ( v i , v j ) ∈ E w ( ( v i , v j ) )

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

4. 两个区域的合并标准

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

Diff(C1,C2)<min(Int(C1),Int(C2)) D i f f ( C 1 , C 2 ) < m i n ( I n t ( C 1 ) , I n t ( C 2 ) )

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

其中:
MInt(Ci,Cj)=min(Int(Ci)+r(Ci),Int(Cj)+r(Cj)) M I n t ( C i , C j ) = m i n ( I n t ( C i ) + r ( C i ) , I n t ( C j ) + r ( C j ) )

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

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

5. 算法分割步骤

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值