基于graph的图像分割算法:Efficient Graph-Based Image Segmentation

Reference:
[1] Felzenszwalb, P.F. & Huttenlocher, D.P. International Journal of Computer Vision (2004) 59: 167. https://doi.org/10.1023/B:VISI.0000022288.19776.77

这篇文章阐述了一种传统的图像分割的方法,不需要任何的先验知识,原理也十分简单易懂。它是著名的标定框提取算法Selective search的基础。

Efficient Graph-Based Image Segmentation

这篇文献将图像的所有像素点视为一个无向图 G = ( V , E ) G=(V,E) G=(V,E)的节点,将各条边 e = ( v i , v j ) ∈ E e=(v_i,v_j)\in E e=(vi,vj)E对应于每一对相邻节点的连接。其权值 w ( v i , v j ) w(v_i,v_j) w(vi,vj)为相邻两个节点的差。

分割算法中,最极端的情况是将每个像素都视为一个子图。该算法的初始化将图像分割为单个像素,并逐步进行融合,形成越来越少但越来越大的分割区域。给出一些定义:
1、Internal Difference I n t ( ⋅ ) {\rm Int}(\cdot) Int()
定义 I n t ( C ) {\rm Int}(C) Int(C)为节点集 C C C的最小生成树(Minimum Spanning Tree,MST)的最大权值。记为:
I n t ( C ) = max ⁡ e ∈ M S T ( C , E ) w ( e ) I n t ( C ) = 0    i f   o n l y   o n e   n o d e {\rm Int}(C)=\max_{e\in MST(C,E)}w(e)\\ {\rm Int}(C)=0\ \ {\rm if \ only\ one\ node} Int(C)=eMST(C,E)maxw(e)Int(C)=0  if only one node

2、Component Difference D i f ( ⋅ ) {\rm Dif}(\cdot) Dif()
定义 D i f ( C i , C j ) {\rm Dif}(C_i,C_j) Dif(Ci,Cj)为连接两个子图的最小权值。记为:
D i f ( C i , C j ) = min ⁡ v i ∈ C i , v j ∈ C j , ( v i , v j ) ∈ E w ( v i , v j ) {\rm Dif}(C_i,C_j)=\min_{v_i\in C_i,v_j \in C_j,(v_i,v_j)\in E}w(v_i,v_j) Dif(Ci,Cj)=viCi,vjCj,(vi,vj)Eminw(vi,vj)
如果不存在连接,则其 D i f ( C i , C j ) {\rm Dif}(C_i,C_j) Dif(Ci,Cj) ∞ \infin

3、基于以上定义,我们可以判断两个相邻子图间是否存在边界,判断方式如下:
D ( C i , C j ) = { T r u e D i f ( c i , c j ) > min ⁡ { I n t ( c i ) , I n t ( c j ) } F a l s e o t h e r w i s e {\rm D}(C_i,C_j)=\left\{ \begin{aligned} True\qquad {\rm Dif}(c_i,c_j)>\min\{{\rm Int}(c_i),{\rm Int}(c_j)\}\\ False\qquad otherwise\qquad\qquad\qquad\qquad\qquad \end{aligned} \right. D(Ci,Cj)={TrueDif(ci,cj)>min{Int(ci),Int(cj)}Falseotherwise

即,当图间距离大于图内距离时,其就有大概率可以成为分割的边缘。但这种判断方法有个缺陷:如果子图的像素点很少(尤其是单像素的情况),它的周边成为边缘的概率会变大,所以要对小区域进行惩罚。其判断准则演变为:
D i f ( C i , C j ) > min ⁡ { I n t ( C i ) + k ∣ C i ∣ , I n t ( C j ) + k ∣ C j ∣ } {\rm Dif}(C_i,C_j)>\min\{{\rm Int}(C_i)+\frac{k}{|C_i|},{\rm Int}(C_j)+\frac{k}{|C_j|}\} Dif(Ci,Cj)>min{Int(Ci)+Cik,Int(Cj)+Cjk}

其中 ∣ C i ∣ |C_i| Ci C i C_i Ci区域的大小。

Algorithm Process

有了以上定义,算法流程可以归结为:
(1)初始化
将图片中的每个像素设为一个子图component。显然每个区域有 I n t ( C i ) = 0 {\rm Int}(C_i)=0 Int(Ci)=0。然后将所有edges进行升序排序,可得到 e ∈ E = { e 1 , e 2 , . . . e m } e \in E = \{e_1, e_2, ... e_m\} eE={e1,e2,...em}
(2)迭代( q = 1 , 2 , . . . , m q=1,2,...,m q=1,2,...,m
Step 1:提取边 e q = ( v i , v j ) e_q=(v_i,v_j) eq=(vi,vj),其中 v i ∈ C i v_i\in C_i viCi, v j ∈ C j v_j \in C_j vjCj
Step 2:当 C i ≠ C j C_i \neq C_j Ci̸=Cj时,如果 D ( C i , C j ) = F a l s e D(C_i, C_j)=False D(Ci,Cj)=False,则将 C i C_i Ci C j C_j Cj融合,同时使 I n t ( C i ∪ C j ) = w ( e q ) {\rm Int}(C_i \cup C_j)=w(e_q) Int(CiCj)=w(eq)
Step 3: q ← q + 1 q \gets q+1 qq+1,返回Step 1。

Results

文献中整个算法的超参数仅有两个:一个是上述提到的K值,还有是高斯滤波器的标准差。基于graph的图像分割算法:Efficient Graph-Based Image Segmentation_第1张图片

你可能感兴趣的:(图像处理,图信号处理)