📄 art_fang.m
字号:
%ART
%程序仅限有3种模式
%初始化
close all;
clear;
K=ones(7,7);%用于数据反位
x1=K-imread('1.bmp');%读入数据
x2=K-imread('2.bmp');
x3=K-imread('3.bmp');
x4=K-imread('4.bmp');
x5=K-imread('5.bmp');
N=49;
Num=zeros(5,N);
output=zeros(sqrt(N),sqrt(N));
for i=1:N
Num(1,i)=x1(i);
end
for i=1:N
Num(2,i)=x2(i);
end
for i=1:N
Num(3,i)=x3(i);
end
for i=1:N
Num(4,i)=x4(i);
end
for i=1:N
Num(5,i)=x5(i);
end
mode_num=3;
b=1/(1+N)*ones(N,mode_num);
t=ones(mode_num,N);
rho=input('输入警戒系数(0~1):');
d_j=zeros(1,mode_num); %标记是是否参加竞选
Sj=zeros(1,mode_num);
n=0; %记录试验的次数
x=input('输入模式编号(1,2,3,4,5):');
while sum(Num(x,:))%用于等待输入
compete_end=0;
d_j=zeros(1,mode_num);
while compete_end==0
for j=1:mode_num
Sj(1,j)=Num(x,:)*b(:,j);
end
Sj_star=-1;
j_star=-1;
for j=1:mode_num
if (Sj(1,j)>Sj_star)&(d_j(1,j)==0)
Sj_star=Sj(1,j);
j_star=j;
end
end
if t(j_star,:)*Num(x,:)'/sum(Num(x,:))>rho %训练 调整tij bij
for i=1:N
c(1,i)=t(j_star,i)*Num(x,i);
end
sum_c=sum(c);
for i=1:N
b(i,j_star)=c(1,i)/(0.5+sum_c);
t(j_star,i)=c(1,i);
end
compete_end=1;%匹配
else
d_j(1,j_star)=1; %不许参加竞争
end
end
n=n+1;
%以下用于显示输出结果
subplot(5,4,4*(n-1)+1);
for i=1:sqrt(N)
for j=1:sqrt(N)
output(i,j)=Num(x,(i-1)*sqrt(N)+j);
end
end
imagesc(output');
axis square;
title('输入的图像')
subplot(5,4,4*(n-1)+2);
for i=1:sqrt(N)
for j=1:sqrt(N)
output(i,j)=t(1,(i-1)*sqrt(N)+j);
end
end
imagesc(output');
axis square;
title('模式一')
subplot(5,4,4*(n-1)+3);
for i=1:sqrt(N)
for j=1:sqrt(N)
output(i,j)=t(2,(i-1)*sqrt(N)+j);
end
end
imagesc(output');
axis square;
title('模式二')
subplot(5,4,4*(n-1)+4);
for i=1:sqrt(N)
for j=1:sqrt(N)
output(i,j)=t(3,(i-1)*sqrt(N)+j);
end
end
imagesc(output');
axis square;
title('模式三')
x=input('输入模式编号(1,2,3,4,5):');
if n>4
display('输入模式已满,请看输出图像')
break;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -