function [G_best1,G_best2,D]=PSO(Pso_no,Max_iteration,lb,ub,I,image_c)
L_a=max(max(image_c));
L_b=min(min(image_c));
V_max=4;
Leader_score1=-inf; %change this to -inf for maximization problems
Leader_score2=-inf;
%统计图像整体灰度平均值u,背景灰度平均值u11,背景概率w11
[ua11,w11,pp1,nd1,u1]=Otsu_q(I);
%统计图像整体灰度平均值u,背景灰度平均值u11,背景概率w11
[ua22,w22,pp2,nd2,u2]=Otsu_q(image_c);
%%%%粒子群位置及速度的初始化
Positions1=intialize_position_rand(Pso_no,ub,lb);%粒子位置初始化
Positions2=intialize_position_rand(Pso_no,L_a,L_b);%粒子位置初始化
V_pso2=intialize_position_rand(Pso_no,2-V_max,V_max-2);%粒子位置初始化
V_pso1=intialize_position_rand(Pso_no,-V_max,V_max);%粒子位置初始化
D=[];t=0;
P_best1=zeros(1,Pso_no);
P_best2=zeros(1,Pso_no);
d111=zeros(1,Pso_no);
d222=zeros(1,Pso_no);
while t<Max_iteration
for i=1:Pso_no
%粒子位置重置
if Positions1(i)>ub %粒子位置超出上界设置为255
Positions1(i)=255;
end
if Positions1(i)<lb %粒子位置超出下界设置为0
Positions1(i)=0;
end
% Return back the search agents that go beyond the boundaries of the search space
if Positions2(i)>ub %粒子位置超出上界设置为255
Positions2(i)=255;
end
if Positions2(i)<lb %粒子位置超出下界设置为0
Positions2(i)=0;
end
%粒子速度重置
if V_pso1(i)>V_max %粒子速度超出上界设置为V_max
V_pso1(i)=V_max;
end
if V_pso1(i)<-V_max %粒子速度超出下界设置为-V_max
V_pso1(i)=-V_max;
end
if V_pso2(i)>V_max-2 %粒子速度超出上界设置为V_max-2
V_pso2(i)=V_max-2;
end
if V_pso2(i)<2-V_max %粒子速度超出下界设置为2-V_max
V_pso2(i)=2-V_max;
end
end
%由最大类间方差公式计算每个位置(灰度值)的类间方差
[Max_jubu1,d1,d11]=Otsu_h(ua11,w11,Positions1,pp1,nd1,u1);%P_best1是得带过程中每个粒子的最优位置
[Max_jubu2,d2,d22]=Otsu_h(ua22,w22,Positions2,pp2,nd2,u2);%d22是类间方差组
%全体最优位置
if d1>Leader_score1
Leader_score1=d1;
G_best1=Max_jubu1;%G_best1是迭代中全局最优位置
end
if d2>Leader_score2
Leader_score2=d2;
G_best2=Max_jubu2;%G_best2是迭代中全局最优位置
end
%P_best1是得带过程中每个粒子的最优位置
for i=1:Pso_no
if d11(i)>d111(i)
d111(i)=d11(i);
P_best1(i) =Positions1(i);
end
if d22(i)>d222(i)
d222(i)=d22(i);
P_best2(i) =Positions2(i);
end
end
%给各个系数赋值
w=0.5;
r1=rand; r2=rand;
c1=2; c2=2;
for i=1:Pso_no
V_pso1(i)=w*V_pso1(i)+c1*r1*(P_best1(i)-Positions1(i))+c2*r2*(G_best1-Positions1(i));%改变粒子的速度
V_pso2(i)=w*V_pso2(i)+c1*r1*(P_best2(i)-Positions2(i))+c2*r2*(G_best2-Positions2(i));
Positions1(i)=Positions1(i)+V_pso1(i);%改变粒子的位置
Positions2(i)=Positions2(i)+V_pso2(i);
end
Positions1=double(int32(Positions1));
Positions2=double(int32(Positions2));
D=[D,G_best1];
t=t+1;
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
【图像分割】粒子群算法OTSU图像分割【含Matlab源码 3688期】.zip
共13个文件
m:5个
jpg:5个
asv:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 186 浏览量
2024-06-20
16:36:07
上传
评论
收藏 118KB ZIP 举报
温馨提示
Matlab领域上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 能量泛函分割:DBSCAN、GAC水平集、snake、分水岭、 阙值分割: 特征增强分割:超像素SFFCM图像分割、关键像素点FLICM图像分割 智能算法图像分割:遗传算法、灰狼算法、人工鱼群、贝叶斯、北方苍鹰、萤火虫、和声搜索、粒子群、蚁群算法
资源推荐
资源详情
资源评论
收起资源包目录
【图像分割】粒子群算法OTSU图像分割【含Matlab源码 3688期】.zip (13个子文件)
【图像分割】基于matlab粒子群算法OTSU图像分割【含Matlab源码 3688期】
运行结果1.jpg 7KB
Otsu_h.asv 703B
main_1.m 1KB
intialize_position_rand.m 157B
Otsu_q.m 1015B
scratches_6.jpg 10KB
PSO.asv 3KB
PSO.m 3KB
运行结果2.jpg 7KB
运行结果4.jpg 20KB
QQ截图20190606193334.bmp 1.16MB
运行结果3.jpg 8KB
Otsu_h.m 604B
共 13 条
- 1
资源评论
Matlab领域
- 粉丝: 3w+
- 资源: 3117
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功