⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gafcm.asv

📁 这是我自己编的用MATLAB来进行图像分割主要用模糊算法和遗传算法
💻 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 + -