function [nbest,fbest,nger]=CLSPSOTwoEntropic(I,I_mean)
%I_mean是对的
%H = fspecial('average');
%G = imfilter(I, H, 'same');%G为滤波后图像矩阵
I_2Dhist=zeros(256,256);
for j = 1:1:size(I,2)
for i = 1:1:size(I,1)
m1 = I(i, j);
m2 = I_mean(i, j);
I_2Dhist(m1+1, m2+1) = I_2Dhist(m1+1, m2+1)+1;
end
end
%Lightn=ones(N,1);%*10^100;
Nt=size(I,1)*size(I,2);%Nt是总的像素数?
Lmax=256; %256 different maximum levels are considered in an image (i.e., 0 to 255)
MaxC=10;%混沌搜索的最大步数:MaxC
%N=100;
N=50;%初始化参数,萤火虫个数,阈值数,最大迭代数,以及alpha,beta,gamma
N_PAR=4;
%N_GER=100;
N_GER=100;%迭代次数
PHI1 = 0.8; %individual weight of particles??加速因子?个体权重
PHI2 = 0.8; %social weight of particles粒子的群体权重
W = 1.2; %inertial factor惯性因子
vmin=-5;
vmax=5;%速度上下限
vR=zeros(N,N_PAR); %velocities of particles粒子速度
X_MAXR = Lmax*ones(1,N_PAR);
X_MINR = ones(1,N_PAR);
gBestR = zeros(1,N_PAR);%全局最优
gbestvalueR = -10000;
gauxR = ones(N,1);
xBestR=zeros(N,N_PAR);
fitBestR=zeros(N,1);
fitR = zeros(N,1);
xR = zeros(N,N_PAR);
H = zeros(N,1);
for i=1:256
for j=1:256
I_2Dhist(i, j) = I_2Dhist(i, j) / Nt;
end
end
for i = 1: N %初始化N个粒子的位置,即firefly程序中的init_ffa,xR相当于ns()。初始化
for j = 1: N_PAR
xR(i,j) = fix(rand(1,1) *255);
end
end
nger=1;
for j=1:N
fitR(j) = TwoEntropic(I_2Dhist,xR,j); %计算二维熵适应度函数值
fitBestR(i)=fitR(i);%适应度值付给适应度最佳值
end
[aR,bR]=max(fitR);%aR为最大的fitR值,bR为相应的行数
gBestR=xR(bR,:);%gBestR为xR中bR行的所有数据,即全局最优阈值
gbestvalueR = fitR(bR);%全局最优阈值所对应的目标函数值
xBestR = xR;%??
while(nger<=N_GER)
i=1;
randnum1 = rand ([N, N_PAR]);
randnum2 = rand ([N, N_PAR]);
vR = fix(W.*vR + randnum1.*(PHI1.*(xBestR-xR)) + randnum2.*(PHI2.*(gauxR*gBestR-xR)));
vR = ( (vR <= vmin).*vmin ) + ( (vR > vmin).*vR );%判断vR有没有跑出界
vR = ( (vR >= vmax).*vmax ) + ( (vR < vmax).*vR );
xR = xR+vR;%公式
xR = ( (xR <= X_MINR(1)).*X_MINR(1) ) + ( (xR > X_MINR(1)).*xR );%判断xR是否跑出界,如果跑出界,则按最大最小值处理
xR = ( (xR >= X_MAXR(1)).*X_MAXR(1) ) + ( (xR < X_MAXR(1)).*xR );
for j = 1:N %修正范围?使xR不跑出范围之外?
for k = 1:N_PAR
if (k==1)&&(k~=N_PAR)
if xR(j,k) < X_MINR(k)
xR(j,k) = X_MINR(k);
elseif xR(j,k) > xR(j,k+1)
xR(j,k) = xR(j,k+1);
end
end
if ((k>1)&&(k<N_PAR))
if xR(j,k) < xR(j,k-1)
xR(j,k) = xR(j,k-1);
elseif xR(j,k) > xR(j,k+1)
xR(j,k) = xR(j,k+1);
end
end
if (k==N_PAR)&&(k~=1)
if xR(j,k) < xR(j,k-1)
xR(j,k) = xR(j,k-1);
elseif xR(j,k) > X_MAXR(k)
xR(j,k) = X_MAXR(k);
end
end
if (k==1)&&(k==N_PAR)
if xR(j,k) < X_MINR(k)
xR(j,k) = X_MINR(k);
elseif xR(j,k) > X_MAXR(k)
xR(j,k) = X_MAXR(k);
end
end
end
end
% while(i<=N)
% if(i==N)
for j=1:N
fitR(j) = TwoEntropic(I_2Dhist,xR,j); %计算二维熵适应度函数值
if fitR(j) > fitBestR(j)
fitBestR(j) = fitR(j);
xBestR(j,:) = xR(j,:);
end
end
[aR,bR] = max (fitR);
if (abs(aR-gbestvalueR)<0.0001)
break
end
if (fitR(bR) > gbestvalueR)
gBestR=xR(bR,:)-1;
gbestvalueR = fitR(bR);
end
%混沌
[sort_fv,index]=sort(fitR,1,'descend');
Nbest=floor(N*0.1); %保留群体中20%的最佳粒子
for n=1:Nbest %对群体中20%的最佳粒子进行混沌搜索
tmpx=xR(index(n),:);
for k=1:MaxC %混沌搜索的最大步数
for dim=1:N_PAR %混沌搜索的迭代公式
cx(dim)=(tmpx(1,dim)-X_MINR(dim))/(X_MAXR(dim)-X_MINR(dim));%原来的CLSPSO公式有问题
cx(dim)=4*cx(dim)*(1-cx(dim));%Logistic映射 u=4
tmpx(1,dim)=X_MINR(dim)+cx(dim)*(X_MAXR(dim)-X_MINR(dim));%原来的CLSPSO公式有问题
end
tmpx=fix(tmpx);
for k = 1:N_PAR
if (k==1)&&(k~=N_PAR)
if tmpx(1,k) < X_MINR(k)
tmpx(1,k) = X_MINR(k);
elseif tmpx(1,k) > xR(1,k+1)
tmpx(1,k) = tmpx(1,k+1);
end
end
if ((k>1)&&(k<N_PAR))
if tmpx(1,k) < tmpx(1,k-1)
tmpx(1,k) = tmpx(1,k-1);
elseif tmpx(1,k) > tmpx(1,k+1)
tmpx(1,k) = tmpx(1,k+1);
end
end
if (k==N_PAR)&&(k~=1)
if tmpx(1,k) < tmpx(1,k-1)
tmpx(1,k) = tmpx(1,k-1);
elseif xR(1,k) > X_MAXR(k)
tmpx(1,k) = X_MAXR(k);
end
end
if (k==1)&&(k==N_PAR)
if tmpx(1,k) < X_MINR(k)
tmpx(1,k) = X_MINR(k);
elseif tmpx(1,k) > X_MAXR(k)
tmpx(1,k) = X_MAXR(k);
end
end
end
fcs = TwoEntropic(I_2Dhist,tmpx,1); %计算二维熵适应度函数值
if fcs>sort_fv(n) %对混沌搜索后的决策变量值进行评估
xR(index(n),:)=tmpx;
break;
end
end
xR(index(n),:)=tmpx;
end
% r=rand();
% for s=1:N_PAR %收缩搜索区域
% X_MINR(s)=max(X_MINR(s),gBestR(s)-r*(X_MAXR(s)-X_MINR(s)));
% X_MAXR(s)=min(X_MAXR(s),gBestR(s)+r*(X_MAXR(s)-X_MINR(s)));
% end
% xR(1:Nbest,:)=xR(index(1:Nbest),:);
% for i=(Nbest+1):N %随机产生剩余的80%微粒
% for j=1:N_PAR
% xR(i,j)=fix(X_MINR(j)+rand*(X_MAXR(j)-X_MINR(j))); %随机初始化位置
% vR(i,j)=rand; %随机初始化速度
% end
% end
%end 混沌
%RGB image
nger=nger+1;
% end
% i=i+1;
% end
end
% gbestvalueR
gBestR=sort(gBestR);%全局最优阈值排序
fbest=gbestvalueR;
if nargout>1
nbest=gBestR; %return optimal intensity
if nargout>2
fbest=gbestvalueR; %return fitness value
end
end
IT狂飙
- 粉丝: 4840
- 资源: 2651
最新资源
- C#上位机 APP监控西门子PLC S7-1200 1,C#开发上位机手机APP,自己写的程序可提供部分 2,通过VS2019开发安卓手机app 3,全套源代码,现场运行设备实测有效 4,完整项目
- 压榨破碎机设计.x_t全套设计资料100%好用.zip
- 推料机 sw2020可编辑全套设计资料100%好用.zip
- 洋葱包装机step全套设计资料100%好用.zip
- 昆仑通态MCGS与台达伺服ASD-B2 通讯控制案例功能:通过昆仑通态MCGS触摸屏实现与台达ASD B2通讯控制,全通讯控制台达 B2驱动器速度设置,速度选择,速度启动,带扭矩限制速度控制,扭矩限
- 一种混联五轴机床AB式结构设计及运动仿真sw17可编辑全套设计资料100%好用.zip
- 油漆烘烤房sw20可编辑全套设计资料100%好用.zip
- C# opc ua客户端实例源码,带ef6+sqlite 代码有完整的注解,及包括所有的链接库和程序结构思维图 纯学习资料
- 用于将零件或工件安装在壳体中的组装机step全套设计资料100%好用.zip
- 圣诞树DIY:打造你的HTML圣诞树
- 程序员考试网页版注册功能
- 基于Python实现Scaffold-GS模型的空间表示转换与LOD结构迁移
- 图书管理系统网页版代码参考
- 苹果筛选和装箱生产线sw17全套设计资料100%好用.zip
- 三角履带轮sw16可编辑全套设计资料100%好用.zip
- 手机屏幕压支架机三工位全自动化step全套设计资料100%好用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈