function S=smooth(M,r)
% Smussa una matrice in un numero R di passaggi; anche il bordo viene smussato.
	dim=size(M);
	S=M;
	S_new=M;
	for p=1:r % Ciclo dei passaggi
		for i=2:dim(1)-1
			% Smussamento dei punti "interni"
			for j=2:dim(2)-1
			S_new(i,j)=[4*S(i,j)+S(i,j-1)+S(i,j+1)+S(i-1,j)+S(i+1,j)]/8;
			endfor

			% Smussamento dei punti sui bordi
			S_new(1,i)=[3*S(1,i)+S(1,i-1)+S(1,i+1)+S(2,i)]/6;
			S_new(i,1)=[3*S(i,1)+S(i-1,1)+S(i+1,1)+S(i,2)]/6;
			S_new(end,i)=[3*S(end,i)+S(end,i-1)+S(end,i+1)+S(end-1,i)]/6;
			S_new(i,end)=[3*S(i,end)+S(i-1,end)+S(i+1,end)+S(i,end-1)]/6;
		endfor
		% Smussamento dei quattro vertici
		S_new(1,1)=[2*S(1,1)+S(1,2)+S(2,1)]/4;
		S_new(end,1)=[2*S(end,1)+S(end,2)+S(end-1,1)]/4;
		S_new(1,end)=[2*S(1,end)+S(2,end)+S(1,end-1)]/4;
		S_new(end,end)=[2*S(end,end)+S(end,end-1)+S(end-1,end)]/4;

		% Aggiornamento Matrice
		S=S_new;
	endfor
endfunction
