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
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
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
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
È possibile utilizzare lo stesso processo per convertire i file BMP o JPEG.