Elaborazione delle Immagini

Transcript

Elaborazione delle Immagini
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Laboratorio per l’Elaborazione
MultiMediale
Lezione 6 Elaborazione delle Immagini
Prof. Michele Scarpiniti
Dipartimento di Ingegneria dell’Informazione, Elettronica e Telecomunicazioni
“Sapienza” Università di Roma
http://ispac.diet.uniroma1.it/scarpiniti/index.htm
[email protected]
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
1 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
1
Introduzione
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
2
Elementi di Elaborazione delle Immagini
Introduzione
La Segmentazione
3
Il Video
Funzioni Base
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
2 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Introduzione
Introduzione
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
3 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Introduzione
L’obiettivo di questa lezione è di illustrare i comandi di base per operare con
le immagini in Matlab.
Vengono anche discusse alcune semplici tecniche di elaborazione delle immagini.
Matlab mette a disposizione centinaia d funzioni, utili per lavorare con le
immagini: queste funzioni sono parte dell’Image Toolbox. Una guida di
questo Toolbox può essere reperita al link http://www.mathworks.it/
access/helpdesk/help/pdf_doc/images/images_tb.pdf.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
4 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Tipi di Immagine
Esistono diverse modalità per memorizzare un file rappresentante un’immagine.
Le principali sono le seguenti tre:
1 Scala di grigi;
2 Truecolor;
3 Indicizzata.
Nella modalità a scala di grigi ogni pixel dell’immagine contiene un livello
di grigio, compreso tra 0 e 1.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
5 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Tipi di Immagine
Nella modalità Truecolor ogni pixel
dell’immagine è un vettore di tre elementi contenenti i livelli di rosso,
verde, blu (RGB), compresi tra 0 e
1.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
6 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Tipi di Immagine
Infine, nella modalità indicizzata ogni pixel rappresenta la riga di una mappa
di colore, costituita da tre elementi, cioè i livelli di rosso, verde, blu (RGB),
compresi tra 0 e 1.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
7 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: leggere un file di immagine
Per leggere un file contenete una immagine in scala di grigi o a colori, Matlab
mette a disposizione il comando
>>
>>
>>
>>
I = imread ( filename , fmt ) ;
[I , map ] = imread (...) ;
[I , map ] = imread ( filename ) ;
[I , map ] = imread ( URL ,...) ;
Viene letta un’immagine di formato ’fmt’ e di nome (e percorso) specificato da
’filename’ o caricata dal web dall’indirizzo specificato da ’URL’ e viene restituita
una matrice I di dimensioni M × N se a scala di grigio (gli M × N pixels delle M
righe e N colonne), oppure di dimensioni M × N × 3 se a colori rappresentati con
il modello RGB o M × N × 4 se rappresentati con il modello CMYK (tipico dei
file *.tiff ). Gli elementi di questa matrice sono numeri interi (tipo uint8), cioè
assumono valori da 0 a 255. Se il formato ’fmt’ non viene specificato, la funzione
imread cerca di capire il formato dal file stesso.
Legge anche una immagine indicizzata, restituendo la relativa mappa di colore
nella variabile map.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
8 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: leggere un file di immagine
I tipi di file gestiti da Matlab sono i seguenti 14:
BMP: Windows Bitmap;
CUR: Cursor File;
GIF: Graphical Interchange Format;
HDF4: Hierarchical Data Format;
ICO: Icon File;
JPEG: Joint Photographic Expert Group;
PBM: Portable Bitmap;
PCX: Windows Paintbrush;
PGM: Portable Graymap;
PNG: Portable Network Graphics;
PPM: Portable Pixmap;
RAS: Sun Raster;
TIFF: Tagged Image File Format;
XWD: X Window Dump.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
9 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: ottenere le informazioni un file di immagine
E’ possibile ottenere le informazioni su un file di immagine in una struttura info, tramite il
comando
>> info = imfinfo ( filename , fmt ) ;
>> info = imfinfo ( filename ) ;
>> info = imfinfo ( URL ,...) ;
Ad esempio:
>> imfinfo ( ’ orig1 ’ , ’ jpg ’)
ans =
Filename :
FileModDate :
FileSize :
Format :
FormatVersion :
Width :
Height :
BitDepth :
ColorType :
F or ma tSignature :
N um be rOfSamples :
CodingMethod :
CodingProcess :
Comment :
M. Scarpiniti
’ orig1 . jpg ’
’20 - mag -2005 20:57:46 ’
5047
’ jpg ’
’’
128
128
8
’ grayscale ’
’’
1
’ Huffman ’
’ Sequential ’
{}
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
10 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: ottenere le informazioni un file di immagine
Informazioni sul tipo di file possono essere ottenute dal seguente comando, che
restituisce una struttura formats:
>> imformats
>> formats = imformats ;
>> formats = imformats ( ’ fmt ’) ;
I possibili campi della struttura, sono
ext: specifica le estensioni valide per il formato in esame;
isa: specifica il nome della funzione che determina se il file è del tipo specificato;
info: specifica il nome della funzione che legge le informazioni del tipo specificato;
read: specifica il nome della funzione che legge i dati dal tipo specificato;
write: specifica il nome della funzione che scrive i dati nel tipo specificato;
alpha: vale 1 se il formato ha un canale alfa, 0 altrimenti;
description: descrive brevemente il tipo di file.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
11 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: ottenere le informazioni un file di immagine
Ad esempio, per il formato *.jpg
>> imformats ( ’ jpg ’)
ans =
ext : { ’ jpg ’ ’ jpeg ’}
isa : @isjpg
info : @imjpginfo
read : @readjpg
write : @writejpg
alpha : 0
description : ’ Joint Photographic Experts Group ( JPEG ) ’
Oppure, per il formato *.tiff
>> imformats ( ’ tiff ’)
ans =
ext : { ’ tif ’ ’ tiff ’}
isa : @istif
info : @imtifinfo
read : @readtif
write : @writetif
alpha : 0
description : ’ Tagged Image File Format ( TIFF ) ’
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
12 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: ottenere le informazioni un file di immagine
Senza il tipo di formato, la funzione imformats restituisce in una tabella tutti i
campi delle proprietà relative a tutti i tipi di file supportati:
>> imformats
EXT
ISA
INFO
READ
WRITE
ALPHA DESCRIPTION
-----------------------------------------------------------------------------------------------bmp
isbmp
imbmpinfo
readbmp
writebmp 0
Windows Bitmap ( BMP )
cur
iscur
imcurinfo
readcur
1
Windows Cursor resources ( CUR )
fts fits isfits imfitsinfo readfits
0
Flexible Image Transport System ( FITS )
gif
isgif
imgifinfo
readgif
writegif 0
Graphics Interchange Format ( GIF )
hdf
ishdf
imhdfinfo
readhdf
writehdf 0
Hierarchical Data Format ( HDF )
ico
isico
imicoinfo
readico
1
Windows Icon resources ( ICO )
jpg jpeg isjpg
imjpginfo
readjpg
writejpg 0
Joint Photographic Experts Group ( JPEG )
pbm
ispbm
impnminfo
readpnm
writepnm 0
Portable Bitmap ( PBM )
pcx
ispcx
impcxinfo
readpcx
writepcx 0
Windows Paintbrush ( PCX )
pgm
ispgm
impnminfo
readpnm
writepnm 0
Portable Graymap ( PGM )
png
ispng
impnginfo
readpng
writepng 1
Portable Network Graphics ( PNG )
pnm
ispnm
impnminfo
readpnm
writepnm 0
Portable Any Map ( PNM )
ppm
isppm
impnminfo
readpnm
writepnm 0
Portable Pixmap ( PPM )
ras
isras
imrasinfo
readras
writeras 1
Sun Raster ( RAS )
tif tiff istif
imtifinfo
readtif
writetif 0
Tagged Image File Format ( TIFF )
xwd
isxwd
imxwdinfo
readxwd
writexwd 0
X Window Dump ( XWD )
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
13 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: scrivere un file di immagine
Per scrivere un file contenete una immagine in scala di grigi o a colori,
Matlab mette a disposizione il comando
>> imwrite (I , filename , fmt ) ;
>> imwrite (I , map , filename , fmt ) ;
Tale comando salva sul disco un file di nome ’filename’ e di formato
specificato da ’fmt’ contenente l’immagine rappresentata dalla matrice I.
La matrice I può avere dimensioni M × N per immagini in scala di grigi,
oppure dimensioni M × N × 3 per immagini a colori, rappresentata dal
modello RGB o M × N × 4 per immagini a colori, rappresentata dal modello
CMYK.
La seconda riga salva una immagine indicizzata con la relativa mappa di
colore, specificata dalla variabile map.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
14 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: visualizzare una immagine
Per visualizzare una immagine in scala di grigi o a colori contenuta in una
matrice I, Matlab mette a disposizione il comando
>>
>>
>>
>>
>>
imshow ( I ) ;
imshow (I ,[ low high ]) ;
imshow (I , map ) ;
imshow ( filename ) ;
handle = imshow (...) ;
Se l’immagine è in scala di grigi, posso visualizzare solo i pixels con valori
all’interno dell’intervallo [low high], gli altri valori saranno sostituiti con il
colore nero, se il loro valore è minore di low , altrimenti, se maggiore, con
il colore bianco. Posso anche visualizzare una immagine indicizzata con la
relativa mappa di colore contenuta nella variabile map, oppure
un’immagine da un file di nome ’filename’. Se serve, la funzione
imshow restituisce l’handle della figura.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
15 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: visualizzare una immagine
Vediamo un esempio:
>> I = imread ( ’ cameramen . tif ’) ;
>> subplot (1 ,2 ,1) , imshow ( I ) ;
>> subplot (1 ,2 ,2) , imshow (I ,[0 80]) ;
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
16 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: visualizzare una immagine
Riportiamo un secondo esempio, utilizzando una immagine indicizzata:
>> [X , map ] = imread ( ’ trees . tif ’) ;
>> imshow (X , map ) ;
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
17 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: visualizzare una immagine
Un modo alternativo per visualizzare una immagine in scala di grigi o a
colori contenuta in una matrice A (quindi trattata come un’immagine), è
quello di utilizzare il comando
>> image ( A ) ;
>> image (x ,y , A ) ;
>> handle = image (...) ;
Questo comando visualizza il contenuto della matrice A come
un’immagine. Posso anche specificare in due vettori x e y gli intervalli
degli assi da visualizzare, ma l’immagine è la stessa della chiamata
precedente. Se serve la funzione image restituisce l’handle della figura.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
18 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: visualizzare una immagine
Ad esempio, carico da file una matrice X che contiene una fotografia a colori di un
primate e la visualizzo:
>>
>>
>>
>>
>>
>>
M. Scarpiniti
load mandrill
figure ( ’ color ’ , ’k ’)
image ( X )
colormap ( map )
axis off
axis image
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
19 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: visualizzare una immagine
Un ulteriore modo alternativo per visualizzare una immagine in scala di grigi o a
colori contenuta in una matrice A (quindi trattata come un’immagine), è quello di
utilizzare il comando
>>
>>
>>
>>
imagesc ( A ) ;
imagesc (x ,y , A ) ;
imagesc (... , clims ) ;
handle = imagesc (...) ;
E’ equivalente all’utilizzo di image, tranne il fatto che l’immagine ottenuta è
visualizzata utilizzando tutta la mappa di colore. Questo comando visualizza il
contenuto della matrice A come un’immagine. Posso anche specificare in due
vettori x e y gli intervalli degli assi da visualizzare, ma l’immagine è la stessa della
chiamata precedente. Se serve la funzione image restituisce l’handle della figura.
Posso utilizzare anche una parte della mappa di colore compresa nell’intervallo
clims = [low high]: i pixel con valore minore di low vengono visualizzati con il
primo elemento della mappa di colore, quelli con valore maggiore di high con
l’ultimo elemento della mappa di colore.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
20 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: visualizzare una immagine
Ad esempio, carico da file una matrice X che contiene una fotografia a colori di un
clown e la visualizzo:
>>
>>
>>
>>
>>
>>
M. Scarpiniti
load clown
clims = [10 60];
subplot (1 ,2 ,1) ; imagesc ( X ) ;
colormap ( gray ) ;
subplot (1 ,2 ,2) ; imagesc (X , clims ) ;
colormap ( gray ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
21 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: la mappa di colore
Una mappa di colore è una matrice di dimensione M × 3 di valori compresi nell’intervallo [0 1], che specifica i valori RGB degli M colori predefiniti. In particolare, la riga k-esima della mappa di colore è la terna
[r (k) g (k) b(k)] del k-esimo colore. Matlab mette a disposizione 17 mappe
di colore predefinite, che possono essere utilizzate con i comandi seguenti:
>> colormap ( map ) ;
>> colormap ( ’ default ’) ;
>> cmap = colormap ;
Il primo comando consente di utilizzare la mappa di colore specificata da
map, il secondo comando consente di utilizzare la mappa corrente come
default, mentre il terzo restituisce la mappa di colore nella matrice cmap.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
22 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: la mappa di colore
Le 17 mappe di colore disponibili in Matlab sono elencate qui sotto ed
illustrate a fianco:
autumn;
bone;
colorcube;
cool;
copper;
flag;
gray;
hot;
hsv;
jet;
lines;
pink;
prism;
spring;
summer;
white;
winter.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
23 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: la mappa di colore
Riportiamo qualche esempio:
>>
>>
>>
>>
>>
M. Scarpiniti
load flujet
image ( X ) , colormap ( jet )
image ( X ) , colormap ( summer )
load spine
image ( X ) , colormap ( bone )
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
24 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Matlab: la mappa di colore
Per disegnare una mappa di colore, si utilizza il comando:
>> rgbplot ( cmap ) ;
Ad esempio:
>> subplot (1 ,3 ,1) , rgbplot ( copper ) ;
>> subplot (1 ,3 ,2) , rgbplot ( hot ) ;
>> subplot (1 ,3 ,3) , rgbplot ( spring ) ;
Per editare manualmente una mappa di colore, si può utilizzare
>> col ormapedi tor
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
25 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Migliorare la Qualità di un’Immagine
Molte volte l’immagine che abbiamo a disposizione non è di buona qualità.
Ad esempio l’immagine può essere troppo scura o troppo chiara, oppure
avere un contrasto molto limitato.
Matlab mette a disposizione varie funzioni che consentono di modificare in
modo elementare gli attributi più semplici di un’immagine, come la
luminosità e/o il contrasto.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
26 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Modificare la luminosità
La luminosità di una immagine può essere modificata tramite il comando:
>>
>>
>>
>>
brighten ( beta ) ;
brighten (h , beta ) ;
newmap = brighten ( beta ) ;
newmap = brighten ( cmap , beta ) ;
Tale funzione modifica la mappa di colore che viene utilizzata. In particolare
la mappa di colore è schiarita se 0 < β < 1 oppure scurita se −1 < β < 0.
La funzione agisce su tutti i grafici, oppure solo su quello di handle h. In
newmap viene restituita la nuova mappa di colore, o la versione modificata
di quella correntemente in uso cmap.
Ogni elemento della mappa di colore map viene elevato ad un esponente γ,
pari a
(
1 − β se β > 0
γ=
1
se β ≤ 0
1+β
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
27 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Modificare la luminosità
Riportiamo un esempio di modifica della luminosità:
>> load clown
>> imshow (X , map ) ;
>> for i =1:10 ,
brighten (0.5) ;
pause ;
end
>> for i =1:10 ,
brighten ( -0.5) ;
pause ;
end
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
28 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Modificare il contrasto
Il contrasto di una immagine può essere modificato tramite il comando:
>> cmap = contrast ( X ) ;
>> cmap = contrast (X , m ) ;
Tale funzione crea una nuova mappa di colore cmap. Tale nuova mappa ha
una distribuzione approssimativamente uniforme: tutti gli elementi in ogni
riga sono identici.
In particolare il primo comando ritorna una mappa di colore in scala di
grigi, mentre la seconda ritorna una mappa di colore di dimensioni m × 3.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
29 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Modificare il contrasto
Riportiamo un esempio di modifica del contrasto:
>>
>>
>>
>>
M. Scarpiniti
load clown ;
cmap = contrast ( X ) ;
imshow (X , gray ) ;
colormap ( cmap ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
30 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Modificare l’intensità
E’ possibile modificare l’intensità di una immagine in scala di grigi o a colori, utilizzando
i comandi
>>
>>
>>
>>
J = imadjust ( I ) ;
J = imadjust (I ,[ low_in ; high_in ] ,[ low_out ; high_out ]) ;
J = imadjust (I ,[ low_in ; high_in ] ,[ low_out ; high_out ] , gamma ) ;
newmap = imadjust ( map ,[ low_in ; high_in ] ,[ low_out ; high_out ] ,
gamma ) ;
Il comando imadjust crea una nuova immagine J tale che l’1% dei dati è saturato alle
basse ed alte intensità: il risultato è un aumento del contrasto dell’immagine. E’ anche
possibile specificare che un intervallo di valori dell’immagine di partenza [lowin highin ]
venga mappato in un nuovo intervallo dell’immagine J [lowout highout ]. Per le immagini
a colori, lowin e highin sono vettori di tre elementi. Il parametro gamma descrive la curva
di saturazione: se 0 < γ < 1 la saturazione è spinta verso valori più elevati (risultato più
luminoso), altrimenti, se γ > 1, la saturazione è spinta verso valori più bassi (risultato
più scuro). Di default è γ = 1. Se alla funzione passo una mappa di colore, essa mi
restituisce la nuova mappa di colore, dopo l’enhancement.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
31 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Modificare l’intensità
Riportiamo un esempio.
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ pout . tif ’) ;
J = imadjust ( I ) ;
subplot (1 ,2 ,1) , imshow ( I ) ;
subplot (1 ,2 ,2) , imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
32 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Modificare l’intensità
Riportiamo un secondo esempio.
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ football . jpg ’) ;
J = imadjust (I ,[0.2 0.3 0; 0.6 0.7 1] ,[]) ;
subplot (1 ,2 ,1) , imshow ( I ) ;
subplot (1 ,2 ,2) , imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
33 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Convertire un’immagine in binario
E’ possibile trasformare una immagine in scala di grigi o a colori in una
immagine binaria, cioè in una immagine i cui pixels hanno solo due valori:
1 (bianco) e 0 (nero). Il comando che è messo a disposizione da Matlab è
il seguente:
>> BW = im2bw (I , level ) ;
>> BW = im2bw (X , map , level ) ;
Tutti i pixel con intensità superiori a level vengono posti a 1, quelli più
piccoli a 0. Se ho a disposizione la mappa di colore si utilizza la seconda
linea.
Il livello ottimale level può essere ottenuto con il comando
>> level = graytresh ( I ) ;
>> [ level , EM ] = graytresh ( I ) ;
La variabile EM rappresenta il valore di efficacia (compreso tra 0 e 1):
misura cioè il grado di efficacia della soglia calcolata.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
34 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Convertire un’immagine in binario
Riportiamo un esempio.
>>
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ coins . png ’) ;
level = graythresh ( I ) ;
BW = im2bw (I , level ) ;
subplot (1 ,2 ,1) , imshow ( I ) ;
subplot (1 ,2 ,2) , imshow ( BW ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
35 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Convertire un’immagine in binario
Un metodo alternativo, è utilizzare la funzione
>> BW = dither ( I ) ;
>> X = dither ( RGB , map ) ;
Il secondo comando converte un’immagine a colori in un’altra con una risoluzione
di colori aumentata grazie all’utilizzo del dither. Ad esempio:
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ cameraman . tif ’) ;
BW = dither ( I ) ;
subplot (1 ,2 ,1) , imshow ( I ) ;
subplot (1 ,2 ,2) , imshow ( BW ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
36 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Convertire un’immagine in scala di grigio
E’ possibile trasformare una immagine indicizzata in scala di grigi attraverso il
seguente comando:
>> J = ind2gray (I , map ) ;
Il comando ind2gray rimuove le informazioni di tonalità e saturazione, lasciando
inalterata l’informazione sulla luminosità. Riportiamo un esempio:
>>
>>
>>
>>
M. Scarpiniti
load trees
J = ind2gray (X , map ) ;
subplot (1 ,2 ,1) , imshow (X , map ) ;
subplot (1 ,2 ,2) , imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
37 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Operazioni matematiche con due immagini
Due immagini possono essere sommate, sottratte (in modulo), moltiplicate,
divise o combinate linearmente tra di loro, tramite i comandi
>>
>>
>>
>>
>>
>>
>>
K
K
K
K
K
K
K
=
=
=
=
=
=
=
imadd (I , J ) ;
imsubtract (I , J ) ;
imabsdiff (I , J ) ;
immultiply (I , J ) ;
imdivide (I , J ) ;
imlinconb ( c1 , I1 , c2 , I2 ,... , cn , In ) ;
imcomplement ( I ) ;
L’ultima riga calcola il complemento, cioè il valore massimo meno il valore
del pixel. La variabile J può essere una immagine oppure un valore
numerico: in questo caso vario il contrasto dell’immagine I.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
38 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Operazioni matematiche con due immagini
Riportiamo un esempio con imadd e imcomplement:
>>
>>
>>
>>
I = imread ( ’ rice . png ’) ;
J = imread ( ’ cameraman . tif ’) ;
K = imadd (I ,J , ’ uint16 ’) ;
imshow (K ,[]) ;
>>
>>
>>
>>
bw = imread ( ’ text . png ’) ;
bw2 = imcomplement ( bw ) ;
subplot (1 ,2 ,1) , imshow ( bw )
subplot (1 ,2 ,2) , imshow ( bw2 )
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
39 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Elaborare un’immagine: imtool
Matlab mette a disposizione un’interfaccia grafica per poter effettuare la visualizzazione e/o modifica semplice di un’immagine. Tale interfaccia può essere richiamata
con il comando
>> imtool
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
40 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Visualizzare una sequenza di immagini e video
E’ possibile visualizzare un insieme di immagini come una sequenza, con il
comando
>> implay ( sequenza ) ;
dove sequenza contiene tutte le immagini da visualizzare, cioè è un insieme di
matrici (ovvero un tensore). Viene aperto un’interfaccia grafica che consente
anche di vedere filmati in formato *.avi. Posso creare un video con le
immagini, attraverso il comando
>> mov = immovie ( sequenza ) ;
e quindi visualizzarlo con implay.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
41 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Visualizzare una sequenza di immagini e video
Un esempio in tal senso è il seguente:
>> mri = uint8 ( zeros (128 ,128 ,1 ,27) ) ;
>> for frame =1:27
[ mri (: ,: ,: , frame ) , map ] = imread ( ’ mri . tif ’ , frame ) ;
end
>> mov = immovie ( mri , map ) ;
>> implay ( mov ) ;
Viene creato un video a partire da un’immagine letta a blocchi.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
42 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Ridimensionare un’immagine
E’ possibile ridimensionare un’immagine attraverso i comandi:
>>
>>
>>
>>
B = imresize (A , scale ) ;
B = imresize (A ,[ mrows ncols ]) ;
[ Y newmap ] = imresize (X , map , scale ) ;
[...] = imresize (... , method ) ;
La prima riga restituisce un’immagine B che è scale volte l’immagine A, mentre la seconda
riga restituisce l’immagine A rapportata a mrows righe e ncols colonne. La terza riga viene
utilizzata se utilizzo immagini indicizzate (mappe di colore). L’iterpolazione utilizzata nel
ridimensionamento, può essere effettuata con diversi metodi, specificata dal parametro
’method’:
’nearest’;
’bilinear’;
’bicubic’;
’box’;
’triangle’;
’cubic’;
’lanczos2’;
’lanczos3’.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
43 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Ruotare un’immagine
E’ possibile ruotare un’immagine attraverso i comandi:
>> B = imrotate (A , angle ) ;
>> B = imrotate (A , angle , method ) ;
>> B = imrotate (A , angle , method , bbox ) ;
L’immagine A viene ruotata di un angolo pari ad angle in senso orario. Anche qui
l’interpolazione utilizzata nella rotazione, può essere effettuata con diversi metodi, specificata dal parametro ’method’:
’nearest’;
’bilinear’;
’bicubic’.
Il parametro ’bbox’ specifica la dimensione dell’immagine restituita B e può assumere i
due valori:
1
’crop’: B ha la stessa dimensione di A;
2
’loose’: rende l’immagine B grande quanto basta a contenere tutta l’immagine
ruotate (di solito di dimensioni maggiori rispetto ad A). E’ l’opzione di default.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
44 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Ruotare un’immagine
Riportiamo un esempio, ruotando di 35◦ un’immagine:
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ rice . png ’) ;
J = imrotate (I ,35) ;
subplot (1 ,2 ,1) , imshow ( I ) ;
subplot (1 ,2 ,2) , imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
45 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Estrarre una porzione di un’immagine
E’ possibile estrarre una porzione da una immagine utilizzando i comandi:
>>
>>
>>
>>
>>
>>
I = imcrop ;
I2 = imcrop ( I ) ;
X2 = imcrop (X , map ) ;
I = imcrop ( h )
I2 = imcrop (I , rect ) ;
X2 = imcrop (X , map , rect ) ;
Basta selezionare con il mouse la porzione da estrarre dalla figura attiva, o
specificata dall’handle h oppure dove è stata disegnata l’immagine I .
E’ comunque possibile indicare quale porzione estrarre con la variabile
rect, che è il vettore di 4 elementi: [xmin ymin width height].
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
46 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
I Comandi di Base
Migliorare la Qualità di un’Immagine
Estrarre una porzione di un’immagine
Riportiamo un esempio:
>> I = imread ( ’ circuit . tif ’) ;
>> I2 = imcrop (I ,[75 68 130 112]) ;
>> imshow ( I ) , figure , imshow ( I2 ) ;
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
47 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Elementi di Elaborazione delle Immagini
Elementi di Elaborazione delle Immagini
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
48 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’istogramma di un’immagine
L’istogramma di un’immagine può essere ottenuto in Matlab con il comando
>>
>>
>>
>>
imhist ( I ) ;
imhist (I , n ) ;
imhist (X , map ) ;
[ counts , x ] = imhist (...) ;
Senza argomenti di uscita, viene restituita la figura dell’istogramma (su n punti se
specificato) con la scala di colore a cui si riferisce.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
49 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’istogramma e il contrasto
Il contrasto di un’immagine può essere migliorato equalizzando il suo istogramma in modo tale da renderlo simile ad un istogramma di riferimento.
Se tale riferimento non è specificato, viene preso di default un istogramma
piatto. In Matlab si utilizza il comando:
>>
>>
>>
>>
J = histeq (I , hgram ) ;
J = histeq (I , n ) ;
newmap = histeq (X , map , hgram ) ;
newmap = histeq (X , map ) ;
I è l’immagine in esame, hgram è l’istogramma di riferimento, n indica il
numero di livelli di colore utilizzato (di default pari a 64).
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
50 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’istogramma e il contrasto
Riportiamo un esempio:
>> I = imread ( ’ tire . tif ’) ;
>> J = histeq ( I ) ;
>> subplot (1 ,2 ,1) , imshow ( I ) ;
>> subplot (1 ,2 ,2) , imshow ( J ) ;
figure ;
>> subplot (1 ,2 ,1) , imhist (I ,64) ;
>> subplot (1 ,2 ,2) , imhist (J ,64) ;
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
51 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
I contorni di un’immagine binaria, possono essere trovati attraverso la funzione
>>
>>
>>
>>
B = bwboundaries ( BW ) ;
B = bwboundaries ( BW , conn ) ;
B = bwboundaries ( BW , conn , options ) ;
[B , L ] = bwboundaries (...) ;
in cui BW è l’immagine binaria, conn specifica il grado di connettività tra
gli oggetti trovati (e vale 4 oppure 8, che è il valore di default), mentre
’option’ può assumere solo due valori:
1
’holes’: ricerca i “buchi” (cioè contorni dentro i contorni) negli
oggetti;
2
’noholes’: non ricerca i “buchi”.
B è un array di celle, in cui ogni cella contiene una matrice di dimensione
Q × 2, ovvero le Q coppie di punti che formano il contorno dell’oggetto,
mentre L contiene le label degli oggetti.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
52 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Riportiamo un esempio:
>>
>>
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ coins . png ’) ;
BW = im2bw (I , graythresh ( I ) ) ;
[B , L ] = bwboundaries ( BW , ’ noholes ’) ;
imshow ( I )
hold on
for k = 1: length ( B )
boundary = B { k };
plot ( boundary (: ,2) , boundary (: ,1) , ’g ’ , ’ LineWidth ’ ,2) ;
end
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
53 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Un funzione alternativa per l’estrazione dei contorni è la seguente:
>>
>>
>>
>>
J = edge ( I ) ;
J = edge (I , ’ method ’) ;
J = edge (I , ’ method ’ , tresh ) ;
[J , tresh ] = edge (I , ’ method ’) ;
dove I è un’immagine in scala di grigi o binaria. Vengono ignorati i contorni che non superano la soglia tresh. La detection può essere effettuata
attraverso diversi metodi, specificati dal parametro ’method’:
metodo di Sobel (è quello di default);
metodo di Prewitt;
metodo di Roberts;
metodo Laplaciano Gaussiano;
metodo del Zero-Cross;
metodo di Canny.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
54 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Riportiamo un esempio:
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ coins . png ’) ;
J = edge ( I ) ;
subplot (1 ,2 ,1) , imshow ( I ) ;
subplot (1 ,2 ,2) , imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
55 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Manualmente il contorno può essere estratto analizzando il valore della derivata numerica, per righe o per colonne, di un’immagine. Infatti un contorno
è caratterizzato da pixel adiacenti di valore sensibilmente diverso: la derivata
quindi evidenzia queste discontinuità.
Se dunque, il valore della derivata è superiore ad una certa soglia per
un determinato pixel, allora molto probabilmente quel pixel appartiene al
contorno di un oggetto dell’immagine.
In Matlab la derivata numerica di ordine N, lungo la direzione dim è effettuata con il comando:
>> Y = diff (X ,N , dim ) ;
Se non specificato, viene assunto N = 1 e dim = 1.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
56 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Un esempio di codice può essere:
>>
>>
>>
>>
>>
>>
I = imread ( ’ coins . png ’) ;
imshow ( I ) ;
Id = diff ( I ) ;
Ic = zeros ( size ( Id ) ) ;
[n , m ] = size ( Id ) ;
for i =1: n ,
for j =1: m ,
if Id (i , j ) < tresh
Ic (i , j ) = 255;
else
Ic (i , j ) = 0;
end
end
end
>> figure ;
>> imshow ( Ic ) ;
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
57 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Inoltre è anche possibile disegnare il profilo di intensità (valore del pixel)
lungo un segmento, attraverso il comando
>>
>>
>>
>>
c
c
c
c
=
=
=
=
improfile ;
improfile ( n ) ;
improfile (I , xi , yi ) ;
improfile (I , xi , yi , n ) ;
Cliccando con il mouse su due punti dell’immagine viene valutato in c il profilo su n punti. E’ anche possibile specificare il segmento dando le coordinate
nei due vettori xi e yi .
Osservando questo profilo è possibile osservare se è presente un contorno
all’interno del segmento scelto.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
58 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Riportiamo un esempio:
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ coins . png ’) ;
imshow ( I ) ;
c = improfile ;
plot ( c ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
59 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’estrazione dei contorni
Il valore in formato RGB di un pixel, può essere ottenuto attraverso l’uso
del comando
>> P = impixel ( I ) ;
>> P = impixel (X , map ) ;
Basta cliccare con il mouse su un punto di interesse dell’immagine corrente
I (o X se indicizzata) e in P viene restituito il valore RGB del pixel.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
60 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Segmantare un’immagine
La segmentazione di un’immagine è il processo di partizione di un’immagine
in regioni significative. La segmentazione è di solito utilizzata per localizzare
oggetti e bordi. Più precisamente, la segmentazione è il processo con il
quale si classificano i pixel dell’immagine che hanno caratteristiche comuni,
pertanto ciascun pixel in una regione è simile agli altri della stessa regione per
una qualche proprietà o caratteristica (colore, intensità o texture). Regioni
adiacenti sono significativamente differenti rispetto ad almeno una di queste
caratteristiche. Esistono diverse tecniche per effettuare la segmentazione di
un’immagine; le principali sono
1 Algoritmi di crescita: si parte dai singoli pixel fino a formare i
segmenti per fusione;
2 Algoritmi di divisione: si parte dall’intera immagine fino a
suddividerla di segmenti;
3 Algoritmi di clustering: si suddivide l’immagine in segmenti
agglomerando le parti simili.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
61 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’algoritmo K-means
Esistono molteplici algoritmi per effettuare il clustering. Uno dei più semplici
e utile è l’algoritmo k-means: lo scopo è quello di partizionare N osservazioni
in K clusters, in cui ogni osservazione deriva dal cluster più vicino.
Dato un insieme di osservazioni (x1 , x2 , . . . , xN ), dove ogni osservazione è
un vettore d-dimensionale, l’algoritmo k-means partiziona le N osservazioni
negli K insiemi (K < N) S = {S1 , S2 , . . . , SK } tali da minimizzare la
funzione obiettivo:
K X
X
arg min
kxj − mi k2
S
i=1 xj ∈Si
dove mi è il valor medio di Si , detto centroide.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
62 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’algoritmo K-means
L’algoritmo K-means utilizza una tecnica iterativa.
(1)
(1)
Dato un insieme iniziale di K valor medi m1 , . . . , mk chiamati centroidi e che
sono i rappresentanti dei clusters, che possono essere scelti random, l’algoritmo si
applica eseguendo due passi consecutivi:
1
Assegnamento: ogni
n
(t)
Si = xj :
osservazione è assegnata al cluster i-esimo se
o
(t) (t) xj − mi ≤ xj − mi ∗ ∀i ∗ = 1, . . . , K
2
Aggiornamento: calcolo i nuovi valori medi che saranno i nuovi centroidi
dei clusters:
X
1
(t+1)
mi
= xj
(t) Si xj ∈S (t)
i
L’algoritmo converge quando non ho più variazioni dei centroidi.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
63 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’algoritmo K-means: un esempio
1) K “medie” iniziali (in questo caso K =
3) sono selezionate a caso dai dati (cerchi
colorati).
2) Vengono creati K clusters associando
ogni osservazione al cluster con centroide 3) Il cen
viene agg
più vicino.
4) Si ripetono i passi 2 e 3 fino a
convergenza.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
64 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’algoritmo K-means
Dato che l’algoritmo è basato su un’euristica e i centroidi sono inizializzati a
caso, la convergenza dell’algoritmo non è garantita. Inoltre il risultato finale
dipende dalle condizioni iniziali. Poiché comunque è un algoritmo molto
veloce ed efficiente è possibile eseguirlo più volte con condizioni iniziali
diverse.
I due principali aspetti negativi dell’algoritmo K-means sono:
1
Il numero di clusters K deve essere noto a priori: una scelta
inappropriata di K può causare dei risultati scadenti;
2
L’algoritmo utilizza una distanza Euclidea che può non essere una
misura adeguata della distanza.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
65 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’algoritmo K-means: Matlab
Matlab mette a disposizione una funzione per effettuare l’algoritmo Kmeans, e precisamente:
>>
>>
>>
>>
>>
IDX = kmeans (X , k ) ;
[ IDX , C ] = kmeans (X , k ) ;
[ IDX ,C , sumd ] = kmeans (X , k ) ;
[ IDX ,C , sumd , D ] = kmeans (X , k ) ;
[...] = kmeans (... , param1 , val1 , param2 , val2 ,...) ;
La funzione kmeans partizione i dati contenuti in X in k clusters e
restituisce un vettore IDX contenete l’indice del cluster per ogni punto dei
dati. Se interessa restituisce anche la posizione dei centroidi nel vettore
C, il valore del funzionale di errore in sumd, ovvero la distanza dal relativo
centroide in D. Infine è possibile assegnare opportuni valori ad alcuni
parametri.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
66 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
L’algoritmo K-means: Matlab
Alcuni dei parametri gestiti dalla funzione kmeans sono i seguenti:
’distance’: specifica come misurare la distanza dai centroidi:
1
2
3
4
5
’sqEuclidean’: distanza Euclidea (opzione di default);
’cityBlock’: norma L1 ;
’cosine’;
’correlation’;
’Hamming’.
’replicates’: specifica il numero di volte che l’algoritmo verrà
ripetuto con diverse condizioni iniziali;
’start’: metodo utilizzato per selezionare la posizione dei centroidi
iniziali:
1
2
3
M. Scarpiniti
’sample’: seleziona k osservazioni casuali da X (opzione di default);
’uniform’: seleziona k osservazioni uniformemente su X;
’cluster’: esegue l’algoritmo preliminarmente sul 10% dei dati X e
seleziona i centroidi.
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
67 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Il segmentatore
Riportiamo un semplice esempio di segmentatore, utilizzando l’algoritmo K-means. Viene creata
una matrice le cui righe sono le terne: numero di riga, numero di colonna e valore del pixel.
L’algoritmo K-means restituisce un vettore contenete la classificazione dei pixels e successivamente
viene ricostruita la matrice immagine segmentata, contenente solo i valori 0 e 255.
>>
>>
>>
>>
>>
nc = 2;
I = imread ( ’ volto . jpg ’) ; imshow ( I ) ;
J = [];
[n , m ] = size ( I ) ;
for i = 1: n ,
for j = 1: m ,
c = I (i , j ) ;
J = [ J ;i ,j , c ];
end
end
>> J = double ( J ) ;
>> ID = kmeans (J , nc ) ;
>> for k = 1: nc
K = 255 .* ones ( size ( I ) ) ;
temp = find ( ID == k ) ;
for i = 1: length ( temp ) ,
row = floor ( temp ( i ) / m ) + 1;
col = mod ( temp ( i ) ,m ) + 1;
K ( row , col ) = 0;
end
imshow ( K ) ;
end
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
68 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Aggiungere rumore alle immagini
Per aggiungere del rumore alle immagini si utilizza il comando:
>> J = imnoise (I , type ) ;
>> J = imnoise (I , type , parameters ) ;
La funzione imnoise restituisce una versione rumorosa J dell’immagine I
aggiungendovi un rumore ti tipo ’type’ e relativi parametri parameters:
’gaussian’: rumore di tipo gaussiano con media e varianza costanti;
’localvar’: rumore gaussiano a media nulla;
’poisson’: rumore con distribuzione di Poisson;
’salt & pepper’: rumore sale e pepe (accende e spegne alcuni
pixel);
’speckle’: rumore moltiplicativo.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
69 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Aggiungere rumore alle immagini
Riportiamo un esempio di aggiunta di un rumore di tipo “sale e pepe”:
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ coins . png ’) ;
J = imnoise (I , ’ salt & pepper ’ ,0.02) ;
subplot (1 ,2 ,1) , imshow ( I ) ;
subplot (1 ,2 ,2) , imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
70 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Rimozione del rumore
Molto spesso le immagini a disposizione sono corrotte dal rumore: diviene
quindi necessario saper eliminare il rumore dalle immagini. Normalmente
questo problema è risolto tramite un filtraggio lineare dell’immagine con un
filtro (bidimensionale). Molto utile è il filtro mediano.
Il filtraggio lineare bidimensionale è effettuato con le funzioni:
>> Y = filter2 (h , X ) ;
>> Y = conv2 (h , X ) ;
>> Y = imfilter (X , h ) ;
Tali funzioni filtrano la matrice X con la matrice FIR contenuta in h.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
71 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Rimozione del rumore
Molto utili sono alcuni particolari tipi di filtri bidimensionali, che possono
essere ottenuti attraverso il comando:
>> h = fspecial ( type ) ;
>> h = fspecial ( type , parameters ) ;
In cui la variabile ’type’ può assumere le opzioni:
1 ’average’: filtro medio;
2 ’disk’: filtro medio circolare;
3 ’gaussian’: filtro passa-basso gaussiano;
4 ’laplacian’: approssimazione dell’operatore Laplaciano;
5 ’log’: Laplaciano del filtro gaussiano;
6 ’motion’: approssimazione di un movimento della fotocamera;
7 ’prewitt’: filtro di Prewitt;
8 ’sobel’: filtro di Sobel;
9 ’unsharp’: filtro per l’enhancement del contrasto.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
72 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Rimozione del rumore
Riportiamo un esempio di un movimento:
>>
>>
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ peppers . png ’) ;
I = I (60+[1:256] ,222+[1:256] ,:) ;
h = fspecial ( ’ motion ’ ,31 ,11) ;
J = imfilter (I ,h , ’ circular ’ , ’ conv ’) ;
subplot (1 ,2 ,1) ; imshow ( I ) ;
subplot (1 ,2 ,2) ; imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
73 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Rimozione del rumore
Per eliminare efficacemente il rumore di tipo sale e pepe è possibile applicare
un filtro mediano, attraverso il comando
>> B = medfilt2 (A , [ m n ]) ;
>> B = medfilt2 ( A ) ;
>> B = medfilt2 (A , ’ indexed ’ ,...) ;
Vengono modificati i pixel, utilizzando la mediana calcolata in un intorno
m × n del pixel. Per default è m = n = 3.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
74 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Rimozione del rumore
Facciamo un esempio:
>>
>>
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ coins . png ’) ;
J = imnoise (I , ’ salt & pepper ’ ,0.02) ;
K = medfilt2 (J ,[3 3]) ;
subplot (1 ,3 ,1) , imshow ( I ) ;
subplot (1 ,3 ,2) , imshow ( J ) ;
subplot (1 ,3 ,3) , imshow ( K ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
75 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Deblurring di un’immagine
Con il termine deblurring si intende il miglioramento della qualità di un’immagine che risulta mossa. Poiché il blurring è ottenuto con una convoluzione, l’operazione di deblurring è effettuata attraverso una deconvoluzione.
Ovviamente esistono varie tecniche per effettuare questa convoluzione con il
filtro h. Ad esempio con un filtro di Wiener, un filtro regolarizzato, il metodo di Lucy-Richardson, oppure in modo blind. Matlab mette a disposizione
le seguenti funzioni per le deconvoluzioni appena citate:
>>
>>
>>
>>
M. Scarpiniti
J = deconvwnr (I , h ) ;
J = deconvreg (I , h ) ;
J = deconvlucy (I , h ) ;
[J , PSF ] = deconvblind (I , h ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
76 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Deblurring di un’immagine
Riportiamo un esempio:
>>
>>
>>
>>
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ peppers . png ’) ;
I = I (60+[1:256] ,222+[1:256] ,:) ;
h = fspecial ( ’ motion ’ ,31 ,11) ;
J = imfilter (I ,h , ’ circular ’ , ’ conv ’) ;
K = deconvwnr (J , h ) ;
subplot (1 ,3 ,1) ; imshow ( I ) ;
subplot (1 ,3 ,2) ; imshow ( J ) ;
subplot (1 ,3 ,3) ; imshow ( K ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
77 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Eliminare un difetto
Una regione di interesse o ROI è una zona di una immagine in cui vogliamo
effettuare qualche operazione, ad esempio eliminare un difetto. Matlab
mette a disposizione il comando:
>> J = roifill ;
>> J = roifill ( I ) ;
>> J = roifill (I ,c , r ) ;
Tale funzione restituisce un’immagine J che è la stessa di I in cui è stata
eliminata una regione ottenuta costruendo un poligono intorno con
l’utilizzo del mouse e sostituito dal background. E’ anche possibile
specificare il poligono nei vettori c e r.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
78 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Introduzione
La Segmentazione
Eliminare un difetto
Riportiamo un esempio:
>>
>>
>>
>>
M. Scarpiniti
I = imread ( ’ coins . png ’) ;
J = roifill ( I ) ;
subplot (1 ,2 ,1) ; imshow ( I ) ;
subplot (1 ,2 ,2) ; imshow ( J ) ;
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
79 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Funzioni Base
Il Video
Il Video
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
80 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Funzioni Base
Gestire un video
Matlab consente di gestire i file video di tipo *.avi. Per aprire un file avi si
utilizza:
>> mov = aviread ( filename ) ;
>> mov = aviread ( filename , index ) ;
Restituisce il video contenuto in ’filename’ o i frame indicati in index
nella struttura mov . Per scrivere un file *.avi, si utilizza invece
>> movie2avi ( mov , filename ) ;
Le informazioni sul file, invece, possono essere ottenute tramite
>> fileinfo = aviinfo ( filename ) ;
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
81 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Funzioni Base
Gestire un video
Per visualizzare un filmato si utilizza:
>> movie ( M ) ;
>> movie (M , n ) ;
>> movie (M ,n , fps ) ;
Il video contenuto nella struttura M può essere ripetuto n volte, alla
velocità di fps frame per secondo.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
82 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Funzioni Base
Convertire un’immagine in un video
E’ possibile convertire un’immagine in un video, attraverso
>> F = im2frame (X , map ) ;
>> F = im2frame ( X ) ;
Viceversa è possibile convertire un singolo frame di un video in un’immagine
attraverso
>> [X , map ] = frame2im ( F ) ;
Il frame corrente può essere anche ottenuto con la funzione:
>> getframe ;
>> F = getframe ;
>> F = getframe ( h ) ;
che restituisce una struttura con i campi F .cdata (i valori dei pixel con il
modello RGB) e F .colormap (mappa di colore).
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
83 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Funzioni Base
Catturare un video
Costruiamo un video che viene catturato da un plot.
>>
>>
>>
>>
>>
Z = peaks ;
surf ( Z ) ;
axis tight
set ( gca , ’ nextplot ’ , ’ re p la ce ch i ld re n ’) ;
for j = 1:20
surf ( sin (2* pi * j /20) *Z , Z )
F ( j ) = getframe ;
end
>> pause ;
>> movie ( F )
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
84 / 85
Introduzione
Elementi di Elaborazione delle Immagini
Il Video
Funzioni Base
Bibliografia
Matlab
MATLAB: Getting Started Guide.
Available on-line: http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/getstart.pdf
Matlab
Image Processing Toolbox 7: User’s Guide.
Available on-line: http://www.mathworks.it/access/helpdesk/help/pdf_doc/images/images_tb.pdf
A.V. Oppenheim, R.W. Schafer.
Discrete-Time Signal Processing
2-nd Edition, Prentice Hall, 1999.
T.A. Davis.
MATLAB Primer.
8-th Edition, CRC Press, 2010.
D.M. Smith.
Engineering Computation with MATLAB.
2-nd Edition, Addison-Wesley, 2010.
A. Knight.
Basics of MATLAB and Beyond.
CRC Press, 1999.
A.D. Poularikas.
Signals and Systems Primer with MATLAB.
CRC Press, 2006.
M. Scarpiniti
Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
85 / 85