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
海神之光
- 粉丝: 5w+
- 资源: 6477
最新资源
- 【冠通期货-2024研报-】铁矿策略:市场情绪转换频繁,铁矿承压震荡.pdf
- 【宏源期货-2024研报-】PX&PTA&PR早评.pdf
- 【广金期货-2024研报-】OPEC下调石油需求预测,油价宽幅下挫.pdf
- 【深交所-2024研报-宁德时代】宁德时代:2024年三季度报告.pdf
- 【深交所-2024研报-史丹利】史丹利:2024年三季度报告.pdf
- 【广金期货-2024研报-】中东地缘风险担忧缓解,油价继续下挫.pdf
- 【天风证券-2024研报-裕元集團】裕元集团(00551):9月制造加速,有望受益Adidas上调指引.pdf
- 【宝城期货-2024研报-】宝城期货煤焦早报(2024年10月18日).pdf
- 【上交所-2024研报-永吉股份】贵州永吉印务股份有限公司2024年第三季度报告.pdf
- 【大同证券-2024研报-】市场日报:三大指数高开低走 沪指收跌超1%.pdf
- 【上交所-2024研报-国邦医药】国邦医药2024年第三季度报告.pdf
- 【东方证券-2024研报-渝农商行】渝农商行(601077):管理层预计平稳过渡,有望受益于化债提速.pdf
- 数组经典习题之顺序排序和二分查找和冒泡排序
- carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化
- 模拟qsort,改造冒泡排序使其能排序任意数据类型,即日常练习
- AllSort(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈