filename = 'depth_map.mat'; % file con i dati di profondita'
imagename = 'depth_map.png'; % file dove salvare l'immagine

% carica il file con la depth map
load(filename);

% La depth map e' ora memorizzata nella matrice depth_map.
% depth_map contiene la profondità dei punti corrispondenti 
% agli elementi della matrice.
% Se un in corrispondenza di un elemento non esiste nessun punto,
% depth_map contiene NaN.

% calcola gli estremi dei valori rappresentati
m1 = min(min(depth_map));
m2 = max(max(depth_map));

% La depth map verra' mappata su una immagine dove:
% - se l'elemento vale NaN, il pixel corrispondente varra' 0;
% - il minimo valore di profondita' verra' mappato in 1;
% - il massimo valore di profondita' verra' mappato in 255;
% - i valori di profondita' intermedi verranno mappati linearmente
%   tra 1 e 255.
%               /
%               | 0,                         Nan
%   s = T(r) = <
%               | 1+254*(r-min)/(max-min),   min <= r <= max 
%               \

% alloca la matrice che conterra' l'immagine 
dm = zeros(size(depth_map));

% trova gli elementi a NaN e li mappa su 0
ind = find(isnan(depth_map));
dm(ind)=0;

% gli altri valori li mappa linearmente tra 1 e 255
ind = find(not(isnan(depth_map)));
dm(ind)=1+(depth_map(ind)-m1)/(m2-m1)*254;

% scala i valori tra 0 e 1 (dm e' una matrice di double);
% in alternativa, si puo' convertire la matrice in uint8 (dm = uint8(dm))
dm = dm/255;

% visualizza l'immagine
imshow(dm);
colorbar;

% salva l'immagine su file
imwrite(dm, imagename);
