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

📄 ga_improve_fcm.asv

📁 模糊聚类算法
💻 ASV
字号:
%%%利用改进遗传聚类算法和直方图信息进行图像分割
%%%程序开始

%%初始部分,读取图像及计算相关信息

clear;
close all;
clc;

I=imread('E:\MATLAB6p5\work\我的程序\ga_fcm_levelset\rice.tif');
%I=imread('E:\MATLAB6p5\work\我的程序\ga_fcm_levelset\rice_noise.tif');
%I=imread('E:\MATLAB6p5\work\我的程序\ga_fcm_levelset\Lenna.bmp');
%I=imread('E:\MATLAB6p5\work\我的程序\ga_fcm_levelset\Lenna_noise.bmp');
%I=imread('K:\MATLAB6p5\work\我的程序\ga_fcm_levelset\11561277179451274.bmp');
%I=rgb2gray(I);   
hist=imhist(I);
c=2;%设置聚类数
a=size(hist,1);

V0=round(rand(1,c)*(a-1));%聚类中心初始化


%%程序主干部分
    t0=clock;

    %种群随机初始化,种群数取10,
    population=10;
    
    v0=round(rand(a-1,c)*(a-1));
    
    for i=1:a
        initV(i,:)=round(rand(1,c)*(a-1));
    end
    
    v=initV;
    
    for j=1:a
        [v_out(j,:),f(j)]=fcm(hist,c,v(j,:));%计算适应度函数
    end
   
   %循环搜索,搜索代数取100
    generation=200;
    for k=1:generation
      
        s1=select(v0,f,population);%轮盘赌选择
        
        holdm=s1;%保留父代群体
        
        c1=cross1(s1,k,population,c);%交叉,交叉概率为0.6,0.8
        
        v1=mutation1(c1,k,population);%变异,变异概率为前0.02,中0.03,后0.02  
        
        r1=replace(holdm,v1,hist,c,population);%子优代父,基于浓度的群体更新
               
        for i=1:population
            [v_out_new(i,:),f1(i)]=fcm(hist,c,r1(i,:));%适应度计算
        end
        
        a_max=max(f1);
        
        if a_max<=0.01
            break;
        end
        
        v0=v_out_new;
        f=f1;
    end
       
    v_end(1,1)=round(mean(v_out_new(:,1)));
    v_end(1,2)=round(mean(v_out_new(:,2)));
       
    fu=belong(c,hist,v_end);
    
    a_immage=0.5;%设置分割门限
    fu_abs=abs(fu-a_immage);
    min_a=min(min(fu_abs));%阈值设置
    [i,j]=find(fu_abs==min_a);
    t_opt=mean(mean(i));

    
    t1=clock;
         
   %下面进行阈值分割和显示
   threshold_i=t_opt/(a-1);
   I1=im2bw(I,threshold_i);
   
   disp('算法分割的效果如图所示:');
   disp('源图为:Fifure No.1');
   disp('利用直方图信息进行遗传聚类算法分割后的图像为:Fifure No.2');
   disp('迭代次数为:');
   k
   disp('执行所花的时间为:');
   search_time=etime(t1,t0);
   search_time

   figure(1);
   imshow(I);
   title('源图');

   figure(2);
   imshow(I1);
   title('利用直方图信息进行遗传聚类算法分割后的图像');
   
   BW2 = edge(I1,'canny');%用canny算子提取边缘
   figure(3);
   imshow(BW2);
   
   disp('利用直方图信息进行遗传聚类算法的阈值为:');
   disp(round(t_opt));
   %%程序结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -