《Efficient Graph-Based Image Segmentation》论文解读

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/McEason/article/details/99543609

Abstract

作者的方法的一个重要的特点该方法能在低变化性(low-variability)图像区域保留细节,而在高变化性(high-variability)区域忽略细节(参见图一,左边渐变区域和右边中间为高变化性区域,此时忽略细节,将这两个区域各自变成统一颜色

1.Introduction

一个好的图像分割应该有如下特征:

1.Capture perceptually important groupings or regions,which often reflect global aspects of the image.
捕获视觉上重要的组群或区域,这些区域经常反映图像的全局方位。
2.Be highly efficient, running in time nearly linear in the number of image pixels.
效率高,运行时间和图像像素数量间的关系接近线性

作者的方法是基于选择graph中的edges,把每个像素看成一个节点,然后和周围节点由无向边(undirected edges)连接,这些边上有衡量对应节点相似度的属性。而且根据图像邻近区域的可变性程度自适应调整分割准则。

在这里插入图片描述

此例说明,作者认为不应只把强度当作划分区域的依据,明显可见斜坡和右边密集区域应有不同划分阈值,因此作者采用自适应或非局部(adaptive or non-local)准则,具体算法在3.1中详细介绍。

2. Related Work

说了写其他人做了什么,但是这些方法都不行。

3 .Graph—Based Segmentation

作者采用的是一种基于图的分割方法, G = ( V , E   ) G = ( V, E\ ) , V V 是将要被分割的顶点集合, v i V v_i \in V E E 是相邻的两个顶点之间的边 ( v i , v j   ) E (v_i , v_j\ ) \in E E E 是相邻的区域 ( v i , v j ) (v_i, v_j) 的不相似的非负测量(比如亮度、颜色、运动、位置或其他自身属性)(就是说,E的权重值越大,越不相似)。
每个属于S的区域C ( component, 不相交 ,之间没有公共点) 代表一个component in a graph G = ( V , E ) G`=(V,E`) , E E E` \in E

换句话说,任何segmentation部分都被一系列E中的边缘连接,作者希望同一component的内的两个顶点之间的相似度高,不同component之间的顶点间的相似度低。对应过来就是希望同一component中顶点间的权重小,不同component之间的顶点之间权重大。

3.1 Pairwise Region Comparison Predicate

定义一个预测d,为了评估两个component之间是否存在边界(boundary)。
这个预测是基于两个component之间的不相似度,和两个组件内部的不相似度进行比较。因为是将component之间的差异和component内部的差异进行比较,所以能根据数据的局部特征进行自适应。

先假定的 G G 已经分割成了多个component(在最开始,每个vi都是一个component),一个componet包含若干个顶点,顶点之间通过该component的MST的边连接,内部差就是component的MST中包含的最大权重的边。
Internal difference:最小的生成树里最大的权重( M S T ( C , E   ) MST(C, E\ ) 中的最大weight )
I n t   ( C , E   ) = m a x e M S T ( C , E   ) w ( e   ) Int\ (C,E\ ) = {max \atop e\in MST(C,E\ )}w(e\ )

这样的话,给定的component只会考虑在weight大于等于Int©时保持连接。

就是说已经连接的已经是最小的了,从别的地方已经找不到比int小的能连接边了,要连接的话必定大于Int©,此时若插进去一个点,无论如何都不会影响MST的环路。如果在此之前能插的话,早就插了,毕竟edge已经排序过了,后面也没有那么小的还能往前插的了,后面合并的只会越来越大。

Difference between two components:连接到两个component的最小的权重(也就是最像的地方
D i f   ( C 1 , C 2   ) = m i n v i C 1 , v j C 2 , ( v i   , v j   ) E   w ( ( v i   , v j   ) ) Dif\ (C_1,C_2\ ) = {min \atop v_i \in C_1,v_j \in C_2,(v_i\ ,v_j\ )\in E} \ w((v_i\ ,v_j\ ))
如果没有边连接C1和C2就认为dif为无穷大。

用dif和int来比较来判断两个component是否存在边界
两个component间的差别必须大于两个component的Int中最小的那个,才算是有boundary
D   ( C 1   , C 2 ) = {  true if  D i f ( C i   , C 2 ) > M I n t   ( C 1   , C 2 )  false otherwise D\ (C_1\ ,C_2)= \begin{cases} \ \text{true} &\text{if}\ Dif(C_i\ ,C_2)>MInt\ (C_1\ ,C_2) \\ \ \text{false} &\text{otherwise}\end{cases}
M I n t   ( C 1   , C 2 ) = min ( I n t   ( C 1 ) + τ ( C 1 )   , I n t   ( C 2 ) + τ ( C 2 )   ) MInt\ (C_1\ ,C_2) = \text{min}(Int\ (C_1)+\tau(C_1)\ ,Int\ (C_2)+\tau(C_2)\ )

当c的大小是1时,Int©=0, τ \tau 是个阈值函数,当component很小的时候,int©并不能很好的评估数据的局部特征,因此作者使用一个基于component尺寸的阈值函数,该函数对区域的合并起到了很重要的作用。
τ ( C   ) = k / C \tau(C\ ) =k/|C|
C 是component的大小(也就是component中的顶点个数,或像素点个数), k 是一个固定的参数,设置了观测范围,k越大,component的大小就越大(划分出边界的要求提高了)。对于小的component我们要用更强的边界证据(就是边界很明显,让 w   ( e   ) w\ (e\ ) 变大)。当相邻的component之间很明显存在很大的差异的时候,component小一点也没关系。

4.The Algorithm and Its Properties

作者的算法遵循下列定义:

Definetion 1 A segmentation S is too fine fi there is some pair of regions C 1 , C 2   S C_1,C_2\ \in S for which there is no evidence for a boundary between them.

Definition 1:如果分割S中存在两个region之间没有存在boundary的证据,那么分割S is too fine。(分的过于精细,不应该有边界的也分开了

refinement的概念:给定相同集合中的两个分割T和S,如果每个T的component包含在、或等于S的component,那么叫T是S的refinement。当T = / {=}\mathllap{/\,} S的时候,作者叫T是S的proper refinement,如此,T能够通过分割S的一个或多个区域来获得。这个时候,我们说T is finer than S, and S is coarser than T.

Definition 2 A segmention S is too coarse when there exists a proper refinement of S that is not too fine

Definition 2: 当存在S的proper refinement is not too fine, 此时S is too coarse(分割太粗糙,分割程度还不够大,还能继续分割,内部的两个区域内还是有明显的边界

如果一个segmentation的region能被分割并生成一个分割区域,而且这个分割中在相邻的区域由boundary的evidence,那么这个初始分割有太少的区域??(少和有evidence有什么关系)

Property 1 For any (finite) graph G = ( V   , E   ) G = (V\ ,E\ ) there exists some segmentation S that is neither too coarse nor too fine.

Property 1 :对于任何有限的G,存在一些分割S既不too coarse也不too fine
很好理解,当全部的图片时一个component时,is too corase, 继续往下分割,一定会有too fine,而二者之间就是既不too coarse也不too fine
Algorithm 1:
在这里插入图片描述
输入:graph G = ( V , E   ) G=(V, E\ ) 有n个顶点和m个边
输出:V分割成components S = ( C 1 , . . . , C r ) S = (C_1, ... ,C_r)

流程如下
Step 0: 对E进行递增排序, π = ( o 1 , . . .   , o m ) \pi = (o_1,...\ ,o_m)
Step 1: 初始一个分割 S 0 S_0 ,每个顶点 v i v_i 都在自己的component中
Stpe 2:
for( int q=1; q<=m; q++)
{
Step 3:
S q 1 S_{q-1} 生成 S q S_q 的方法:
v i v_i v j v_j 表示被第q个edge连接的顶点, O q = ( v i   , v j   ) O_q = (v_i\ , v_j\ ) 。如果, v i v_i v j v_j 分别在 S q 1 S_{q-1} 的不相交的component, 并且 w   ( O q   ) w\ (O_q\ ) 比这些component的Int都小,那么将这两个component合并,否则什么都不做。设 S q 1 S_{q-1} C i q 1 C^{q-1}_i 包含 v i v_i , C j q 1 C^{q-1}_j 包含 v j v_j , 如果 C i q 1 C^{q-1}_i = / {=}\mathllap{/\,} C j q 1 C^{q-1}_j 并且 w   ( O q   ) M i n t   ( C i q 1 , C j q 1   ) w\ (O_q\ ) \le Mint\ (C^{q-1}_i,C^{q-1}_j\ ) ,如此 S q S_q 可以通过合成 C i q 1 C^{q-1}_i C j q 1 C^{q-1}_j 来得到,否则 S q = S q 1 S_q = S_{q-1}
}
Step 4: return S = S m S = S^m

我的理解是, I n t Int 代表一个component中的最不相似的部分, O q O_q 代表在两个component之外的连接两个component最相似的边,如果在component之外最相似的比component之内最不相似的还不相似,那么这个边就不会被该component接受为“自己人”,如果两个component都不认同该边为“自己人”,那么两个component就不会通过这个“外人”来连接合并。

接下来是几个定理的证明:

Lemma 1: In Step 3 of the algorithm, when considering edge O q O_q , if two distinctcom-ponents are considered and not merged then one of these two components will be in the final segmentation. Let C i q e C_i^{q-e} and C j q e C_j^{q-e} denote the two components connected by edge O q = ( v i   , v j ) O_q=(v_i\ ,v_j) when this edge is considered by the algorithm.The neither C i = C i q e C_i=C_i^{q-e}
or C j = C j q e C_j=C_j^{q-e} ,where C i C_i is the component containing v i v_i and C j C_j is the component containing v j v_j in the final segmentation S S .

Lemma 1:如果两个区域没能合并到一块,那么必然会有一个留到最后。
Proof :因合并失败,所以可知在其中一个component中 w   ( O q ) > I n t   ( C q e + τ   ( C q e   ) w\ (O_q) > Int\ (C^{q-e}+\tau\ (C^{q-e}\ ) ,因为我们已经对edge进行升序重排,所以往后所有的 w   ( e   ) w\ (e\ ) 必然都大于该component的 I n t Int ,所以往后这个component都没有合并的机会。

Theorem 1: The segmentation S S produced by Algorithm 1 is not too fine according to Definition1,using the region comparison predicate D D defined in (3).

Theorem 1:通过算法1得出的 S S 不是 too fine。
Proof:反证法,假设有一区域 C S C \in S ,将 C C 分成两个区域 A A B B ,设 A A B B 之间有一个边界,如此一来可知 D i f ( C i   , C 2 ) > M I n t   ( C 1   , C 2 ) Dif(C_i\ ,C_2)>MInt\ (C_1\ ,C_2) ,由 D i f Dif 定义可知, D i f = w   ( O q   ) Dif = w\ (O_q\ ) (同为两个component之间相连接的最小权重),但如果 A A B B C C 的一部分,则 w   ( O q   ) M i n t   ( C i q 1 , C j q 1   ) w\ (O_q\ ) \le Mint\ (C^{q-1}_i,C^{q-1}_j\ ) ,矛盾,所以 A A B B 之间有边界不成立。

Theorem 2: The segmentation S S produced by Algorithm 1 is not too coarse according to Definition 2 ,using the region comparison predicate D D defined in (3).

Theorem 2:通过算法1得出的 S S 不是 too coarse。
Proof:也用反证法,同Theorem 1的证明。

Theorem 3: The segmentation produced by Algorithm 1 does not depend on which non-decreasing weight order of the edges is used.

Theorem 3:对于排序好的edge,相同权重的边的顺序不会影响算法1的分割结果。
Proof:分情况讨论之。

I和J连接相同区域
I和J连接三个区域
I和J连接四个区域
先I后J
先J后I
I J 权重相同
互不影响
I 连接A B, J 连接B C
互不影响
两种顺序
如果I能和合并AB,而J不能合并BC,结果: I合并AB
如果I能和合并AB,而J不能合并BC,结果: I合并AB
如果I不能合并AB,而J能合并BC,结果:J合并BC
如果I能合并AB,J能合并BC,那么会先合成AB为D, 见下方公式1,D和C会通过J合成E,结果:ABC合并
如果I不能合并AB,而J能合并BC,结果:J合并BC
如果I能合并AB,J能合并BC,那么会先合成BC为F, 见下方公式2,D和A会通过I合成E,结果:ABC合并

公式1: I n t   ( D   ) = w ( I   ) + τ > w ( J   ) Int\ (D\ )= w(I\ )+ \tau > w(J\ )
公式2: I n t   ( F   ) = w ( J   ) + τ > w ( I   ) Int\ (F\ )= w(J\ )+ \tau > w(I\ )

4.1 Implementation Issues and Running Time

作者分割区域S的实现,是通过一个不相交的forest的rank和path compression联合。

  • 时间复杂度:第一部分:给权重排序,复杂度是O(m logm).
    step1-3花费了O(malpha(m))时间 , alpha是增长的非常慢的逆Ackerman函数。(因为逆Ackerman函数增长很慢,所以可以看作常数,这是算法时间和像素点个数成线性的原因。

作者对每个顶点用u->find来检查是否两个顶点在相同的component中,用u->join来聚合两个component。因此每条边最多有三条disjoint-set操作(find, join, size)。

如果知道每个component的size和Int的话,每次的MInt的计算花费的时间都是固定的。每次聚合的时候可以花固定的时间保留一个component的Int,造成合并的边就是一个component的MST的最大的权重边。

后加入 M S T MST 的edge的权重必然大于之前所有的,因为处理的顺序就是按edge的权重大小排序的,从公式的角度看,如果不考虑阈值函数, w   ( e   ) w\ (e\ ) 必然不是最大,但是如果阈值函数够大,就能实现新来的edge权重比Int还大而且还能合并的情况。

由引理1可知,造成合并的边是两个被合并的component之间的最小的权重的边。聚合后的component的size就是两个component的size之和。

5.Results ofr Grid Graphs

  • 先考虑单颜色图像,每个顶点有八个相连的,如果有n个顶点,那么算法时间复杂度是 O   ( n   log n ) O\ (n\ \log n) ,顶点之间的权值是由像素间亮度差异决定的:
    w   ( ( v i   , v j   ) ) = I   ( p i )     I   ( p j ) w\ ((v_i\ ,v_j\ )) = |I\ (p_i)\ -\ I\ (p_j)|

在计算权值之前会用 σ \sigma =0.8的高斯平滑处理一下,作为数字化的补偿(有个正则化没搞懂,希望能有人解答一下)这个平滑不会产生什么可见的影响,但有利于去除伪阴影。

  • 对于彩色的图片,作者在三个通道上各处理一次,然后取这三个component集合的交集。此外,如果两个相邻的顶点在三个channel中都在一个component中,那么把这两个放到一个component中。还可以只处理一次,权重的测量方法是像素在一些颜色空间上的距离,但是处理三次是最好的。

影响运算的参数k,如果k大,那么分出来的component就是大的,如何设置取决于分辨率和需要的细致程度。

6.Results ofr Nearest Neighbor Graphs

一种常见的图像分割方法是将每个像素映射到一些feature sapce中的point内,然后寻找相似point的簇。作者用之前提到的基于图的分割算法来找到相似点的簇,连接在feature space中相邻的 ( v i   , v j   ) (v_i\ ,v_j\ ) ,而不是图像网格。有两种方法,一种是找附近的固定个数的最近的近邻点,另一种是一定范围内的所有的近邻点。无论如何,都不想考虑全部的O(n^2)个feature point。

两个顶点之间的权重是两个对应的Point(因为已经把像素map到point(x, y, r, g, b)了)在特征空间的距离。作者使用欧式距离来计算权重。

  • I n t   ( C   ) Int\ (C\ ) 对于特征空间中特征点的含义:指明连接一些C中的feature point到一个feature space 中的单独的volume所需要扩张的最小半径。

作者想用一个半径是r的球来代替每个feature point。由 M S T MST 的定义可知,只有当 r I n t   ( C   ) / 2 r \ge Int\ (C\ )/2 时,这些feature point的并集才会形成一个单独的connect volume.

  • D i f   ( C 1 , C 2   ) Dif\ (C_1,C_2\ ) 的含义:连接至少 C 1 C_1 C 2 C_2 中一个点的要扩张的最小半径,

  • 时间复杂度:先是像素映射的运算O(n), 然后是分割方法的时间O(n log n).

作者使用ANN算法[1]来找到每个点的近似近邻,找10个近邻点。神经网络方法算法也能找到近似近邻,这两个都比找实际的近邻运算速度快。

作者的基于图的方法,所有graph中的邻居都是image中的邻居。因此,有的点可能在image上里的很远但仍然是近邻 (只要他们足够颜色相似而且中间的图像像素颜色不同)。在image中断开的区域可能分段,但这在grid-graph中不会发生(在grid-graph中点的空间距离和聚合无关)。

作者用了上述两种方法
1.使用图像网格来定义图像像素之间的局部邻域
2.将图像像素映射到feature space 中的点
测试算法,效果都不错

最后,是代码解读部分

猜你喜欢

转载自blog.csdn.net/McEason/article/details/99543609