⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aca_color.m

📁 本程序为蚁群算法在图像分类中的应用的源程序。(图像的大小为30*30)
💻 M
字号:
MAXIT=50; % 最大循环次数 
I=imread('D:\rsphoto\experiment.bmp');%i输入图像
I1=I(250:279,130:159);%%取一个30*30的矩阵
imshow(I),figure,imshow(I1)
NC=30*30; % number 
n1=zeros(1,NC);
n=zeros(1,NC);%%n是n1的双精度浮点的形式
for i=1:NC
    a=ceil(i/30);
    b=mod(i,30);
    if b==0
        b=30;
    end
    n1(1,i)=I1(a,b);
    n(1,i)=double(n1(1,i));
end %%该循环是把30*30矩阵转换成1*900的矩阵
n2=zeros(1,NC);
tao=zeros(NC,NC);% 初始时刻各路径的信息素为0
rho=0.8; % 挥发系数 
alpha=3; 
beta=1; 
Q=100; 
p0=0.1;
p=zeros(NC,NC);
r=15;%%我自己设置的数据
mant=NC; % 蚂蚁数量 
qifaxinxi=zeros(NC,NC);
fenmu=0;%%选择概率的分母
vsum=0;%%聚心的和
i=1;
s=1;
belong=zeros(1,NC);
v=n;
v1=zeros(1,NC*mant*MAXIT);
d=0;
v2=zeros(1,NC);
c=0;
%%%%%%%%    以上是初始化   %%%%%%%%%%%%%%%
for l=1:MAXIT
   for i=1:NC
    for k=1:mant
         if abs(n(k)-v(i))<=r
              tao(k,i)=1;
         else tao(k,i)=0;
         end
         j=1;
         for m=1;NC;
            if (abs(v(i)-n(m)))<=r
                belong(j)=n(m);
                j=j+1;
             end
          end
         l
          for m=1:j
              qifaxinxi(k,i)=1/(abs(n(k)-v(i))+1);
              fenmu=fenmu+((tao(m,i))^alpha)*((qifaxinxi(m,i))^beta);
          end
          p(k,i)=((tao(k,i))^alpha)*((qifaxinxi(k,i))^beta)/fenmu;
          fenmu=0;
          if p(k,i)>p0
              for m=1:j
                  vsum=vsum+belong(m);
               end
               v(i)=vsum/j;
               vsum=0;
               break;
           else tao(k,i)=rho*tao(k,i)+Q*qifaxinxi(k,i);
           end
       end
   end
end
%%%%以上是单蚁群算法的核心部分
v1 = flipud(sort(v));
v2(1)=v1(1);
for m=2:NC
    if v1(m)~=v1(m-1)
        c=c+1;
        v2(c)=v1(m);
    end
end
%%%   以上求出聚心的个数c和聚心v2(c)   %%%%%%
j=1;
fenlei=zeros(c,NC);%%分类结果
oushijuli=zeros(NC,c);%%点到聚心得欧式距离
for m=1:NC
    for i=1:c
        oushijuli(m,i)=abs(n(m)-v2(i));
    end
end
for i=1:NC
    [x,y]=min(oushijuli(i,:));%%取其每一行的最小值
    fenlei(y,j)=i;
    j=j+1;
end 
%%%%%%%%%   以上是分类过程        %%%%%%%%%%%%
for i=1:NC
    [x,y]=min(oushijuli(i,:));
    fenlei(y,i)=i;
    if fenlei(1,i)~=0
        n2(1,i)=v(1);
    end
    if fenlei(2,i)~=0
        n2(2,i)=v(2);
    end
    if fenlei(3,i)~=0
         n2(3,i)=v(3);
     end
end
%%%%%%%% 以上是把每一类用一个灰度值表示%%%%%%%%
for i=1:NC
    a=ceil(i/30);
    b=mod(i,30);
    if b==0
        b=30;
    end
     if n2(1,i)~=0
        I2(a,b,1)=1;
        I2(a,b,2)=0;
        I2(a,b,3)=0;
     end
     if n2(2,i)~=0
        I2(a,b,1)=1;
        I2(a,b,2)=1;
        I2(a,b,3)=0;
     end
     if n2(3,i)~=0
        I2(a,b,1)=0;
        I2(a,b,2)=0;
        I2(a,b,3)=1;
     end
end
%%%%%%%%把1*900的矩阵变成30*30的矩阵%%%%%%%%%%
figure,imshow(I2)
%%%%%%%%%显示图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%作者于2007年5月17日完成%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -