• 大小: 8KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Matlab
  • 标签:

资源简介

基于最大类间方差的分割算法,可在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个组织的每个粒子速度为组织最优速度 
              

评论

共有 条评论