Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Wavelet: Lavorare con le immagini

Questa sezione fornisce ulteriori informazioni sul lavoro con le immagini nel software Wavelet Toolbox™. Descrive i tipi di immagini supportate e il modo in cui l'ambiente MATLAB® le rappresenta, nonché le tecniche per l’analisi delle immagini a colori.

Comprensione delle immagini nell’ambiente MATLAB

La struttura dei dati di base in MATLAB è la matrice rettangolare, un insieme ordinato di elementi reali o complessi. Questo oggetto è naturalmente adatto alla rappresentazione di immagini, che sono insiemi ordinati a valore reale di dati di colore o di intensità. (Questa toolbox non supporta le immagini a valore complesso).

Il termine pixel deriva da elemento di immagine e usualmente indica un singolo punto sul display di un computer o un singolo elemento in una matrice di immagine. È possibile selezionare un singolo pixel da una matrice di immagine utilizzando i normali pedici della matrice. Ad esempio:

I(2,15)

restituisce il valore del pixel alla riga 2 e alla colonna 15 dell’immagine I. Per impostazione predefinita, MATLAB scala le immagini per riempire gli assi sul display; pertanto, un pixel dell'immagine può utilizzare più di un singolo pixel sullo schermo.

Immagini indicizzate

Una tipica immagine a colori richiede due matrici: una matrice mappa dei colori e una matrice immagine. La mappa dei colori è un insieme ordinato di valori che rappresentano i colori dell'immagine. Per ciascun pixel dell'immagine, la matrice immagine contiene un indice corrispondente nella mappa dei colori. (Gli elementi della matrice immagine sono numeri interi in virgola mobile, o flint, che MATLAB memorizza come valori a doppia precisione).

La dimensione della matrice mappa dei colori è n per 3 per un’immagine contenente n colori. Ciascuna riga della matrice mappa dei colori è un vettore di colore rosso, verde, blu (RGB) di 1 per 3

color = [R G B]

che specifica l'intensità dei componenti rosso, verde e blu di quel colore. R, G e B sono scalari reali che vanno da 0,0 (nero) a 1,0 (intensità piena). MATLAB traduce questi valori in intensità di visualizzazione quando si visualizza un'immagine e la sua mappa dei colori.

Quando MATLAB visualizza un'immagine indicizzata, utilizza i valori della matrice immagine per cercare il colore desiderato nella mappa dei colori. Ad esempio, se la matrice immagine contiene il valore 18 nella posizione della matrice (86,198), il colore per il pixel (86,198) è il colore della riga 18 della mappa dei colori.

Al di fuori di MATLAB, le immagini indicizzate con n colori contengono spesso valori da 0 a n–1. Questi valori sono indici in una mappa dei colori che ha 0 come primo indice. Poiché le matrici MATLAB iniziano con l'indice 1, è necessario incrementare ciascun valore nell'immagine, o spostare verso l’alto l’immagine per crearne una che possa essere manipolata con le funzioni della toolbox.

Scomposizione wavelet di immagini indicizzate

Le immagini indicizzate possono essere considerate come immagini di intensità scalate, con elementi della matrice che contengono solo numeri interi da 1 a n, dove n è il numero di sfumature discrete dell'immagine.

Poiché la mappa dei colori dell'immagine è utilizzata solo per scopi di visualizzazione, alcune immagini indicizzate possono necessitare di una preelaborazione per ottenere i risultati corretti dalla scomposizione wavelet.

In generale, le immagini indicizzate a colori non hanno mappe di colore uniformi e lineari e devono essere convertite nell'immagine indicizzata sulla scala di grigi appropriata prima di eseguire una scomposizione wavelet.

Immagini RGB (Truecolor)

Un’immagine RGB, talvolta definita come immagine truecolor, è memorizzata in MATLAB come un array di dati m per n per 3 che definisce i componenti di colore rosso, verde e blu per ciascun singolo pixel. Le immagini RGB non utilizzano una palette. Il colore di ciascun pixel è determinato dalla combinazione delle intensità di rosso, verde e blu memorizzate in ciascun piano di colore nella posizione del pixel. I formati di file grafici memorizzano le immagini RGB come immagini a 24 bit, dove i componenti rosso, verde e blu sono 8 bit ciascuno. Questo produce un potenziale di 16 milioni di colori.

La precisione con cui è possibile replicare un'immagine reale ha portato al soprannome di "immagine truecolor". Un array RGB MATLAB può essere di classe double, single, uint8 o uint16. In un array RGB di classe double, ciascun componente del colore è un valore compreso tra 0 e 1.

I componenti del colore di un'immagine RGB a 8 bit sono numeri interi nell'intervallo [0, 255] anziché valori in virgola mobile nell'intervallo [0, 1].

Scomposizione wavelet di immagini truecolor

Le immagini truecolor analizzate sono array m per n per 3 di uint8. Ciascuno dei componenti a tre colori è una matrice che viene scomposta utilizzando lo schema di scomposizione wavelet bidimensionale.

Conversione di immagini

Il software Image Processing Toolbox™ fornisce una serie completa di funzioni che consentono di eseguire facilmente conversioni tra i tipi di immagine. Se non si dispone di Image Processing Toolbox™, questo esempio mostra come eseguire le conversioni utilizzando i comandi di base di MATLAB®.

Esempio 1: Conversione di immagini indicizzate a colori

Caricare e visualizzare un'immagine indicizzata a colori. La barra dei colori a destra dell'immagine non è uniforme e non ha una progressione monotona da scuro a chiaro. Questo tipo di immagine indicizzata non è adatta alla scomposizione wavelet diretta con la toolbox e deve essere pre-elaborata.

load xpmndrll
whos
  Name        Size              Bytes  Class     Attributes

  X2        192x200            307200  double              
  map        64x3                1536  double              
image(X2)
title("Original Color Indexed Image")
colormap(map)
colorbar

Figure contains an axes object. The axes object with title Original Color Indexed Image contains an object of type image.

Per prima cosa, separare l'immagine indicizzata a colori nei suoi componenti RGB.

R = map(X2,1);
R = reshape(R,size(X2));
G = map(X2,2);
G = reshape(G,size(X2));
B = map(X2,3);
B = reshape(B,size(X2));

Convertire le matrici RGB in un'immagine di intensità in scala di grigi, utilizzando le ponderazioni percettivi standard per i tre componenti cromatici.

Xrgb = 0.2990*R + 0.5870*G + 0.1140*B;

Riconvertire l'immagine di intensità in scala di grigi in un'immagine indicizzata in scala di grigi con 64 livelli distinti e creare una nuova mappa dei colori con 64 livelli di grigio. La barra dei colori dell'immagine convertita è ora lineare e presenta una transizione uniforme da scuro a chiaro.

n = 64;
X = round(Xrgb*(n-1))+1; 
map2 = gray(n);
figure
image(X)
title("Processed Gray Scale Indexed Image") 
colormap(map2)
colorbar

Figure contains an axes object. The axes object with title Processed Gray Scale Indexed Image contains an object of type image.

Esempio 2: Conversione di immagine TIF RGB

Caricare e visualizzare un'immagine TIF RGB.

A = imread("example.tif");
whos A
  Name        Size                 Bytes  Class    Attributes

  A         650x600x3            1170000  uint8              
figure
image(A)
title("Original Image")
colorbar

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

Convertire l'immagine nel tipo di dati double. Quindi abbinare i componenti RGB in un'immagine di intensità in scala di grigi, utilizzando le ponderazioni percettive standard per i tre componenti cromatici.

Ad = double(A);
Argb = 0.2990*Ad(:,:,1) + 0.5870*Ad(:,:,2) + 0.1140*Ad(:,:,3);

Utilizzare la funzione wcodemat per riconvertire l'immagine di intensità in scala di grigi in un'immagine indicizzata in scala di grigi con 255 livelli distinti e creare una nuova mappa dei colori con 255 livelli di grigio.

NbColors = 255; 
Aind = wcodemat(Argb,NbColors); 
Amap = pink(NbColors);
figure
image(Aind)
colormap(Amap)
title("Processed Image")
colorbar

Figure contains an axes object. The axes object with title Processed Image contains an object of type image.

È possibile utilizzare lo stesso processo per convertire i file BMP o JPEG.

Vedi anche

| |