基于DSP的FCM图像分割
一、目标
利用VisualDSP++ 5.0、仿真器、EBF-561实验平台实现该算法,并通过该聚类算法实现图像的不同区域的聚类结果。
二、实现方案
实验原理
FCM 聚类算法目标函数为
如果 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更新等式分别为:
对于每一个模糊隶属度,由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; } }
}
|
原文:大专栏 基于DSP的FCM图像分割