基于DSP的FCM图像分割

基于DSP的FCM图像分割


一、目标

利用VisualDSP++ 5.0、仿真器、EBF-561实验平台实现该算法,并通过该聚类算法实现图像的不同区域的聚类结果。

二、实现方案

实验原理

FCM 聚类算法目标函数为

1

如果 p表示每一个样本x_j的维数0,X={x_1,x_2,…x_j,…x_N}是一个p×N矩阵;N表示样本数目,通常表示图像像素数;C表示聚类数目;u_ij⊆U(p×N×C)是矢量x_j隶属于第i类的隶属度函数,满足u_ij∈[0,1]且∑_(i=1)^C▒u_ij =1;聚类中心Z={z_1,z_2,…z_i,…z_c}是 p×C矩阵,u_ij和z_i更新等式分别为:

2

对于每一个模糊隶属度,由m∈(1,∞)控制模糊度的权重指数;

d^2 (x_j,x_i )=∥x_j-z_i∥为相似性测度。

变量说明

p 数据样本维数(灰度图像时为 1);
N 像素点数目
Xi 像素i特征(灰度图像时,表示灰度值);
C 图像分割类别数;
Uij 像素点j属于第i类的隶属度
Zi 第 i 类聚类中心。

实验步骤

1)置目标函数精度ε,模糊指数m(m通常取 2),最大迭代次数T_m;
2)初始化模糊聚类中心 z_i;
3)由式2更新模糊划分矩阵U={u_ij}和聚类中心Z={z_C}
4)若|J(t)-J(t-1)|<ε或c>T_m则结束聚类;否则,t=t+1并转第(3)步骤;
5)由所得U={u_ij}得到各像素点分类结果。

三、核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
int  m=50,k,ran[3];//最大迭代次数 
double center[3],u[3][84*64],sum=0,temp=0;//中心,隶属度

for(i=0;i<3;i++)//初始化聚类中心
{
ran[i]=rand()%(84*64);
center[i]=image[ran[i]];
}

while(m--)//迭代
{

for(i=0;i<3;i++)//计算隶属度
{
for(j=0;j<84*64;j++)
{
sum=0;
for(k=0;k<3;k++)
{
sum=sum+pow(fabs(image[j]-center[i])/fabs(image[j]-center[k]),2);
}
u[i][j]=1/sum;
}
}

for(i=0;i<3;i++)//更新中心点
{
sum=0;
temp=0;
for(j=0;j<84*64;j++)
{
sum=sum+pow(u[i][j],2)*image[j];
temp=temp+pow(u[i][j],2);
}
center[i]=sum/temp;
}
}
for(j=0;j<N;j++)//分类结果
{
if(u[0][j]<u[1][j])
{
if(u[1][j]<u[2][j])
image[j]=100;
else
image[j]=225;
}
else
{
if(u[0][j]<u[2][j])
image[j]=100;
else
image[j]=0;
}
}

}