Matrici e immagini
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;
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;
È 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;
È 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;