当前位置: 首页 > news >正文

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

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

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.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).Cost
pop(i)=NewSol;
if pop(i).Cost<BestSol.Cost
BestSol=pop(i);
end

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

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

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

相关文章:

  • SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)
  • 用Python进行数学建模(一)
  • 力扣:669. 修剪二叉搜索树,今日份快乐
  • java毕业设计KTV点歌系统mybatis+源码+调试部署+系统+数据库+lw
  • [python] 基于diagrams库绘制系统架构图
  • 2022 年全国职业院校技能大赛(中职组) 网络安全竞赛试题D模块评分标准
  • C++ 语法基础课1 —— 变量、输入输出、顺序语句
  • M的编程备忘录之C++——map和set
  • 《Orange‘s 一个操作系统的实现》第六章
  • Spring Cloud 拉取 Nacos 中配置文件
  • python-中断time.sleep一种更优雅的办法:event.wait
  • 【毕业设计】大数据公交数据分析与可视化 - 大数据 python falsk
  • Hadoop与Spark中的Shuffle过程梳理
  • CH9101芯片应用—硬件设计指南
  • [NCTF2019]True XML cookbook
  • $translatePartialLoader加载失败及解决方式
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Docker下部署自己的LNMP工作环境
  • ES6系列(二)变量的解构赋值
  • Just for fun——迅速写完快速排序
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • mysql常用命令汇总
  • MySQL-事务管理(基础)
  • MySQL主从复制读写分离及奇怪的问题
  • Node 版本管理
  • Python实现BT种子转化为磁力链接【实战】
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 老板让我十分钟上手nx-admin
  • 每天一个设计模式之命令模式
  • 免费小说阅读小程序
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何设计一个比特币钱包服务
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • raise 与 raise ... from 的区别
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #mysql 8.0 踩坑日记
  • (52)只出现一次的数字III
  • (java)关于Thread的挂起和恢复
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (七)Java对象在Hibernate持久化层的状态
  • (十一)手动添加用户和文件的特殊权限
  • (算法)前K大的和
  • (转)JAVA中的堆栈
  • (转)负载均衡,回话保持,cookie
  • .NET Reactor简单使用教程
  • .NET 中让 Task 支持带超时的异步等待
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d