1.SLIC算法
SLIC是一种对图像进行无监督聚类得到超像素的一种方法,通过对K-means聚类算法改进得到,有效的降低了计算复杂度。相比于K-mean算法,SLIC算法将每个聚类中心的搜索范围从全图缩小到了
2
S
×
2
S
2S\times 2S
2S×2S。
2.SLIC算法流程
1.SLIC算法是在CIELAB空间对图像进行像素聚类的,所以初始化
K
K
K个聚中心为:
C
=
{
C
k
∣
C
k
=
[
l
k
,
a
k
,
b
k
,
x
k
,
y
k
]
}
C=\{C_k|C_k=[l_k,a_k,b_k,x_k,y_k]\}
C={Ck∣Ck=[lk,ak,bk,xk,yk]},并且假设图像像素为
N
N
N,所以初始化聚类中心的间隔大致为
S
=
N
/
K
S=\sqrt{N/K}
S=N/K。并且在
3
×
3
3\times 3
3×3的邻域寻找梯度最小点,避免聚类中心位于噪点。
(
/
∗
I
n
i
t
i
a
l
z
a
t
i
o
n
∗
/
)
(/*Initialzation*/)
(/∗Initialzation∗/)
2.对于所有的聚类中心
C
k
C_k
Ck,计算聚类中心
2
S
×
2
S
2S\times 2S
2S×2S邻域中像素点
i
i
i的距离
d
(
i
)
=
D
d(i)=D
d(i)=D,并记录下相应的聚类中心编号
l
(
i
)
=
k
l(i)=k
l(i)=k。由于范围为
2
S
×
2
S
2S\times 2S
2S×2S的邻域,所以将会有重叠的像素点,所以在计算重叠区域的像素点时,将会在循环中迭代并保存最近的聚类中心距离和编号。
(
/
∗
A
s
s
i
g
n
m
e
n
t
∗
/
)
(/*Assignment*/)
(/∗Assignment∗/)
3.利用相同聚类中心编号的像素点取距离平均最小来更新新的聚类中心。得到新的聚类中心后与原来的聚类中心计算
L
2
L_2
L2范数得到残差损失
E
E
E,当残差损失
E
E
E小于设定阈值时停止迭代。到此得到所需的
K
K
K个聚类中心,根据i记录的编号得到分割的聚类结果(超像素)
3. 距离度量
SLIC算法在CIELAB颜色空间和欧式空间共同计算像素点之间的距离,所以每个像素点可以表示为
[
l
,
a
,
b
,
x
,
y
]
[l,a,b,x,y]
[l,a,b,x,y]。定义像素之间的距离为:
d
c
=
(
l
j
−
l
i
)
2
+
(
a
j
−
a
i
)
2
+
(
b
j
−
b
i
)
2
(1)
d_c=\sqrt{(l_j-l_i)^2+(a_j-a_i)^2+(b_j-b_i)^2}\tag1
dc=(lj−li)2+(aj−ai)2+(bj−bi)2(1)
d s = ( x j − x i ) 2 + ( y j − y i ) 2 (2) d_s=\sqrt{(x_j-x_i)^2+(y_j-y_i)^2}\tag2 ds=(xj−xi)2+(yj−yi)2(2)
D ′ = ( d c N c ) 2 + ( d s N s ) 2 (3) D^{'}=\sqrt{{(\frac{d_c}{N_c})}^2+{(\frac{d_s}{N_s})}^2}\tag3 D′=(Ncdc)2+(Nsds)2(3)
由于给定簇内的最大空间距离的期望应与采样间隔相对应,所以
N
s
=
S
=
N
/
K
N_s=S=\sqrt{N/K}
Ns=S=N/K;因为颜色距离可以在不同的簇中或者不同的图像中显著变化;所以为了简化将其作为一个常数
m
m
m,并将其扩大
m
m
m被;则距离度量
D
D
D为:
D
=
d
c
2
+
(
d
s
S
)
2
m
2
(4)
D^=\sqrt{{d_c}^2+{(\frac{d_s}{S})}^2m^2}\tag4
D=dc2+(Sds)2m2(4)
则常数 m m m可以作为一个影响因子来调节颜色空间和欧式空间的影响权重。当常数 m m m较大时,欧式空间距离影响更大,分割的区域更接近矩形;当常数 m m m较小时,颜色空间影响更大,更符合图像的边界,但是区域不规则。