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
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB实现的带混沌扰动的PSO算法,应用到图像二阈值分割+使用说明文档.rar
共2个文件
md:1个
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 147 浏览量
2024-05-22
17:32:14
上传
评论
收藏 7KB RAR 举报
温馨提示
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的带混沌扰动的PSO算法,应用到图像二阈值分割+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于MATLAB实现的带混沌扰动的PSO算法,应用到图像二阈值分割+使用说明文档.rar (2个子文件)
使用说明文档.md 13KB
CLSPSOTwoEntropic.m 7KB
共 2 条
- 1
资源评论
IT狂飙
- 粉丝: 4823
- 资源: 2654
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功