Elaborazioni elementari delle immagini
L. Verdoliva, M. Cagnazzo
08.03.07
In questa prima lezione affrontiamo il problema della rappresentazione delle immagini digitali in Matlab e presentiamo le principali elaborazioni nel dominio spaziale, tra cui alcune di quelle che permettono di migliorare l’aspetto di un’immagine per renderla più adatta ad una specifica applicazione (Image Enhancement).
1 Rappresentazione delle immagini in Matlab
Un’immagine digitale (monocromatica) può essere rappresentata in Matlab con una matrice bidimensionale il cui generico campione è chiamato (picture element) e varia nel range [0, K − 1]. Le immagini pixelX(m,n) sono quindi rappresentate con K livelli di grigio, e ogni pixel è codificato con log K bit.2
Scriviamo i comandi Matlab per leggere da file un’immagine in formato JPEG, e che ci consentono perciò di memorizzarne i valori in una matrice:
X = imread(’nome_file.jpg’); % leggiamo il file
[M,N] = size(X); % memorizziamo le dimensioni in M e N
whos; % cosa abbiamo adesso in memoria?
Attraverso il comando imread è possibile leggere immagini con formato standard come jpeg, tiff, gif, bmp ed altri. Con il comando help imread potete verificare esattamente quali sono i formati supportati dalla versione di Matlab che state utilizzando. Se l’immagine è in formato (cioè il file non ha un header), grezzo, le dimensioni sono M × N e il tipo di dato è intero senza segno su 8 bit, la lettura avviene con i seguenti comandi:
fid = fopen(’house.y’,’r’); % apertura del file in lettura
X = fread(fid,[N,M],’uint8’); % lettura dei dati
X = X’; % immagine trasposta
fclose(fid); % rilascio del file
whos X; % quali sono le caratteristiche di X?
Matlab legge per colonne quindi X va trasposta per una corretta visualizzazione. Fate attenzione al fatto che le immagini che volete leggere devono trovarsi nella directory corrente o nel path; in alternativa potete dare il percorso completo. Notate (con whos) come il comando imread memorizzi i valori come interi senza segno su 8 bit, mentre fread li converte in double (64 bit). Quando si usa imread conviene poi effettuare una conversione in double, perché molte operazioni non sono definite sul tipo uint8. La conversione si ottiene facilmente col comando X=double(X).
Una volta in memoria l’immagine può essere visualizzata nel modo seguente:
1
-
Elaborazione dei segnali multimediali - Esercitazione
-
Elaborazione dei segnali multimediali - Esercizi
-
Elaborazione dei segnali multimediali - Esercizi risolti
-
Elaborazione dei segnali multimediali - Esercizi