Ny=6; Nx=14; roz_wej=Nx*Ny; for i=1:roz_wej %tworzymy jednostki w sieci EL(i)=struct('w',[roz_wej],'stan',[0]); EL(i).w=zeros(1,roz_wej); end for i=1:3 name=sprintf('%d.png',i); a=imread(name,'png'); b=a(15:30,15:30); c=b(1:14,1:6); wz(i,:,:)=c; end z(1,:)=reshape(2*wz(1 ,:,:)-1,1,roz_wej);% robimy jeden wzorzec z(2,:)=reshape(2*wz(2 ,:,:)-1,1,roz_wej);% robimy drugi wzorzec z(3,:)=reshape(2*wz(3,:,:)-1,1,roz_wej);% robimy P=3; %macierz dekorelacji % Q=zeros(P,P); % for m=1:P % for n=1:P % Q(m,n)=1/roz_wej*sum(z(m,:).*z(n,:)); % end % end % Q % % Q_inv=Q.^(-1); disp('%teraz zapamiêtujemy wzorzec w wagach sieci:'); for n=1:P for i=1:roz_wej for j=1:roz_wej EL(i).w(j)=EL(i).w(j) + 1/roz_wej*z(n,i)*z(n,j); end end end disp('sprawdzamy czy zapamiêtany wzorzec jest stabilny') for ii=1:10 X=ones(1,roz_wej); %wybieramy wzorzec do psucia d=rand; if d<0.3 X(1:roz_wej)=z(1,1:roz_wej); ti='zaszumiona 1'; elseif d>0.6 X(1:roz_wej)=z(2,1:roz_wej); ti='zaszumiona 2'; else X(1:roz_wej)=z(3,1:roz_wej); ti='zaszumiona 3'; end %zaszumiamy wzorzec for k=1:roz_wej d=rand; if d>0.45, X(k)=-1*X(k);end end clf subplot(121) imagesc(reshape(X,Nx,Ny)); title(ti) disp('to jest obrazek wpuszczany do sieci -> znieksztalcony wzorzec');pause % sprawdzamy co sieci kojarzy sie z zaszumionym wzorcem conv=0; k=0; while(conv~=1) %czy uzyskalismy stan stacjonarny for i=1:roz_wej t=sum(EL(i).w.*X); %dynamika jednostek if(t>0) EL(i).stan= 1; else EL(i).stan= -1; end end conv=1; %tu ustawiamy flage stanu stacjonarnego na 1 for i=1:roz_wej if X(i)~=EL(i).stan X(i)=EL(i).stan; conv=0;% a tu ja jesli X i stany sa rozne end end subplot(122) imagesc(reshape(X,Nx,Ny)); title(k) k=k+1; drawnow end disp('ten wzorzec wydaje mi sie najbardziej zblizony do prezentowanego obrazka') pause end