• 【图像分割】基于matlab萤火虫算法图像聚类分割【含Matlab源码 2106期】


    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
    🍎个人主页:海神之光
    🏆代码获取方式:
    海神之光Matlab王者学习之路—代码获取方式
    ⛳️座右铭:行百里者,半于九十。

    更多Matlab仿真内容点击👇
    Matlab图像处理(进阶版)
    路径规划(Matlab)
    神经网络预测与分类(Matlab)
    优化求解(Matlab)
    语音处理(Matlab)
    信号处理(Matlab)
    车间调度(Matlab)

    ⛄一、萤火虫算法图像聚类分割简介

    1 萤火虫算法的基本原理
    1.1 萤火虫算法的数学表述

    根据萤火虫算法的仿生原理,萤火虫算法的数学描述如下,萤火虫个体的相对发光强度可由式(2)确定
    在这里插入图片描述
    式中:rij为萤火虫i和j之间的空间欧几里得距离;I0为rij=0时萤火虫的发光强度,即原始发光强度,与目标函数成正比;γ为亮度衰减参数,这意味着在特定的传播介质中亮度将会衰减。

    萤火虫之间的相对吸引力由式(3)得出
    在这里插入图片描述
    其中β0为两只萤火虫之间的距离为零时的相互吸引力,也是两者之间的最大吸引力数值。萤火虫i依据式(4)向比其更亮的萤火虫j移动,
    在这里插入图片描述
    原始萤火虫算法的缺点是两只萤火虫之间的信息交换受到其搜索范围的影响,萤火虫初始化的位置是随机分配的,并且萤火虫之间的独立性较大,没有相互关联;萤火虫设置的荧光素值过于离散,以致无法相对较慢地运行;其次,在萤火虫算法中,控制搜索范围的参数是随机设置的,仿真结果也是随机的。为解决萤火虫算法目前存在的问题,文中对算法进一步的改进。

    2 基于改进萤火虫算法的多阈值分割
    用萤火虫算法解决最优化问题的关键是将适当的目标函数表示为萤火虫的亮度值,在确定合适的目标函数后,萤火虫个体迭代更新位置,来获得目标函数的最优化结果。文中采用结合改进萤火虫算法的最大熵阈值方法实现多阈值微生物图像分割,并将图像的熵值计算公式作为萤火虫算法的目标函数。假设灰度图像具有l个灰度等级,范围是{0,1,2,…,l-1},l∈[1,256],倘若t为分割图像的阈值,图像被划分为前景部分d和
    在这里插入图片描述
    Hd(t)和Hb(t)分别代表目标区域和背景区域的熵值,可由下式表示:
    在这里插入图片描述
    图像的总熵值可以表示为
    在这里插入图片描述
    当t达到最大值t时,即是图像分割所需的最佳阈值。如果分割一幅图像需要m个阈值,图像总的熵值可表示为
    在这里插入图片描述
    采用改进的萤火虫算法可获得关于图像分割阈值t1
    ,t2*,…,tm的最优估计。基于萤火虫算法,假设分割所需的阈值数目为m,m同时也是熵函数的自变量数目,每只萤火虫的位置代表m维向量(t1,t2,…,tm)的可能分割阈值组,阈值的范围是tm∈[0,255],萤火虫的亮度是通过其位置(t1,t2,…,tm)计算的最大熵数值。依据该算法,萤火虫向更亮的近邻位置移动,移动行为遵循式(3)。相应地,由于文中分割图像有多个阈值,因此对变量R进行矢量化处理。为提高亮度,每只萤火虫都朝着一个更好的位置移动,迭代位置更新过程,最终萤火虫聚集在亮度最高的位置附近。迭代过程在熵值达到最大的阈值组合(t1,t2*,…,tm*)附近收敛,因此,算法的最佳位置为最佳阈值。

    基于改进萤火虫算法的多阈值分割实现步骤如下:

    1)输入微生物图像,依据式(1)确定寻优过程的具体阈值数目m;

    2)依据式(6),(8)初始化参数,包括萤火虫种群数量S、最大吸引度β0、亮度衰减参数γ、步长α和最大迭代次数Tmax;

    3)将式(12)作为目标函数,随机初始化位于搜索范围内的萤火虫i的位置xi,依据目标函数计算每只萤火虫的亮度I0;

    4)依据式(2)和(7)计算萤火虫i的相关亮度I以及相关吸引度β,萤火虫i的移动方向也由相关吸引度确定;

    5)将式(6)和(7)分别代入式(4),更新每只萤火虫的位置,获得当前最优位置xi(t+1)和当前相对亮度I;

    6)迭代执行步骤4)和5),直到达到预先设定的最大迭代次数,输出最优目标函数值H(t1,t2,…,tm)max和最优解(t1*,t2*,…,tm*);

    7)根据输出的最优解对微生物图像进行多阈值分割,输出微生物多阈值分割图像。

    算法流程图如图1。
    在这里插入图片描述
    图1 改进萤火虫多阈值分割算法流程图

    ⛄二、部分源代码

    clear;
    clc;
    warning(‘off’);
    img=imread(‘ant.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(Ai)=[];
    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©.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

    ⛄三、运行结果

    在这里插入图片描述
    在这里插入图片描述

    ⛄四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 武治,孙照旋,周芳.基于改进萤火虫算法的多阈值微生物图像分割[J].安徽工业大学学报(自然科学版). 2020,37(01)

    3 备注
    简介此部分摘自互联网,仅供参考,若侵权,联系删除

    🍅 仿真咨询
    1 各类智能优化算法改进及应用

    生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

    2 机器学习和深度学习方面
    卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

    3 图像处理方面
    图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

    4 路径规划方面
    旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

    5 无人机应用方面
    无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

    6 无线传感器定位及布局方面
    传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

    7 信号处理方面
    信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

    8 电力系统方面
    微电网优化、无功优化、配电网重构、储能配置

    9 元胞自动机方面
    交通流 人群疏散 病毒扩散 晶体生长

    10 雷达方面
    卡尔曼滤波跟踪、航迹关联、航迹融合

  • 相关阅读:
    SMART PLC如何构造ALT指令
    内存层次优化相关的几种方法,,一些内存层次优化相关的知识
    ansible自动化部署web服务
    Android帧绘制流程深度解析 (一)
    Excel表格密码保护,避免他人编辑
    哈希表简介
    Generator
    单调递增的数字【贪心算法】
    Linux 如何查看磁盘空间
    [附源码]java毕业设计水库水面漂浮物WEB系统
  • 原文地址:https://blog.csdn.net/TIQCmatlab/article/details/126789721