In Matlab le immagini hanno due rappresentazioni:

  • RGB
  • Tramite colormap (immagini indicizzate)
Rappresentazione RGB

Quando l'immagine in Matlab è rappresentata in RGB risiede una matrice tridimensionale A di valori uint8.

Il primo piano A(:,:,1) nella terza dimensione rappresenta le intensità dei pixel rossi, il secondo piano A(:,:,2) rappresenta le intensità dei pixel verdi e il terzo piano A(:,:,3) rappresenta le intensità dei pixel blu.

Le prime due dimensioni di ogni piano contengono valori da 0 a 255 che rappresentano l'intensità della componente considerata in quel pixel di immagine.

Ad esempio, un'immagine RGB di 300x200 pixel ha 300 punti in orizzontale e 200 punti in verticale ed è quindi composta da 200 righe e 300 colonne e viene quindi memorizzata da Matlab in una matrice A(200,300,3) di uint8.

La convenzione di Matlab rende la manipolazione delle immagini simile (normalmente Matlab utilizza la doppia precisione, 64 bit, per rappresentare i dati, nel caso delle immagini RGB i dati sono interi a 8 bit per risparmiare memoria e in alcuni casi è necessario tener conto di questa differenza) all'utilizzo di qualsiasi altro tipo di dati matrice.

È possibile quindi selezionare un singolo pixel da una matrice immagine utilizzando i normali indici di matrice. Per esempio, il seguente comando restituisce l'intensità di rosso del pixel alla riga 2, colonna 15 dell'immagine A:

>> A(2,15,1)

I formati di immagine supportati da Matlab sono:

  • BMP (Microsoft® Windows® Bitmap)
  • GIF (Graphics Interchange Files)
  • HDF (Hierarchical Data Format)
  • JPEG (Joint Photographic Experts Group)
  • PCX (Paintbrush)
  • PNG (Portable Network Graphics)
  • TIFF (Tagged Image File Format)
  • XWD (X Window Dump)

Per aprire un'immagine si usa il comando imread. Per esempio, se l'immagine si trova nel file "immagine.png" è sufficiente scrivere

>> A = imread('immagine.png');

se nel file c'è un'immagine composta da più frame (come per esempio le GIF animate) viene caricata solo la prima immagine. Il comando

 

>> A = imread('immagine.png',idx);

carica l'immagine indicata dall'indice idx in un file multi immagine. Questa sintassi si applica solo ai file GIF, PGM, PBM, PPM, CUR, ICO, TIF, SVS e HDF4.

Per salvare un'immagine si usa il comando imwrite. Se l'immagine è contenuta nella matrice A, per salvarla nel file "immagine.png" il comando da utilizzare è

>> imwrite(A,'immagine.png');

Per visualizzare un'immagine è sufficiente usare imshow. Per visualizzare l'immagine contenuta nella matrice A, è sufficiente usare

>> imshow(A);
Rappresentazione TRAMITE COLORMAP

Le immagini rappresentate in Matlab tramite colormap sono costituite da 2 elementi

  • una matrice bidimensionale di uint8 o uint16 che indicano il colore corrispondente nella colormap
  • una colormap

 

Una colormap, chiamata anche mappa di colori, è una matrice di valori.

Le immagini rappresentate in questo modo prendono anche il nome di immagini indicizzate.

Le colormap possono essere di qualsiasi lunghezza, ma devono essere larghe tre colonne. Ogni riga nella matrice definisce un colore utilizzando una tripletta RGB. Una tripletta RGB è un vettore riga di tre elementi ognuno dei quali specifica le intensità delle componenti rosso, verde e blu del colore.

Le intensità vengono indicate con valori nell'intervallo tra 0 e  1. Un valore pari a 0 indica nessun colore e un valore pari a 1 indica la massima intensità di quella componente.

Ad esempio, il seguente comando crea una colormap con cinque colori: nero, rosso, verde, blu e bianco.

>> mymap = [0 0 0
    1 0 0
    0 1 0
    0 0 1
    1 1 1];

Le immagini in scala di grigi in Matlab sono immagini indicizzate.

Per esempio, un'immagine in scala grigi di 300x200 pixel in Matlab è costituita da una matrice I(200,300) di uint8 a cui è associata una colormap che prende il nome di gray della dimensione di 256 righe per 3 colonne.

Per aprire un'immagine indicizzata si usa ancora il comando imread solo che ora verranno restitute sia la matrice, sia la colormap.

Per esempio, se l'immagine si trova nel file "immagine.png" è sufficiente scrivere

>> [A,map] = imread('immagine.png');

Il comando legge la mappa degli indici per ogni pixel inserendoli nella matrice in A e legge la colormap associata mettendola in map. I valori della colormap nel file immagine vengono automaticamente ridimensionati nell'intervallo [0,1].

 

 

Per salvare un'immagine si usa una versione modificata imwrite. Se l'immagine è contenuta nella matrice A e colormap map, per salvarla nel file "immagine.png" il comando da utilizzare è

>> imwrite(A,map,'immagine.png');

Per visualizzare un'immagine si usa una versione modificata di imshow. Per visualizzare l'immagine indicizzata contenuta nella matrice A e colormap map, il comando da usare è:

>> imshow(A, map);

Se l'immagine è in scala di grigi è possibile utilizzare i seguenti due comandi:

>> imshow(A, [low high]);

che visualizza l'immagine in scala di grigi A, specificando l'intervallo di visualizzazione come vettore a due elementi, [low high]. Il comando imshow visualizza il valore low (e qualsiasi valore minore di low) come nero e visualizza il valore high (e qualsiasi valore maggiore di high) come bianco. I valori compresi tra low e high vengono visualizzati come sfumature intermedie di grigio, utilizzando il numero predefinito di livelli di grigio. 

>> imshow(A, []);

che visualizza l'immagine in scala di grigi A, riscalando la colormap in base all'intervallo di valori dei pixel in A. imshow utilizza [ min( I( : ) ) max( I( : ) ) ] come intervallo di visualizzazione, ovvero associa il valore minimo in A al nero e il valore massimo di A al bianco.

 

Approfondimenti

La documentazione realtiva alla manipolazione delle immagini si trova all'indirizzo https://it.mathworks.com/help/matlab/images_btfntr_-1.html

Ultime modifiche: lunedì, 1 gennaio 2024, 20:56