%
% Carichiamo l'immagine originale e verifichiamo
% la sua rappresentazione interna

% con octave potrebbe essere necessario caricare il package 'image'
%

if (exist('OCTAVE_VERSION', 'builtin') ~= 0)

    pkg load image

end

img = imread('cameraman.tiff');

class(img)
size(img)

% Una volta verificato che l'immagine sia già 
% rappresentata in scala di grigi (come un solo piano, 
% cioè una semplice matrice NxM) normalizziamola 
% nell'intervallo [0,1]

img = mat2gray(img);

% Valore massimo e valore minimo dell'immagine

max(img(:))
min(img(:))

% costruiamo la trasformazione logaritmica, che
% chiameremo logtr, usando una 'anonymous function' 
% di MATLAB/Octave. La linea di comando seguente definisce 
% la funzione logtr(v,alfa) dove alfa è uno scalare che
% determina la curvatura della funzione, mentre v può essere 
% sia uno scalare (un semplice numero) che una
% matrice (come quella che rappresenta un'immagine)

logtr=@(v,alfa) log(1 + alfa * v) / log(1 + alfa)

% Suddividiamo la finestra della grafica in 6 sotto-pannelli
% e fissiamo il primo pannello come pannello corrente

subplot(2,3,1)

% stampiamo l'immagine nella sua forma originale

imshow(img)

% Infine mostriamo le immagini trasformate per
% ognuno dei valori di alfa. Usiamo il comando 'for' per
% eseguire gli stessi comandi per ognuno dei valori di alfa.
% La variabile 'p' controlla quale pannello della finestra 
% grafica riceverà l'output grafico. Questo indice viene
% incrementato ad ogni ciclo con la linea p = p + 1 

% questa sequenza di comandi può essere scritta all'interno 
% di un file con estensione .m per essere eseguito 
% (e.g. histlog.m)
%
% L'uso dei file-m per salvare programmi (script)
% e il significato del ciclo 'for ... end' sono spiegati
% nella lezione 
%
% http://imaging.biol.unipr.it/download/L2021-7
%

p = 2;
for alfa=[1 50 100 200 500] 
    subplot(2,3,p) 
    imshow(logtr(img,alfa)); 
    p = p + 1; 
end

% -- histlog.m
