Prima di procedere è necessario riprendere brevemente in considerazione le colormap associate alle immagini indicizzate.

È stato detto che una colormap, chiamata anche mappa di colori, è una matrice di valori.

Una colormap memorizza i componenti rosso, verde e blu di colori diversi in tre colonne separate quindi la sua dimensione è p x 3 dove p è il numero di colori della colormap. Se il tipo degli elementi è double, i valori vanno da 0 (che rappresenta l'assenza di quel colore) a 1 (che è la tonalità più brillante possibile). Se sono uint8 i valori vanno dal 0 a 255.

Il nero quindi corrisponde sempre alla tripletta [0, 0, 0]; il bianco a [1, 1, 1] o [255 255 255] a seconda della rappresentazione usata.

Matlab utilizza le colormap ogni volta che deve visualizzare una matrice, sia questa rappresentativa di un'immagine indicizzata, oppure di una funzione di due variabili o una superficie parametrica.

Nel caso si voglia visualizzare una matrice trattandola come se fosse un'immagine indicizzata, al posto di imshow è necessario usare o la funzione image, o la funzione imagesc.

Un esempio ci permetterà di capire la differenza tra le due. Consideriamo in primo luogo la matrice A = 10*peaks ( peaks è una matrice di default di Matlab) e proviamo a visualizzarla come se fosse una funzione di due variabili:

>> A = 10*peaks; 
>> surf(A);

si osserva che i sui valori sono compresi tra  -66 e 81.

La funzione image disegna la matrice trattandola come immagine e usandone i valori come se fossero gli indici dei colori della colormap:

>> A = 10*peaks; 
>> image(A);
>> colorbar;

È evidente che i valori negativi vengono compressi tutti sul colore 0 della colormap, così come il valore massimo (circa 81) è ancora un colore vicino celeste scuro. In alcune circostanze una rappresentazione di questo tipo è esattamente quello che si desidera, qualora però si volesse usare tutta la dinamica di colori a disposizione della colormap è consigliabile utilizzare la funzione imagesc (che riscala la colormap) per disegnare la matrice:

>> A = 10*peaks; 
>> imagesc(A);
>> colorbar;

È evidente che il colore più scuro della colormap è stato associato al valore minimo di A mentre quello più chiaro al valore massimo.

Qui sotto un esempio di utilizzo di imagesc per realizzare un grafico gradevole (attenzione che imagesc disegna sempre la matrice sul piano z=0):

>> A = peaks+10; 
>> surf(A);
>> hold on;
>> imagesc(A);
 

Ultime modifiche: lunedì, 1 gennaio 2024, 21:00