📄 gafcm.asv
字号:
%该文件为gacm算法的主程序clear;clear all;clc; %初始化population=100; %种群数量 可用于外设I=imread('图像地址');%读图像hist=imhist(I); %获取图像的灰度图a=size(hist,1); %计算hist的第一维长度c=2; %可以做成界面的传输量 ,聚类数V00=zeros(population,c); %对聚类中心进行的编码for i=1:population V00(i,:)=round(rand(1,c)*(a-1));end adapt0=zeros(population,1);adapt1=zeros(population,1);adapt2=zeros(population,1);for i=1:population %调用函数,输出适应度 [V00(i,:),adapt0(i)]=fcm(hist,c,V00(i,:)); adapt_averge=mean(adapt0); %计算平均适应度V1=V00; %保留初始化聚类中心adapt1=adapt0; adapt_average1=adapt_average0; generation=100; for k=1:generation s1=select(V1,adapt_value1,population); %制作属于自己的选择算子 s_code1=dec2bin(s1,8); s_code=mat2str(s_code1);for i=1:population %转化为二进制编码 s_code1(i)=strcat(s_code(2*i-1,:),s_code(2*i,:)); end c1=cross(s_code1,population); %制作属于自己的交叉算子 v1=mutation(c1,population); %制作属于自己的变异算子 V2=(bin2dec(v1))'; %转化为十进制编码 for i=1:population [V2(i,:),adapt2(i)]=fcm(hist,c,V2(i,:)); %计算经选择、交叉、变异后的适应度 end adapt_average2=mean(adapt2); %计算平均适应度 if abs(adapt_average2-adapt_average1)<=0.0001 %算法停止条件 break; else V1=V2; adapt1=adapt2; adapt_average1=adapt_average2; endend [max_adapt,i]=max(adapt2); %选取最大适应度值 number=find(adapt2==max_adapt); %具有最大适应度的种群所占比例 % ?如何进行划分 V=zeros(1,c); V=V2(i,:); 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为加权指数 有可能的话可用于外设 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -