% Carico l'immagine di test ('chart.mat' deve essere nella directory corrente)
load chart.mat
imshow(chart/255)

%

% Subsampling diretto: 1 campione ogni 2 (/2)
sub2 = chart(1:2:end , 1:2:end);
imshow(sub2/255)

%

% Subsampling diretto: 1 campione ogni 2 (/4)
sub4 = sub2(1:2:end , 1:2:end);
imshow(sub4/255)

%

% Subsampling diretto: 1 campione ogni 2 (/8)
sub8 = sub4(1:2:end , 1:2:end);
imshow(sub8/255)

%

% Subsampling diretto: 1 campione ogni 2 (/16)
sub16 = sub8(1:2:end , 1:2:end);
imshow(sub16/255)

%

% Costruisco un filtro Gaussiano (1D) per prefiltrare l'immagine 
% prima del sottocampionamento:
kernel = gausswin(25,10); kernel = kernel/sum(kernel);
plot(kernel)

%

% Applico il filtro...
filt2 = imfilter( imfilter(chart , kernel) , kernel' , 'replicate' );
% ...e poi sottocampiono
fsub2 = filt2(1:2:end , 1:2:end);
imshow(fsub2/255)

%

% Applico il filtro...
filt4 = imfilter( imfilter(fsub2 , kernel) , kernel' , 'replicate' );
% ...e poi sottocampiono
fsub4 = filt4(1:2:end , 1:2:end);
imshow(fsub4/255)

%

% Applico il filtro...
filt8 = imfilter( imfilter(fsub4 , kernel) , kernel' , 'replicate' );
% ...e poi sottocampiono
fsub8 = filt8(1:2:end , 1:2:end);
imshow(fsub8/255)

%

% Applico il filtro...
filt16 = imfilter( imfilter(fsub8 , kernel) , kernel' , 'replicate' );
% ...e poi sottocampiono
fsub16 = filt16(1:2:end , 1:2:end);
imshow(fsub16/255)