龙空技术网

基于萤火虫优化算法的图像分割

哥廷根数学学派 46

前言:

现在咱们对“果蝇算法”大致比较注意,我们都需要剖析一些“果蝇算法”的相关文章。那么小编同时在网络上网罗了一些有关“果蝇算法””的相关知识,希望咱们能喜欢,小伙伴们一起来学习一下吧!

看腻了关于深度学习的图像分割算法,今天搞一篇基于萤火虫优化算法的图像分割文章,关于现在的各种优化算法(人群搜索算法、人工蜂群算法、帝国竞争算法、智能水滴算法、生物地理优化算法、萤火虫算法、布谷鸟搜索算法、引力搜索算法、觅食搜索算法、蝙蝠算法、风驱动优化算法、手榴弹爆炸算法、头脑风暴优化算法、基于教与学的优化算法、花授粉算法、果蝇优化算法、磷虾群算法、狼群算法、海豚回声定位算法、鸽群优化算法、灰狼优化算法、物体碰撞优化算法、水波优化算法、闪电搜索算法、Jaya算法、蜻蜓算法、鲸鱼优化算法、多元宇宙优化算法、乌鸦搜索算法、蝴蝶算法、雷电附着优化算法、斑鬣狗优化算法、松鼠搜索算法,看的我真是。。。),真是食之无味,弃之也不可惜,和故障诊断类一样,也都是大水泛滥,一发不可收拾

关于优化算法,可参考知乎上的一些文章

现有的各种群智能优化算法(比如遗传算法,粒子群算法,萤火虫算法等)有什么区别吗,其实质是不是相同的? - 知乎

现在模拟退火算法、粒子群优化算法、遗传算法和蚁群优化算法现在用的还多吗? - 知乎

关于萤火虫优化算法,可比遗传算法什么的简单多了,可适当参考如下文章,本文不再赘述

第2回:萤火虫算法 (Firefly algorithm) - 陈星星的文章 - 知乎

直接进入主题,首先导入一幅水果图片

img=imread('fruit.jpg');img=im2double(img);gray=rgb2gray(img);gray=imadjust(gray);

将图片转化为向量

X=gray(:)

萤火虫算法聚类

k = 6; %设置聚类个数CostFunction=@(m) ClusterCost(m, X);     % 代价函数VarSize=[k size(X,2)];           % 决策变量矩阵大小nVar=prod(VarSize);              % 决策变量矩阵个数VarMin= repmat(min(X),k,1);      % 变量下界VarMax= repmat(max(X),k,1);      % 变量上界

萤火虫优化算法的参数

MaxIt = 100;         % 最大迭代次数nPop = 10;            % 萤火虫种群数量gamma = 1;            % 光吸收系数beta0 = 2;            % 吸引力系数值alpha = 0.2;          % 突变系数alpha_damp = 0.98;    % 突变系数阻尼比delta = 0.05*(VarMax-VarMin);     %突变范围m = 2;if isscalar(VarMin) && isscalar(VarMax)dmax = (VarMax-VarMin)*sqrt(nVar);elsedmax = norm(VarMax-VarMin);end% 设置一个空萤火虫结构firefly.Position = [];firefly.Cost = [];firefly.Out = [];% 初始化种群pop = repmat(firefly, nPop, 1);% 初始化最优解BestSol.Cost = inf;% 创建初始萤火虫for i = 1:nPoppop(i).Position = unifrnd(VarMin, VarMax, VarSize);[pop(i).Cost, pop(i).Out] = CostFunction(pop(i).Position);if pop(i).Cost <= BestSol.CostBestSol = pop(i);endend% 保存最佳代价函数值的数组BestCost = zeros(MaxIt, 1);

萤火虫算法主循环

for it = 1:MaxItnewpop = repmat(firefly, nPop, 1);for i = 1:nPopnewpop(i).Cost = inf;for j = 1:nPopif pop(j).Cost < pop(i).Costrij = 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).Costnewpop(i) = newsol;if newpop(i).Cost <= BestSol.CostBestSol = newpop(i);endendendendend% 合并pop = [popnewpop];  % 排列[~, SortOrder] = sort([pop.Cost]);pop = pop(SortOrder);% 截断pop = pop(1:nPop);BestCost(it) = BestSol.Cost;BestRes(it)=BestSol.Cost;    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);% 突变系数alpha = alpha*alpha_damp;endFAlbl=BestSol.Out.ind;

训练图绘制

figure;plot(BestRes,'--k','linewidth',1);title('FA Train');xlabel('FA Iteration Number');ylabel('FA Best Cost Value');

将聚类中心及其索引转换为图像,并作出分割结果图

gray2=reshape(FAlbl(:,1),size(gray));segmented = label2rgb(gray2); figure;subplot(1,2,1);imshow(img);title('Original');subplot(1,2,2);imshow(segmented,[]);title('Segmented Image');

算法的详细代码及数据参见如下链接

标签: #果蝇算法 #萤火虫算法路径规划 #蚁群算法图像处理代码 #引力搜索算法的改进 #算法最优切割