【图像分割】改进的细菌觅食算法双阈值图像分割【含Matlab源码 069期】

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

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

⛄一、细菌觅食算法简介

实际生活需求促进了最优化方法的发展。近半个多世纪以来,由于传统优化方法的不足,一些具有全局优化性能且通用性强的进化算法,因其高效的优化性能、无需问题精确描述信息等优点,受到各领域广泛的关注和应用。其中产生最早也最具代表性的进化算法是20世纪70年代源于达尔文自然选择学说和孟德尔遗传变异理论的遗传算法(Genetic Algorithm,GA)。而近年来,人们模拟自然界生物群体行为产生出一系列群体智能优化算法,如Dorigo等通过模拟蚂蚁的寻径行为于1991年提出了蚁群优化算法(Ant Colony Optimization,ACO);Eberhart和Kennedy通过模拟鸟群捕食行为于1995年提出了粒子群优化算法(Particle Swarm Optimization,PSO)。这些算法被广泛应用于工程领域并取得了显著的成果。随着群体智能优化算法的蓬勃发展,Passino于2002年提出了模拟人类大肠杆菌觅食行为的细菌觅食优化算法(Bacteria Foraging Optimization Algorithm,BFOA),为仿生进化算法家族增添了新成员。本章将着重向广大编程爱好者介绍最基本的细菌觅食算法,各编程科研人员可以基于本章算法加以改进并应用到实际案例中。
1 标准细菌觅食优化算法
在这里插入图片描述
2 趋向性操作(Chemotaxis)
在这里插入图片描述
3 聚集性操作(Swarming)
在这里插入图片描述
4 复制性操作(Reproduction)
在这里插入图片描述
5 迁徙性操作(Elimination and Dispersal)
实际环境中的细菌所生活的局部区域可能会发生逐渐变化(如食物消耗殆尽)或者发生突如其来的变化(如温度突然升高等)。这样可能会导致生活在这个局部区域的细菌种群被迁徙到新的区域中去或者集体被外力杀死。在BFO算法中模拟这种现象称为迁徙性操作。
6 BFO算法流程
在这里插入图片描述

⛄二、部分源代码

%Hybrid Bacterial Foraging with Parameter free PSO*
clear;
clc;
tic
a = ‘lena.jpg’;
x=imread(a);
a=rgb2gray(x);
count=imhist(a);
[m,n]=size(a);
N=m*n;
L=256;
count=count/N;
u0=0;
u=0;
for i=1:L
u0=u0+(i-1)*count(i);
w(i)=sum(count(1:i)); %w(i)是前i个像素的累加概率
u = u + (i-1)*count(i);
ua(i)= u;
end
%-----(1)初始化参数-----
p = 2; % 搜索范围的维度
BacterialNum = 20; % 细菌的个数
Nc = 30; %趋化的次数(Number of Chemotaxis steps)
Ns = 4; %趋化操作中单向运动的最大步数(Number of Swimming steps)
Nre = 4; %复制操作步骤数(Number of reproduction steps)
step=0.05; %翻转选定方向后,单个细菌前进的步长
Sr = BacterialNum/2; %每代复制(分裂)数
range = 255;
for i = 1:BacterialNum % 产生初始细菌个体的位置
Bacterial(i).location = range * rand(1,p);
end
%------先计算各个细菌的适应度,并初始化Pbest----------------------
for i=1:BacterialNum
Bacterial(i).bestFitness = CalFitness1(Bacterial(i).location,w,ua,u0);
Bacterial(i).bestLocation = Bacterial(i).location;
end

%-----(2)复制操作开始-----
for k = 1:Nre   
    %-----(3)趋化操作(翻转或游动)开始-----
    for j = 1:Nc  
        %-----对每一个细菌分别进行以下操作-----
        for i = 1:BacterialNum
            %-----(3a)计算适应度值
            Bacterial(i).fitness = CalFitness1(Bacterial(i).location,w,ua,u0);
            %-----保存细菌目前的适应度值,直到找到更好的适应度值取代之-----
            Bacterial_last = Bacterial(i);
            %-----(3b)翻转,产生一个随机向量,代表翻转后细菌的方向-----
            Delta = rands(1,p);
            % PHI表示翻转后选择的一个随机方向上前进(单位向量)
            PHI = Delta/sqrt(Delta*Delta');
            %-----(3c)移动,向着翻转后细菌的方向移动一个步长,并且改变细菌的位置-----
            Bacterial(i).location = Bacterial(i).location + step*PHI;
            %-----计算细菌当前位置的适应度值-----
            Bacterial(i).fitness = CalFitness1(Bacterial(i).location,w,ua,u0);
            %-----(3d)游动-----
            m = 0; % 给游动长度计数器赋初始值
            while(m < Ns) % 未达到游动的最大长度,则循环
                m = m + 1;
                % 新位置的适应度值是否更好?如果更好,将新位置的适应度值存储为细菌i目前最好的适应度值
                if Bacterial(i).fitness < Bacterial_last.fitness 
                    Bacterial_last = Bacterial(i);  %保存更好的适应度值
                    % 在该随机方向上继续游动步长单位,修改细菌位置
                    Bacterial(i).location = Bacterial(i).location + step*PHI;
                    % 重新计算新位置上的适应度值
                    Bacterial(i).fitness = CalFitness1(Bacterial(i).location,w,ua,u0);
                else
                    % 否则,结束此次游动
                    m = Ns;
                    Bacterial(i) = Bacterial_last; % 更新趋化操作后的适应度值
                end
            end
            % pbest
            if Bacterial(i).fitness < Bacterial(i).bestFitness  
                Bacterial(i).bestFitness = Bacterial(i).fitness;
                Bacterial(i).bestLocation = Bacterial(i).location;
            end
        end  % 如果i<BacterialNum,进入下一个细菌的趋化,i=i+1
        
      %--------Mutation with pfPSO Opreator-------------
        GlobalBest= Bacterial(1);
        for i=2:BacterialNum
            if Bacterial(i).fitness < GlobalBest.fitness;
                GlobalBest = Bacterial(i);
            end
        end
        for i=1:BacterialNum
           r1=rand();
           r2=rand();
           Bacterial(i).location = ( 1 - GlobalBest.location / Bacterial(i).location ) * r1 * GlobalBest.location + (GlobalBest.location / Bacterial(i).location ) * r2 * Bacterial(i).bestLocation;
           Bacterial(i).fitness = CalFitness1(Bacterial(i).location,w,ua,u0);  
           Bacterial(i).location = mod(Bacterial(i).location,255)+1;
        end
    end %-----(4)如果j<Nc,此时细菌还处于活跃状态,进行下一次趋化,j=j+1-----
    function fun = CalFitness1(x,w,ua,u0)

L=256;
x=int16(mod(x,255))+1;
w1=w(x(1));
u1=ua(x(1))/w1;
w2=w(x(2))-w(x(1));
u2=(ua(x(2))-ua(x(1)))/w2;
w3=w(L)-w(x(2));
u3=(ua(L)-ua(x(2)))/w3;

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]陈浩,方勇,朱大洲,王成,陈子龙.基于蚁群算法的玉米植株热红外图像边缘检测[J].农机化研究. 2015,37(06)

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 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值