基于模糊C均值聚类(FCM)的图像分割原理
图像分割概述
图像分割就是把图像细分为构成它的对象或子区域,这些区域是互不相交的,每个区域都满足特定区域的一致性。分割的程度主要取决于人们想要解决的问题,当感兴趣的区域或对象已经被区分出来,分割就算是完成了。计算机视觉中的图像理解,包括目标检测、特征提取和目标识别都依赖于图像分割的质量。
目前,图像分割算法一般书围绕高亮度值的两个基本特性设计的:不连续性和相似性。亮度值的不连续性的应用途径主要是基于像素点特性,如灰度值,的不连续变化分割图像,如最常用的边缘检测。而利用亮度值的相似性可以形成一套机制,即依据事先指定的准则将图像分割为相似的区域。一些实例包括门限处理、区域分离、区域生长和聚类等。而采用模糊C均值聚类及其扩展算法进行图像分割的好处是避免了阈值的设定问题,聚类的过程不需要人工干预,只需输入预想的分类数目即可实现自动化的图像分割。
FCM聚类算法(Fuzzy C- Means)
1. FCM原理
模糊C均值聚类- FCM的核心就是“模糊”,相较于K-means这种“硬”聚类,FCM提供了更为灵活的聚类结果。对于图像中像素点的分割往往并不能划分成明显分离的簇类,讲一个对象划分到一个特定的簇是由一些不符合客观认知的。
模糊指的就是对每个对象和每个簇类赋予一个权值,指明一个对象属于该簇的可能程度即可。当然基于概率的方法也可以给出一个权值,但是实际情况中往往很难给出一个合适的统计模型用以计算权值,所以自然的,非概率特性的FCM聚类算法就是一个比较好的选择。
2. FCM聚类流程
- 设置目标函数的精度,模糊指数与算法的最大迭代次数
- 初始化隶属度矩阵 U k U^{k} Uk
- 计算聚类中心 C C C
- 更新隶属度矩阵 U k + 1 U^{k+1} Uk+1
- 判断是否满足迭代终止条件,如果不满足则继续进行3,4
- 如果满足终止条件则停止迭代并返回聚类的簇类结果。
3. 具体步骤
Step 1. 初始化隶属度矩阵
FCM模糊聚类算法中将只取
1
1
1或
0
0
0的普通集合概念推广到
0
→
1
0\to1
0→1区间内的多个取值,即隶属度,用“隶属度”来描述数据点和聚类中心之间的隶属关系。
U
n
×
m
(
0
)
=
[
u
i
j
]
U^{(0)}_{n\times m} = [u_{ij}]
Un×m(0)=[uij]
在公式(1)中,
U
n
×
k
(
0
)
U_{n\times k}^{(0)}
Un×k(0)表示初始隶属度矩阵,
n
n
n表示数据集中数据对象的个数,
m
m
m表示簇类的个数,
u
i
j
u_{ij}
uij表示数据对象
x
i
x_i
xi对簇类中心
c
j
∈
C
=
[
c
j
∈
[
1
,
2
,
…
,
m
]
]
c_j\in C=[c_{j\in[1,2,\dots,m]}]
cj∈C=[cj∈[1,2,…,m]]的隶属度,其数值越大,数据对象越靠近聚类中心
c
j
c_j
cj。
Step 2. 判断是否超过最大迭代次数
设定最大迭代次数 m a x _ i t e r max\_iter max_iter的值,判断当前迭代次数 i t e r iter iter是否超过了最大迭代次数。如果超过了则直接返回聚类结果,如果未超过则继续后续过程。
Step 3. 计算聚类中心
传统均值聚类算法在确定聚类中心时,一般最简单的就是找到属于某一类的所有样本点,然后这一类的类中心就是这些样本点的平均值。而对于FCM模糊聚类而言,在聚类中心
c
j
c_j
cj确定之后,首先将所有点到该类的隶属度求和
∑
i
=
1
n
u
i
j
\sum_{i=1}^{n}u_{ij}
∑i=1nuij,然后对于每个点,隶属度除以隶属度和就是所占的比重,乘以
x
i
x_i
xi就是当前数据对象点对于这个类
j
j
j的贡献值:
c
j
=
∑
i
=
1
n
(
u
i
j
m
⋅
x
i
)
∑
i
=
1
n
u
i
j
m
=
∑
i
=
1
n
(
u
i
j
m
∑
i
=
1
n
u
i
j
m
⋅
x
i
)
c_j = \frac{\sum_{i=1}^{n}(u_{ij}^{m}\cdot x_i)}{\sum_{i=1}^{n}u_{ij}^{m}} = \sum_{i=1}^{n}(\frac{u_{ij}^{m}}{\sum_{i=1}^{n}u_{ij}^{m}}\cdot x_i)
cj=∑i=1nuijm∑i=1n(uijm⋅xi)=i=1∑n(∑i=1nuijmuijm⋅xi)
如公式(2)中,
c
j
c_j
cj表示第
j
j
j个簇类中心,
n
n
n表示数据集中数据对象的个数,
m
m
m表示聚类簇的个数,
u
i
j
u_{ij}
uij表示对象
x
i
x_i
xi与聚类中心
c
j
c_j
cj之间的隶属度。
Step 4. 更新隶属度矩阵
基于Step 3 中计算所得的各簇类中心点及原始数据集合,通过隶属度计算公式对隶属度矩阵进行更新:
u
i
j
=
1
∑
k
=
1
m
(
∣
∣
x
i
−
c
j
∣
∣
∣
∣
x
i
−
c
k
∣
∣
)
2
m
−
1
u_{ij} = \frac{1}{\sum_{k=1}^{m}(\frac{||x_i-c_j||}{||x_i-c_k||})^{\frac{2}{m-1}}}
uij=∑k=1m(∣∣xi−ck∣∣∣∣xi−cj∣∣)m−121
如公式(3)中,
u
i
j
u_{ij}
uij表示更新后的对象
x
i
x_i
xi和聚类中心
c
j
c_j
cj之间的隶属度,
m
m
m表示聚类的簇类数量。由分式的下半部分可知,其中分子表示对象
x
i
x_i
xi到簇类中心
c
j
c_j
cj的距离,而分母则表示当前对象到所有聚类中心的距离之和,因此,当对象
x
i
x_i
xi越靠近聚类中心
c
j
c_j
cj,则下半部分整体值越小,隶属度
u
i
j
u_{ij}
uij则越大。
Step 5. 判断是否满足迭代终止条件
在不超过最大迭代次数的前提下,迭代终止条件如下:
max
i
j
{
∣
u
i
j
(
i
t
e
r
)
−
u
(
i
t
e
r
−
1
)
∣
}
≤
ε
\max_{ij}{\{|u_{ij}^{(iter)}-u^{(iter-1)}|\}}\le\varepsilon
ijmax{∣uij(iter)−u(iter−1)∣}≤ε
如公式(4)中,
u
i
j
(
i
t
e
r
)
u_{ij}^{(iter)}
uij(iter)表示在当前迭代次数
i
t
e
r
iter
iter下更新的对象
x
i
x_i
xi与簇类中心
x
j
x_j
xj之间的隶属度,
u
i
j
(
i
t
e
r
−
1
)
u_{ij}^{(iter-1)}
uij(iter−1)表示更新之前的对象
x
i
x_i
xi与聚类中心
x
j
x_j
xj之间的隶属度,
ε
\varepsilon
ε表示误差阈值。上式含义为,继续迭代,隶属度不再发生较大变化时,即认为隶属度不变,即已经达到局部最优或全局最优状态,迭代结束,并返回模糊聚类结果。
FCM算法推导
-
定义数据集大小为 m m m,聚类中心点个数为 c c c, u i j u_{ij} uij为第 j j j个中心点的隶属度,并且 0 < u i j < 1 0<u_{ij}<1 0<uij<1,显然有 ∑ j = 1 c u i j = 1 , i = 1 , 2 , 3 , ⋯ , m \sum_{j=1}^{c}u_{ij}=1,i=1,2,3,\cdots,m ∑j=1cuij=1,i=1,2,3,⋯,m
-
类似于K-means算法中的距离概念,定义:
J = ∑ i = 1 n ∑ j = 1 c u i j α ∣ ∣ x i − c j ∣ ∣ 2 J = \sum_{i=1}^{n}\sum_{j=1}^{c}u_{ij}^{\alpha}||x_i-c_j||^2 J=i=1∑nj=1∑cuijα∣∣xi−cj∣∣2
其中 α \alpha α为超参数, ∣ ∣ x i − c j ∣ ∣ ||x_i-c_j|| ∣∣xi−cj∣∣表示第 i i i个数据到第 j j j个中心的距离。显然为了让分类更加合理, J J J应当尽可能地小。换言之,当 J J J不再减小或者减小幅度足够小时,算法结束。 -
运用拉格朗日乘子法合并函数 J J J和约束条件 ∑ j = 1 c u i j = 1 , i = 1 , 2 , … , m \sum_{j=1}^{c}u_{ij}=1,i=1,2,\dots,m ∑j=1cuij=1,i=1,2,…,m得到
J = ∑ i = 1 n ∑ j = 1 c u i j α ∣ ∣ x i − c j ∣ ∣ 2 + ∑ i = 1 m λ i ( ∑ j = 1 c u i j − 1 ) J = \sum_{i=1}^{n}\sum_{j=1}^{c}u_{ij}^{\alpha}||x_i-c_j||^2 + \sum_{i=1}^{m}\lambda_i(\sum_{j=1}^{c}u_{ij}-1) J=i=1∑nj=1∑cuijα∣∣xi−cj∣∣2+i=1∑mλi(j=1∑cuij−1)
这里对输入参数求导,从而得到目标函数达到最小值的条件:
z j = ∑ i = 1 m u i j α x i ∑ i = 1 m u i j α u i j = 1 ∑ k = 1 c ( d i j d i k ) 2 α − 1 z_j = \frac{\sum_{i=1}^{m}u_{ij}^{\alpha}x_i}{\sum_{i=1}^{m}u_{ij}^{\alpha}}\\ u_{ij} = \frac{1}{\sum_{k=1}^{c}(\frac{d_{ij}}{d_{ik}})^{\frac{2}{\alpha-1}}} zj=∑i=1muijα∑i=1muijαxiuij=∑k=1c(dikdij)α−121
传统FCM图像分割实例
对于上图分别进行FCM聚类分割与K-means聚类分割的效果图如下:
K=3的K- means
K=3的FCM
K=4的K-means
K=4的FCM
FCM算法改进
对于FCM算法的改进这里仅包括在图像分割领域常有的改进,其中包括:FCM_S1,FCM_S2,EnFCM,FGFCM,FLICM,NWFCM,KWFLICM,NDFCM,FRFCM
未完待续
1. FLICM
FLICM是一种基于局部空间信息模糊聚类的图像分割算法。它融合了新的正则因子
G
k
i
G_{ki}
Gki,表达了该聚类充分利用局部空间信息和局部灰度信息,可以达到算法抵抗噪声干扰的目的。其表达形式为:
G
k
i
=
∑
j
∈
N
i
;
i
≠
j
1
d
i
j
+
1
(
1
−
u
k
j
)
m
∣
∣
x
j
−
v
k
∣
∣
2
G_{ki} = \sum_{j\in N_i;i\ne j}\frac{1}{d_{ij}+1}(1-u_{kj})^m||x_j-v_k||^2
Gki=j∈Ni;i=j∑dij+11(1−ukj)m∣∣xj−vk∣∣2
公式(8)中, x i x_i xi是中心像素点, x j x_j xj是邻域像素, d i j = ∣ ∣ x j − v k ∣ ∣ d_{ij}=||x_j-v_k|| dij=∣∣xj−vk∣∣表示邻域像素到中心像素的欧式距离, u k j u_{kj} ukj表示像素 x i x_i xi属于第 k k k类的隶属度, v k v_k vk表示第 k k k类的聚类中心, m m m是模糊加权指数。
FLICM算法所对应的聚类目标函数为:
J
m
=
∑
i
=
1
N
∑
k
=
1
c
[
u
k
i
m
∣
∣
x
i
−
v
k
∣
∣
2
+
G
k
i
]
J_m = \sum_{i=1}^{N}\sum_{k=1}^{c}[u_{ki}^{m}||x_i-v_k||^2+G_{ki}]
Jm=i=1∑Nk=1∑c[ukim∣∣xi−vk∣∣2+Gki]
公式(9)中,
x
i
x_i
xi表示第
i
i
i个像素的灰度值,
v
k
v_k
vk表示第
k
k
k类的聚类中心,
u
k
j
u_{kj}
ukj表示像素
x
i
x_i
xi属于第
k
k
k类的隶属度,
N
N
N是像素个数,
m
m
m是模糊加权指数。
再满足
∑
k
=
1
c
u
k
i
=
1
,
u
k
i
∈
[
0
,
1
]
,
i
=
1
,
2
,
…
,
N
\sum_{k=1}^{c}u_{ki}=1,u_{ki}\in[0,1],i=1,2,\dots,N
∑k=1cuki=1,uki∈[0,1],i=1,2,…,N的条件下,聚类中心和隶属度迭代表达式为:
u
k
i
=
1
∑
j
=
1
c
(
∣
∣
x
i
−
v
k
∣
∣
2
+
G
k
i
∣
∣
x
i
−
x
j
∣
∣
2
+
G
j
i
)
1
m
−
1
u_{ki} = \frac{1}{\sum_{j=1}^{c}(\frac{||x_i-v_k||^2+G_{ki}}{||x_i-x_j||^2+G_{ji}})^{\frac{1}{m-1}}}
uki=∑j=1c(∣∣xi−xj∣∣2+Gji∣∣xi−vk∣∣2+Gki)m−111
v k = ∑ i = 1 N u k i m x i ∑ i = 1 N u k i m v_k = \frac{\sum_{i=1}^{N}u_{ki}^{m}x_i}{\sum_{i=1}^{N}u_{ki}^{m}} vk=∑i=1Nukim∑i=1Nukimxi
公式(11)中与传统FCM算法中的 v k v_k vk表达式相同,但是二者的聚类目标函数并不相同。
1.1 FLICM的特征
FLICM中定义了一种新颖的模糊因子用以替代ENFCM和FCM- S及其变体中使用的参数 a a a和FGFCM中使用的 λ \lambda λ,新的模糊局部邻域因子可以自动确定空间和灰度关系,并且完全不需要任何参数选择。
- 它相对独立于噪声的类型,因此,在没有先验的噪声知识情况下,他是FCM聚类变种的更好的选择。
- 模糊局部约束以模糊方式同时合并了局部空间和局部灰度关系。
- 可以自动确定模糊局部约束,因此不需要任何参数的确定。
- 通过模糊的局部约束自动实现图像细节和噪点之间的平衡,同时增强了聚类性能。
2. NW-FCM
3. GG- FCM
一种半监督的FCM,其中通过考虑每个像素的局部邻域来确定几何条件。
4. FCM-S
其中对经典FCM的目标函数进行了修改,以补偿强度的不均匀性,并允许像素的标记受到其紧邻像素的影响。FCM-S的一个缺点就是每一次迭代过程中都需要计算邻域标签。
FCM-S允许像素的标记受到紧邻像素影响的方式为,以邻域效应充当正则化器,并使解决方案偏向于分段均质标记,修改后的目标函数为:
J
m
=
∑
i
=
1
N
∑
j
=
1
c
u
j
i
m
∣
∣
x
i
−
v
j
∣
∣
2
+
a
N
R
∑
i
=
1
N
∑
j
=
1
c
u
j
i
m
∑
r
∈
N
i
∣
∣
x
r
−
v
j
∣
∣
2
J_m = \sum_{i=1}^{N}\sum_{j=1}^{c}u_{ji}^{m}||x_i-v_j||^2+\frac{a}{N_{R}}\sum_{i=1}^{N}\sum_{j=1}^{c}u_{ji}^{m}\sum_{r\in N_{i}}||x_r-v_j||^2
Jm=i=1∑Nj=1∑cujim∣∣xi−vj∣∣2+NRai=1∑Nj=1∑cujimr∈Ni∑∣∣xr−vj∣∣2
公式(12)中
x
i
x_i
xi是第
i
i
i个像素的灰度值,
N
N
N是像素总数,
v
j
v_j
vj是第
j
j
j个中心的原型值,
u
j
i
u_{ji}
uji表示第
i
i
i个像素相对于聚类
j
j
j的模糊隶属关系,
N
R
N_{R}
NR是其基数,
x
r
x_r
xr代表
x
i
x_i
xi的邻居,
N
i
N_i
Ni代表落入像素
x
i
x_i
xi周围窗口的邻居集合。参数
a
a
a用于控制紧邻项的效果。根据定义,每个采样点
x
i
x_i
xi满足
∑
c
u
j
i
=
1
\sum_cu_{ji}=1
∑cuji=1的约束。
隶属度矩阵与聚类中心点的计算如下:
u
i
j
=
(
∑
k
=
1
c
(
∣
∣
x
j
−
v
i
∣
∣
2
+
α
N
R
∑
r
∈
N
j
∣
∣
x
r
−
v
i
∣
∣
2
∣
∣
x
j
−
v
k
∣
∣
2
+
α
N
R
∑
r
∈
N
j
∣
∣
x
r
−
v
k
∣
∣
2
)
1
m
−
1
)
−
1
u_{ij}=(\sum_{k=1}^{c}(\frac{||x_j-v_i||^2+\frac{\alpha}{N_{R}}\sum_{r\in N_{j}}||x_r-v_i||^2}{||x_j-v_k||^2+\frac{\alpha}{N_{R}}\sum_{r\in N_{j}}||x_r-v_k||^2})^{\frac{1}{m-1}})^{-1}
uij=(k=1∑c(∣∣xj−vk∣∣2+NRα∑r∈Nj∣∣xr−vk∣∣2∣∣xj−vi∣∣2+NRα∑r∈Nj∣∣xr−vi∣∣2)m−11)−1
v i = ∑ j = 1 n u i j m ( x j + α N R ∑ r ∈ N j x r ) ( 1 + α ) ∑ j = 1 n u i j m v_i = \frac{\sum_{j=1}^{n}u_{ij}^{m}(x_j+\frac{\alpha}{N_R}\sum_{r\in N_{j}}x_r)}{(1+\alpha)\sum_{j=1}^{n}u_{ij}^{m}} vi=(1+α)∑j=1nuijm∑j=1nuijm(xj+NRα∑r∈Njxr)
公式(14)分子中的 ∑ r ∈ N j x r N R \frac{\sum_{r\in N_{j}}x_r}{N_R} NR∑r∈Njxr实际上是窗口内 x i x_i xi附近的紧邻像素点的平均灰度值,即由图像像素周围的所有相邻平均值组成的均值滤波图像。
5. FCM-S1,FCM-S2
FCM- S的两个变体用一减少计算时间,这两种算法分别引入了额外的均值和中值滤波图像,这些图像可以预先计算,以代替FCM-S的邻域项,因此,FCM-S1与FCM-S2的执行时间都大大减少了。
6. ENFCM
增强的FCM算法来加速图像的分割过程。首先由原始图像和每个像素的局部邻域平均灰度级形成线性加权和图像,然后,基于灰度直方图而不是求和图像的像素执行聚类。由于图像中的灰度级数通常比其像素小得多,因此减少了ENFCM算法的计算时间。
7. FGFCM
该算法结合了空间信息,局部像素邻域的强度和图像中的灰度级数。该算法从原始图像及其局部空间和灰度邻域形成非线性加权和图像,由于基于灰度直方图进行聚类,因此FGFCM的计算时间非常短,分割图像的质量得到了很好的增强。
8. ENFCM与FGFCM的问题
ENFCM与FGFCM具有相同的关键参数 a a a或者 λ \lambda λ。此参数的作用是用于控制原始图像及其对应的均值或中值滤波图像之间的折中。这个参数对于性能有很大的影响,但是这个参数是矛盾的,若是要对抗图像中存在的大量噪声,就需要将这个参数设置的比较大,另一方面,需要设置足够小的参数用于保持图像的清晰度和细节。因此, a a a的确定实际上在某种程度上取决于噪声。对于图像中的所有像素邻域, a a a的值是固定的。