function soglia_calcolata = iterthresh (img,max_iterazioni,target)
%
% modello di script per la determinazione della soglia
% con metodo iterativo.
%
%  soglia_calcolata = iterthresh(img)
%
% viene usato un algoritmo iterativo per la determinazione della
% soglia. L'algoritmo usa 0.1 come differenza tra soglie successive
% che termina l'esecuzione. In ogni caso vengono eseguite al massimo
% 100 iterazioni
%
%  soglia_calcolata = iterthresh(img,max_iterazioni)
% 
% Stesse funzionalità ma il secondo argomento specifica un
% nuovo numero massimo di iterazioni
%
%  soglia_calcolata = iterthresh(img,max_iterazioni,target)
%
% Questo script è solo un modello: per essere funzionante
% deve essere completato
%

% passo 1 dell'algoritmo

% nella variabile soglia memorizziamo la media globale
% dell'intensità luminosa di img

    if (nargin == 1)
        max_iterazioni = 100;
        target = 0.1;
    elseif (nargin == 2)
        target = 0.1;
    end

   % valore iniziale della soglia
    
    soglia = mean(img(:));
    ultima_soglia = 0;
    
   % contatore del numero di iterazioni
   
    niter = 0;

    % eseguiamo il ciclo while fino a quando 
    % la differenza tra la ultime 2 soglie calcolate
    % non è minore di 'target' e fino a quando il
    % valore di niter > max_iterazioni.
    % L'espressione della condizione è resa più complicata
    % dal fatto che comunque vogliamo eseguire almeno
    % una iterazione

    while (((abs(soglia-ultima_soglia) > target) && ...
            (niter < max_iterazioni)) || (niter == 0))

        % salviamo il valore corrente della soglia
        % così che alla fine della iterazione
        % possiamo confrontarlo con il nuovo valore
        % della soglia ricalcolata
        
        ultima_soglia = soglia;
        
        % determiniamo le 'maschere' booleane
        % sulla base della soglia
        
        fore = img > soglia;
        back = img <= soglia;
               
        m1 = mediasel(img,fore);
        m2 = mediasel(img,back);

        % calcoliamo la nuova soglia. 
        % Togliendo il ; alla fine di questa linea
        % potete vedere la sequenza delle soglie 
        % calcolate
        
        soglia = (m1 + m2) / 2;
        
        % incrementiamo il numero delle iterazioni

        niter = niter + 1;

    end

    soglia_calcolata = soglia; 
end

% -- iterthresh.m