% Carico l'immagine di test (il file deve trovarsi nella directory corrente
im = imread('Barbara.pgm');

% Trasformo i valori interi dei pixel (uint8) in double (più comodo per
% effettuare la convoluzione
image = double(im)/255;
% Visualizzo l'immagineimshow(image);

%

% Costruisco il kernel Gaussiano 1D: ad es. una finestra da 25 campioni
% ('taps') con sigma = 12.5/4
kernel = gausswin(25,4);

% Il filtro va normalizzato (area unitaria) per evitare che "amplifichi"
% l'immagine:
kernel = kernel / sum(kernel);

% Visualizzo il kernel
plot(kernel)

%

% Poiché il kernel così creato è un vettore COLONNA, il filtraggio con
% 'kernel' risulta lungo la VERTICALE:

image_filt_v = imfilter(image, kernel);
imshow(image_filt_v);

%

% Ora applico all'immagine filtrata in verticale il kernel in orizzontale:

image_filt = imfilter(image_filt_v, kernel');
imshow(image_filt);

%

% A titolo di verifica, applichiamo il kernel ora in ordine inverso:
% dapprima in ORIZZONTALE all'immagine originale:

image_filt_h = imfilter(image, kernel');
imshow(image_filt_h);

%

% E poi il kernel verticale all'immagine filtrata in orizzontale:

image_filt = imfilter(image_filt_h, kernel);
imshow(image_filt);