• 【图像分割】基于萤火虫算法实现图像聚类分割附matlab代码


    1 内容介绍

    为了提高图像的分割效果,提出一种萤火虫算法优化聚类的图像分割方法。获得最大聚类优化目标函数,采用萤火虫算法对目标函数进行求解,找到图像的最佳聚类个数,根据最佳聚类个数对图像进行分割,通过仿真实验对分割效果进行测试。结果表明,该方法可以迅速、准确找到最佳阈值,提高图像分割的准确度和抗噪性能,可以较好地满足图像分割实时性要求。

    2 部分代码

    %% Differential Evolution image color quantization using clustering

    clear;

    clc;

    warning('off');

    img=imread('r.jpg');

    img=im2double(img);

    % Separating color channels

    R=img(:,:,1);

    G=img(:,:,2);

    B=img(:,:,3);

    % Reshaping each channel into a vector and combine all three channels

    X=[R(:) G(:) B(:)];

    %% Starting DE Clustering

    k = 6; % Number of Colors (cluster centers)

    %---------------------------------------------------

    CostFunction=@(m) ClusterCost(m, X);     % Cost Function

    VarSize=[k size(X,2)];           % Decision Variables Matrix Size

    nVar=prod(VarSize);              % Number of Decision Variables

    VarMin= repmat(min(X),k,1);      % Lower Bound of Variables

    VarMax= repmat(max(X),k,1);      % Upper Bound of Variables

    % DE Parameters

    MaxIt=100;         % Maximum Iterations

    nPop=k*2;         % Population Size

    %

    beta_min=0.2;   % Lower Bound of Scaling Factor

    beta_max=0.8;   % Upper Bound of Scaling Factor

    pCR=0.2;        % Crossover Probability

    % Start

    empty_individual.Position=[];

    empty_individual.Cost=[];

    empty_individual.Out=[];

    BestSol.Cost=inf;

    pop=repmat(empty_individual,nPop,1);

    for i=1:nPop

    pop(i).Position=unifrnd(VarMin,VarMax,VarSize);  

    [pop(i).Cost, pop(i).Out]=CostFunction(pop(i).Position);  

    if pop(i).Cost

    BestSol=pop(i);

    end 

    end

    BestRes=zeros(MaxIt,1);

    % DE Body

    for it=1:MaxIt

    for i=1:nPop        

    x=pop(i).Position;        

    A=randperm(nPop);        

    A(A==i)=[];        

    a=A(1);

    b=A(2);

    c=A(3);       

    % Mutation

    beta=unifrnd(beta_min,beta_max,VarSize);

    y=pop(a).Position+beta.*(pop(b).Position-pop(c).Position);

    y=max(y,VarMin);

    y=min(y,VarMax);        

    % Crossover

    z=zeros(size(x));

    j0=randi([1 numel(x)]);

    for j=1:numel(x)

    if j==j0 || rand<=pCR

    z(j)=y(j);

    else

    z(j)=x(j);

    end

    end        

    NewSol.Position=z;

    [NewSol.Cost, NewSol.Out]=CostFunction(NewSol.Position);       

    if NewSol.Cost

    pop(i)=NewSol;           

    if pop(i).Cost

    BestSol=pop(i);

    end

    end

    end    

    % Update Best Cost

    BestRes(it)=BestSol.Cost;    

    % Iteration 

    disp(['In Iteration # ' num2str(it) ': Highest Cost IS = ' num2str(BestRes(it))]);    

    DECenters=Res(X, BestSol);

    end

    DElbl=BestSol.Out.ind;

    % Plot DE Train

    figure;

    plot(BestRes,'--k','linewidth',2);

    title('DE Train');

    xlabel('DE Iteration Number');

    ylabel('DE Best Cost Value');

    %% Converting cluster centers and its indexes into image 

    Z=DECenters(DElbl',:);

    R2=reshape(Z(:,1),size(R));

    G2=reshape(Z(:,2),size(G));

    B2=reshape(Z(:,3),size(B));

    % Attaching color channels 

    quantized=zeros(size(img));

    quantized(:,:,1)=R2;

    quantized(:,:,2)=G2;

    quantized(:,:,3)=B2;

    % Plot Results 

    figure;

    subplot(1,2,1);

    imshow(img);title('Original');

    subplot(1,2,2);

    imshow(quantized);title('Quantized Image');

    3 运行结果

    4 参考文献

    [1]吴鹏. 萤火虫算法优化最大熵的图像分割方法[J]. 计算机工程与应用, 2014.

    博主简介:擅长智能优化算法神经网络预测信号处理元胞自动机图像处理路径规划无人机雷达通信无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

    部分理论引用网络文献,若有侵权联系博主删除。

  • 相关阅读:
    TypeScript入门与编译的配置
    入门数据库Days4
    数据结构与算法之顺序表详解
    linux系统-umask详解
    JavaScript分支语句(if、三元表达式、switch)
    Hadoop3:客户端向HDFS写数据流的流程讲解(较枯燥)
    PASS计算样本量(1)---完全随机设计时两样本率比较
    HTTP协议
    图神经网络(五):MuGNN
    Vue 汉字转拼音;根据拼音首字母排序转二维数组;提取拼音首字母排序。
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/126733218