基于改进萤火虫算法的图像分割的应用(Matlab代码实现)

news2024/10/6 14:25:08

  🍒🍒🍒欢迎关注🌈🌈🌈

📝个人主页:我爱Matlab


👍点赞➕评论➕收藏 == 养成习惯(一键三连)🌻🌻🌻

🍌希望大家多多支持🍓~一起加油 🤗

💬语录:将来的我一定会感谢现在奋斗的自己!

🍁🥬🕒摘要🕒🥬🍁

图像分割将图像细分为构成它的子区域或物体。分割的目的是把特定的目标从复杂的图像中抽取出来,是图像识别,图像理解以及图像分析的重要依据。随着技术的发展图像分割已经广泛的使用在众多领域,如医学图像处理,人脸识别,交通道路分析等,分割的好坏直接影响后续工作的有效性。因此,越来越多的学者研究各种相关的图像分割算法,模糊理论能很好的描述图像的特征,在图像分割中得到深入研究。

萤火虫算法是受自然界中的萤火虫通过荧光进行信息交流这种群体行为的启发演变而来。作为一种新颖的仿生群智能优化算法,分析了萤火虫算法的仿生原理,从数学角度对算法实现优化过程进行了定义。通过典型的函数优化和组合优化问题对算法进行了仿真测试,测试结果表明了萤火虫算法在连续空间和离散空间优化的可行性和有效性,具有良好的应用前景。 

✨🔎⚡部分运行结果⚡🔎✨

 

 

💂♨️👨‍🎓Matlab代码👨‍🎓♨️💂

%% Firefly Algorithm (FA) Image Segmentation Using Clustering
clear;
clc;
warning('off');
% Loading
img=imread('f.jpg');
img=im2double(img);
gray=rgb2gray(img);
gray=imadjust(gray);
% Reshaping image to vector
X=gray(:);

%% Starting FA Clustering
k = 6; % Number of clusters

%---------------------------------------------------
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

% Firefly Algorithm Parameters
MaxIt = 100;         % Maximum Number of Iterations
nPop = 10;            % Number of Fireflies (Swarm Size)
gamma = 1;            % Light Absorption Coefficient
beta0 = 2;            % Attraction Coefficient Base Value
alpha = 0.2;          % Mutation Coefficient
alpha_damp = 0.98;    % Mutation Coefficient Damping Ratio
delta = 0.05*(VarMax-VarMin);     % Uniform Mutation Range
m = 2;
if isscalar(VarMin) && isscalar(VarMax)
dmax = (VarMax-VarMin)*sqrt(nVar);
else
dmax = norm(VarMax-VarMin);
end

% Start
% Empty Firefly Structure
firefly.Position = [];
firefly.Cost = [];
firefly.Out = [];
% Initialize Population Array
pop = repmat(firefly, nPop, 1);
% Initialize Best Solution Ever Found
BestSol.Cost = inf;
% Create Initial Fireflies
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
% Array to Hold Best Cost Values
BestCost = zeros(MaxIt, 1);

%% Firefly Algorithm Main Loop
for it = 1:MaxIt
newpop = repmat(firefly, nPop, 1);
for i = 1:nPop
newpop(i).Cost = inf;
for j = 1:nPop
if pop(j).Cost < pop(i).Cost
rij = norm(pop(i).Position-pop(j).Position)/dmax;
beta = beta0.*exp(-gamma.*rij^m);
e = delta.*unifrnd(-1, +1, VarSize);
%e = delta*randn(VarSize);
newsol.Position = pop(i).Position ...
+ beta.*rand(VarSize).*(pop(j).Position-pop(i).Position) ...
+ alpha.*e;
newsol.Position = max(newsol.Position, VarMin);
newsol.Position = min(newsol.Position, VarMax);
[newsol.Cost newsol.Out] = CostFunction(newsol.Position);
if newsol.Cost <= newpop(i).Cost
newpop(i) = newsol;
if newpop(i).Cost <= BestSol.Cost
BestSol = newpop(i);
end
end
end
end
end
% Merge
pop = [pop
newpop];  
% Sort
[~, SortOrder] = sort([pop.Cost]);
pop = pop(SortOrder);
% Truncate
pop = pop(1:nPop);
% Store Best Cost Ever Found
BestCost(it) = BestSol.Cost;
BestRes(it)=BestSol.Cost;    
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
% Damp Mutation Coefficient
alpha = alpha*alpha_damp;
end
FAlbl=BestSol.Out.ind;
% Plot FA Train
figure;
plot(BestRes,'--k','linewidth',1);
title('FA Train');
xlabel('FA Iteration Number');
ylabel('FA Best Cost Value');

%% Converting cluster centers and its indexes into image 
gray2=reshape(FAlbl(:,1),size(gray));
segmented = label2rgb(gray2); 
% Plot Results 
figure;
subplot(1,2,1);
imshow(img);title('Original');
subplot(1,2,2);
imshow(segmented,[]);title('Segmented Image');

完整代码:基于改进萤火虫算法的图像分割的应用

📜📢🌈参考文献🌈📢📜

[1]刘长平,叶春明.一种新颖的仿生群智能优化算法:萤火虫算法[J].计算机应用研究,2011,28(09):3295-3297.

[2]陈恺,陈芳,戴敏,张志胜,史金飞.基于萤火虫算法的二维熵多阈值快速图像分割[J].光学精密工程,2014,22(02):517-523.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可执行文件的装载与进程

进程虚拟地址空间 每个程序被运行起来以后&#xff0c;它将拥有自己独立虚拟空间地址&#xff0c;这个虚拟地址空间的大学由计算机的硬件平台决定&#xff0c;具体地说是由CPU的位数决定。硬件决定了地址空间的最大理论上限&#xff0c;即硬件的寻址空间大小&#xff0c;比如32…

欢迎使用Markdown编辑器

欢迎使用Markdown编辑器欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个…

HTML的常用结构标签(详细)

1.文本标题 &#x1f340; <h1> </h1>~~~<h6> </h6>,从h1到h6字体由大到小 2.段落 &#x1f340; <p> </p> 3.加粗 &#x1f340; <b> </b> 和 <strong> </strong> 4.倾斜 &#x1f340; <i></i&…

[MQ] SpringBoot使用扇型(广播)交换机/主题交换机

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

刷式过滤器 不锈钢全自动刷式过滤器

原理概述 当水从进水口进入过滤器滤筒内部&#xff0c;杂质被拦截在过滤筒内壁&#xff0c;过滤后的干净水从出水口流出&#xff0c;当滤筒内壁的杂质越积越多时&#xff0c;自清洗过滤器进出口的压差达到预设值、达到清洗时间或手动预制时&#xff0c;过滤器将开始自清洗过程…

Feng Office 3.7.0.5 - 文件上传

Feng Office 3.7.0.5 - 文件上传 POST /ck_upload_handler.php HTTP/1.1 Host: www.baidu1.com Content-Length: 213 Cache-Control: max-age0 Upgrade-Insecure-Requests: 1 Origin: http://www.baidu1.com Content-Type: multipart/form-data; boundary----WebKitFormBoundar…

Linux基本指令2——时间相关

Linux内核&#xff1a;Centos 7.6 64位 date指令默认的date不适合阅读date 指定格式显示时间&#xff1a; date %Y:%m:%ddate 用法&#xff1a;date [OPTION]... [FORMAT]在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记&#…

AlexNet学习笔记

AlexNet 概述 AlexNet是由2012年ImageNet竞赛参赛者Hinton和他的学生Alex Krizhevsky设计的。 创新点 非线性激活函数ReLU 选取了非线性非饱和的relu函数,ReLU函数的表达式为F(x)max(0&#xff0c;z)。若输入小于0&#xff0c;那么输出为0&#xff1b;若输入大于0&#xff…

内蒙古海天公司企业网的规划与设计

目 录 摘要 I ABSTRACT II 目 录 III 第一章 引 言 - 1 - 第二章 需求分析 - 3 - 2.1 背景分析 - 3 - 2.2 应用需求分析 - 3 - 2.2.1 内蒙古海天公司网的管理策略 - 3 - 2.2.2 网络中服务器简介 - 4 - 2.2.3 操作系统的选择…- 5 - 2.3 安全需求 - 5 - 2.4 网络扩展性需求 - 5 …

JVM 一张图带你了解内存分配过程 搞懂逃逸分析|标量替换|指针碰撞|空闲列表|TLAB

面试题 在栈上分配对象&#xff0c;使用标量替换的目的是什么&#xff1f; 内存分配过程 逃逸分析 如何确定对象是否在栈上进行分配&#xff0c;当然得通过逃逸分析了。 逃逸分析是什么意思呢&#xff1f;我们直接看两段代码 代码1: public Student get(){Student student …

CEAC之《企业信息管理》2

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;微微的猪食小窝 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1在每个文本框、组合框和列表框的属性表中&#xff0c;都可以找到3个属性&#xff0c;分别…

30.nacos做注册中心入门实例(springcloud)

一、新建nacos-client-a 1.因为官方的springboot没有集成nacos的依赖&#xff0c;所以不再使用springboot的官方下载依赖地址 2. 因为我的idea是2019版本&#xff0c;更改了springboot下载路径后&#xff0c;不会自动更新&#xff0c;第一次选中依赖时&#xff0c;仍然时sprin…

回溯算法(回溯搜索法)

回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 回溯算法&#xff0c;不是一个高效的算法&#xff0c;纯暴力算法&#xff0c;实际上是递归算法的一部分&#xff0c;最多再剪枝⼀下。 回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&a…

Mac无法打开CORE Keygen

背景 显示如下图&#xff0c;无法打开CORE Keygen&#xff0c;不要方。一个神器即可解决。 方案-使用UPX&#xff1a; &#xff08;1&#xff09;先安装upx (什么&#xff0c;你说你没有brew&#xff1f;&#xff1f;&#xff1f;看看这篇文章 Mac安装brew_Hero.Lin的博…

一篇文章彻底理解 HDFS 的安全模式

一篇文章彻底理解 HDFS 的安全模式 1 什么是 HDFS 的安全模式 Hdfs 的安全模式&#xff0c;即 HDFS safe mode, 是 HDFS 文件系统的一种特殊状态&#xff0c;在该状态下&#xff0c;hdfs 文件系统只接受读数据请求&#xff0c;而不接受删除、修改等变更请求&#xff0c;当然也…

【攻破css系列——第九天】常规流

文章目录1. 常规流2. 常规流布局2.1 定义2.2 包含块2.3 块盒2.3.1 每个块盒的总宽度&#xff0c;必须等于包含块的宽度2.3.2 每个块盒垂直方向上的auto值2.3.3 百分比取值2.3.4 上下外边距合并&#xff08;margin塌陷&#xff09;2.4 行盒2.4.1 盒子沿着内容延伸2.4.2 宽高不可…

Redis基础入门教程 - 概览

Redis基础教程 欢迎加好友一起讨论问题 知识地图&#xff1a;Redis概述与安装https://blog.csdn.net/lili40342/article/details/127852124Redis的5大数据类型https://blog.csdn.net/lili40342/article/details/127897689Redis的发布和订阅https://blog.csdn.net/lili40342/art…

C++模拟OpenGL库——图片处理及纹理系统(四):UV纹理坐标

目录 引入UV纹理坐标及三角形绘制设置 纹理过滤 引入UV纹理坐标及三角形绘制设置 上图其实不是很直观。 UV坐标要解决的问题就是&#xff1a; 假设我有一张500500的纹理图片&#xff1b; 我要把它映射到一张200200的图片中&#xff1b; 这个问题要怎么去解决。 这里提出…

【附源码】Python计算机毕业设计网络考试系统设计

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

百度第三季度财报前瞻:财务业绩预计将超预期

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 百度&#xff08;BIDU&#xff09;此前于2022年11月8日发布了一份媒体新闻稿&#xff0c;强调其将在2022年11月22日公布其第三季度财报。 分析师预计百度第三季度的财务业绩将有所改善 根据卖方分析师对百度的一致财务预测&…