📄 fcm.m
字号:
function [V1,f]=fcm(hist,c,V)
%%hist1为直方图信息,c为聚类数,V为聚类中心矩阵,
%计算聚类目标函数
%欧式距离
I=imread('E:\MATLAB6p5\work\我的程序\ga_fcm_levelset\rice.tif');
hist=imhist(I);
c=2;
V=round(rand(1,c)*255);
a=size(hist,1);
dist = zeros(a,c);
for k=1:a
for i=1:c
dist(k,i)=sqrt(k-V(i));
end
end
%求隶属度
m=2;%m为加权指数
u = zeros(a,c);
b=0;
ht=0;
for k=1:a
for i=1:c
a_a=dist(k,i);
if a_a==0
temp=0;
else
temp=(1/a_a)^(2/(m-1));
end
ht=ht+temp;
end
end
for k=1:a
for i=1:c
if dist(k,i)==0
u(k,i)=0;
else
u(k,i)=abs(ht/(dist(k,i)^(2/(m-1))));
end
end
end
%聚类中心更新
div_1=zeros(1,c);div_2=zeros(1,c);
for i=1:c
for k=1:a
div_1(i)=u(k,i)^m*hist(k)*k+div_1(i);
div_2(i)=u(k,i)^m*hist(k)+div_2(i);
end
if div_2(i)==0
v_out(i)=V(i);
else
v_out(i)=div_1(i)/div_2(i);
end
end
%求目标函数
J=0;
for i=1:c
for k=1:a
J=abs((u(k,i)^m*dist(k,i)^2*hist(k)))+J;
end
end
%适应度函数计算
f=1/(1+J);
%参数返回
U=u;
J1=J;
V1=v_out;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -