资源简介
基于最大类间方差的分割算法,可在MATLAB上直接运行
代码片段和文件信息
% function superbest=star_opso(mnd)
m=5;
n=10;
d=5;
%基于组织的粒子群优化算法入口
%m个组织,每个组织中有m个粒子
%n为最大迭代次数
%d为支撑基维数
%函数opso-fun可改变,但同时支撑基的维数d也会改变
%当函数OPSO_fun改变时注意函数opso_data和函数opso_vect中支撑基维数d的改变
im=imread(‘lena.bmp‘); %读入待分割图像
if( isrgb( im ) )
im = rgb2gray( im );
end;
[immimn]=size(im); %计算待分割图像的大小
figure(1);imshow(im);title(‘Original‘);
x=opso_data(m); %x为粒子,初始化m*m个粒子的位置
v=opso_vect(m); %v为速度,初始化m*m个粒子的速度
wmax=0.900000000001; %权重最大值
wmin=0.4; %权重最小值
c1=2.05; %常系数
c2=2.05; %常系数
for i=1:m
for j=1:m
for h=1:d
xx(h)=x(ijh);
end
x(ijd+1)=opso_fun1(xxdouble(im)immimnd); %计算每个粒子的值,并赋予粒子后
v(ijd+1)=0;
end
end
for i=1:m
for j=1:m
for h=1:d+1
persongood(1ijh)=x(ijh); %粒子个体最优值初始化
persongood(2ijh)=v(ijh); %粒子个体最优速度初始化
end
end
end
allbetter=opso_all_better(persongoodmd); %查找每个组织的最优值
j=1; %查找整个组织最优值(小)
for i=1:m
if allbetter(1id+1)<=allbetter(1jd+1)
j=i;
end
end
y1=allbetter(1jd+1); %初始整个组织最优值(小)赋值
y2=y1;
for k=1:n %开始迭代运算,k为迭代次数,n为最大迭代次数
w=wmax-(wmax-wmin)*k/n;
for i=1:m
for j=1:m
for h=1:d
r1=rand(11);
r2=rand(11);
v(ijh)=w*v(ijh)+c1*r1*(persongood(1ijh)-x(ijh))+c2*r2*(allbetter(1ih)-x(ijh)); %更新粒子速度
x(ijh)=x(ijh)+v(ijh); %更新粒子位置
end
end
end
for i=1:m
for j=1:m
for h=1:d
xx(h)=x(ijh);
end
x(ijd+1)=opso_fun1(xxdouble(im)immimnd); %计算更新后每个粒子的值,并赋予粒子后
end
end
s=0; %记录粒子个体最优值是否更新
for i=1:m
for j=1:m
if x(ijd+1)<=persongood(1ijd+1)
for h=1:d+1
persongood(1ijh)=x(ijh); %更新粒子个体最优值
persongood(2ijh)=v(ijh); %更新粒子个体最优速度
end
s=s+1;
end
end
end
if s~=0 %当有粒子个体最优值更新时,计算组织的最优值(小)
allbetter=opso_all_better(persongoodmd); %计算更新每个组织的最优值
t=1; %查找迭代更新后组织最优值(小)
for i=1:m
if allbetter(1id+1)<=allbetter(1td+1)
t=i;
end
end
y2=allbetter(1td+1); %整个组织最优值(小)赋值
end
if y1~=y2 %当整个组织最优值更新时,极值最差的组织遭到淘汰,随之产生强势组织
h=1; %查找整个组织中最差(大)组织h
for i=1:m
if allbetter(1id+1)>=allbetter(1hd+1)
h=i;
end
end
for i=1:m
for j=1:d+1
x(hij)=allbetter(1ij); %更新第h个组织的每个粒子位置为组织最优位置
v(hij)=allbetter(2ij); %更新第h个组织的每个粒子速度为组织最优速度
评论
共有 条评论