?? 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 + -