function griglia=ritaglia(img,rows,columns)
%
% ritaglia(img,n,m) ritorna un cell array contenente le sotto-matrici
% ottenute ritagliando in l'immagine 'img' in una griglia rettangolare
% di N x M elementi. La griglia viene restituita dalla funzione in
% un cell array
%
%  Argomenti:
%
%    img - immagine da ritagliare (obbligatorio). Se questo è l'unico
%          argomento allora il cell array è formato da una griglia 3 x 3
%
%    rows - numero di righe del cell array.
%
%    columns - numero di colonne del cell array
%
% Se vengono passati solo 2 argomenti allora il numero di colonne
% viene posto uguale al numero delle righe (secondo argomento)
% 
%

    imgsz = size(img);

% Il seguente blocco di condizioni realizza il comportamento dichiarato
% mella dichiarazione della funzione per quanto riguarda gli argomenti
% di input. La variabile 'nargin' è una variabile 'embedded', viene creata
% da Octave o Matlab durante l'esecuzione di ogni funzione e contiene
% il numero di argomenti usati nel chiamare la funzione stessa
        
    if (nargin == 1)
        rows = 3;
        columns = 3;
    elseif (nargin == 2)
        columns = rows;
    end

    griglia = cell(rows,columns);

% Determiniamo in numero di pixel l'altezza di una riga e l'ampiezza di
% una colonna della griglia. Questi devono essere numeri interi

    altezza_riga     = floor(imgsz(1)/rows);
    ampiezza_colonna = floor(imgsz(2)/columns);

% gli array 'righe' e 'colonne' contengono gli indici alle righe e colonne
% dell'immagine che determinano la griglia 
    
    righe = [1:altezza_riga:imgsz(1)];
    colonne = [1:ampiezza_colonna:imgsz(2)];

    imgsz
    righe
    colonne

% viene composto il cell array

    for c = [1:length(colonne)-1]
        for r = [1:length(righe)-1]
            griglia{r}{c} = ...
                img(righe(r):righe(r+1)-1,colonne(c):colonne(c+1)-1);
        end
    end

end

% -- ritaglia.m