📄 fcm-1.m
字号:
function [V2,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); %初始聚类中心 rand 产生c个0-1内的数
a=size(hist,1); %计算hist的第一位长度
dist = zeros(a,c); %产生一个a*c矩阵
for k=1:a
for i=1:c
dist(k,i)=sqrt(k-V(i)); %计算欧式距离 先列后行 (8)式
end
end
%求隶属度
m=2;%m为加权指数 有可能的话可用于外设 (5)式
u = zeros(a,c);
b=0;
ht=0;%ht=zeros(a,1);
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; %将分母的和算出 ht(k)=ht(k)+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))));% u(k,i)=abs(ht(k)/(dist(k,i)^(2/(m-1))));
end
end
end
%聚类中心更新 (9)式
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
%求目标函数 (10)式
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
%适应度函数计算 (11)式
f=1/(1+J);
V2=v_out;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -