Вы находитесь на странице: 1из 85

Introduzione

Elementi di Elaborazione delle Immagini


Il Video

Laboratorio per lElaborazione


MultiMediale
Lezione 6 Elaborazione delle Immagini
Prof. Michele Scarpiniti
Dipartimento di Ingegneria dellInformazione, Elettronica e Telecomunicazioni
Sapienza Universit`
a di Roma
http://ispac.ing.uniroma1.it/scarpiniti/index.htm
michele.scarpiniti@uniroma1.it

Roma, 29 Aprile 2011

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

1 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Elementi di Elaborazione delle Immagini


Introduzione
La Segmentazione

Il Video
Funzioni Base

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

2 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Introduzione

Introduzione

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

3 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Introduzione

Lobiettivo di questa lezione `e 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 dellImage Toolbox. Una guida di
questo Toolbox pu`o essere reperita al link http://www.mathworks.it/
access/helpdesk/help/pdf_doc/images/images_tb.pdf.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

4 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Tipi di Immagine
Esistono diverse modalit`a per memorizzare un file rappresentante unimmagine.
Le principali sono le seguenti tre:
1 Scala di grigi;
2 Truecolor;
3 Indicizzata.
Nella modalit`a a scala di grigi ogni pixel dellimmagine contiene un livello
di grigio, compreso tra 0 e 1.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

5 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Tipi di Immagine

Nella modalit`a Truecolor ogni pixel


dellimmagine `e un vettore di tre elementi contenenti i livelli di rosso,
verde, blu (RGB), compresi tra 0 e
1.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

6 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Tipi di Immagine
Infine, nella modalit`a indicizzata ogni pixel rappresenta la riga di una mappa
di colore, costituita da tre elementi, cio`e i livelli di rosso, verde, blu (RGB),
compresi tra 0 e 1.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

7 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 unimmagine di formato fmt e di nome (e percorso) specificato da


filename o caricata dal web dallindirizzo 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`e
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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

8 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

9 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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: orig1.jpg
FileModDate: 20-mag-2005 20:57:46
FileSize: 5047
Format: jpg
FormatVersion:
Width: 128
Height: 128
BitDepth: 8
ColorType: grayscale
FormatSignature:
NumberOfSamples: 1
CodingMethod: Huffman
CodingProcess:
Sequential
M. Scarpiniti
Laboratorio per
lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

10 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 `e 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

11 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

12 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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`a 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

13 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 limmagine rappresentata dalla matrice I.
La matrice I pu`o 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

14 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 limmagine `e in scala di grigi, posso visualizzare solo i pixels con valori


allinterno dellintervallo [low high], gli altri valori saranno sostituiti con il
colore nero, se il loro valore `e 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
unimmagine da un file di nome filename. Se serve, la funzione
imshow restituisce lhandle della figura.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

15 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

16 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Matlab: visualizzare una immagine


Riportiamo un secondo esempio, utilizzando una immagine indicizzata:
>> [X,map] = imread(trees.tif);
>> imshow(X,map);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

17 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 unimmagine), `e
quello di utilizzare il comando
>> image(A);
>> image(x,y,A);
>> handle = image(...);
Questo comando visualizza il contenuto della matrice A come
unimmagine. Posso anche specificare in due vettori x e y gli intervalli
degli assi da visualizzare, ma limmagine `e la stessa della chiamata
precedente. Se serve la funzione image restituisce lhandle della figura.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

18 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Matlab: visualizzare una immagine


Ad esempio, carico da file una matrice X che contiene una fotografia a colori di un
primate e la visualizzo:
>>
>>
>>
>>
>>
>>

load mandrill
figure(color,k)
image(X)
colormap(map)
axis off
axis image

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

19 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 unimmagine), `e quello di
utilizzare il comando
>>
>>
>>
>>

imagesc(A);
imagesc(x,y,A);
imagesc(...,clims);
handle = imagesc(...);

E equivalente allutilizzo di image, tranne il fatto che limmagine ottenuta `e


visualizzata utilizzando tutta la mappa di colore. Questo comando visualizza il
contenuto della matrice A come unimmagine. Posso anche specificare in due
vettori x e y gli intervalli degli assi da visualizzare, ma limmagine `e la stessa della
chiamata precedente. Se serve la funzione image restituisce lhandle della figura.
Posso utilizzare anche una parte della mappa di colore compresa nellintervallo
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
lultimo elemento della mappa di colore.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

20 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Matlab: visualizzare una immagine


Ad esempio, carico da file una matrice X che contiene una fotografia a colori di un
clown e la visualizzo:
>>
>>
>>
>>
>>
>>

load clown
clims = [10 60];
subplot(1,2,1); imagesc(X);
colormap(gray);
subplot(1,2,2); imagesc(X,clims);
colormap(gray);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

21 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Matlab: la mappa di colore


Una mappa di colore `e una matrice di dimensione M 3 di valori compresi nellintervallo [0 1], che specifica i valori RGB degli M colori predefiniti. In particolare, la riga k-esima della mappa di colore `e 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 utilizzara la mappa corrente come
default, mentre il terzo restituisce la mappa di colore nella matrice cmap.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

22 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

23 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Matlab: la mappa di colore


Riportiamo qualche esempio:
>>
>>
>>
>>
>>

load flujet
image(X), colormap(jet)
image(X), colormap(summer)
load spine
image(X), colormap(bone)

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

24 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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`


o utilizzare
>> colormapeditor
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

25 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Migliorare la Qualit`a di unImmagine

Molte volte limmagine che abbiamo a disposizione non `e di buona qualit`a.


Ad esempio limmagine pu`
o 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`
u semplici di unimmagine, come la
luminosit`a e/o il contrasto.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

26 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Modificare la luminosit`a
La luminosit`a di una immagine pu`
o 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 `e 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

27 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Modificare la luminosit`a
Riportiamo un esempio di modifica della luminosit`a:
>> 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

28 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Modificare il contrasto

Il contrasto di una immagine pu`


o 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

29 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Modificare il contrasto
Riportiamo un esempio di modifica del contrasto:
>>
>>
>>
>>

load clown;
cmap = contrast(X);
imshow(X,gray);
colormap(cmap);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

30 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Modificare lintensit`a
E possibile modificare lintensit`
a 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 l1% dei dati `e saturato alle
basse ed alte intensit`
a: il risultato `e un aumento del contrasto dellimmagine. E anche
possibile specificare che un intervallo di valori dellimmagine di partenza [lowin highin ]
venga mappato in un nuovo intervallo dellimmagine 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 `e spinta verso valori pi`
u elevati (risultato pi`
u
luminoso), altrimenti, se > 1, la saturazione `e spinta verso valori pi`
u bassi (risultato
pi`
u scuro). Di default `e = 1. Se alla funzione passo una mappa di colore, essa mi
restituisce la nuova mappa di colore, dopo lenhancement.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

31 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Modificare lintensit`a
Riportiamo un esempio.
>>
>>
>>
>>

I = imread(pout.tif);
J = imadjust(I);
subplot(1,2,1), imshow(I);
subplot(1,2,2), imshow(J);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

32 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Modificare lintensit`a
Riportiamo un secondo esempio.
>>
>>
>>
>>

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);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

33 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Convertire unimmagine in binario


E possibile trasformare una immagine in scala di grigi o a colori in una
immagine binaria, cio`e in una immagine i cui pixels hanno solo due valori:
1 (bianco) e 0 (nero). Il comando che `e messo a disposizione da Matlab `e
il seguente:
>> BW = im2bw(I, level);
>> BW = im2bw(X, map, level);
Tutti i pixel con intensit`a superiori a level vengono posti a 1, quelli pi`
u
piccoli a 0. Se ho a disposizione la mappa di colore si utilizza la seconda
linea.
Il livello ottimale level pu`o 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`e il grado di efficacia della soglia calcolata.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

34 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Convertire unimmagine in binario


Riportiamo un esempio.
>>
>>
>>
>>
>>

I = imread(coins.png);
level = graythresh(I);
BW = im2bw(I,level);
subplot(1,2,1), imshow(I);
subplot(1,2,2), imshow(BW);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

35 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Convertire unimmagine in binario


Un metodo alternativo, `e utilizzare la funzione
>> BW = dither(I);
>> X = dither(RGB,map);
Il secondo comando converte unimmagine a colori in unaltra con una risoluzione
di colori aumentata grazie allutilizzo del dither. Ad esempio:
>>
>>
>>
>>

I = imread(cameraman.tif);
BW = dither(I);
subplot(1,2,1), imshow(I);
subplot(1,2,2), imshow(BW);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

36 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Convertire unimmagine 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`a e saturazione, lasciando
inalterata linformazione sulla luminosit`a. Riportiamo un esempio:
>>
>>
>>
>>

load trees
J = ind2gray(X,map);
subplot(1,2,1), imshow(X,map);
subplot(1,2,2), imshow(J);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

37 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Operazioni matematiche con due immagini


Due immagini possono essere sommate, sottrate (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);

Lultima riga calcola il complemento, cio`e il valore massimo meno il valore


del pixel. La variabile J pu`
o essere una immagine oppure un valore
numerico: in questo caso vario il contrasto dellimmagine I.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

38 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Operazioni matematiche con due immagini


Ridportiamo 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

39 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Elaborare unimmagine: imtool


Matlab mette a disposizione uninterfaccia grafica per poter effettuare la visualizzazione e/o modifica semplice di unimmagine. Tale interfaccia pu`o essere richiamata
con il comando
>> imtool

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

40 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

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`e `e un insieme di
matrici (ovvero un tensore). Viene aperto uninterfaccia 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

41 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Visualizzare una sequenza di immagini e video

Un esempio in tal senso `e 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 unimmagine letta a blocchi.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

42 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Ridimensionare unimmagine
E possibile ridimensionare unimmagine attraverso i comandi:
>>
>>
>>
>>

B = imresize(A,scale);
B = imresize(A,[mrows ncols]);
[Y newmap] = imresize(X,map,scale);
[...] = imresize(..., method);

La prima riga restituisce unimmagine B che `e scale volte limmagine A, mentre la seconda
riga restituisce limmagine A rapportata a mrows righe e ncols colonne. La terza riga viene
utilizzata se utilizzo immagini indicizzate (mappe di colore). Literpolazione utilizzata nel
ridimensionamento, pu`
o essere effettuata con diversi metodi, specificata dal parametro
method:
nearest;
bilinear;
bicubic;
box;
triangle;
cubic;
lanczos2;
lanczos3.
M. Scarpiniti
Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini
43 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Ruotare unimmagine
E possibile ruotare unimmagine attraverso i comandi:
>> B = imrotate(A,angle);
>> B = imrotate(A,angle,method);
>> B = imrotate(A,angle,method,bbox);
Limmagine A viene ruotata di un angolo pari ad angle in senso orario. Anche qui
literpolazione utilizzata nella rotazione, pu`
o essere effettuata con diversi metodi, specificata dal parametro method:
nearest;
bilinear;
bicubic.
Il parametro bbox specifica la dimensione dellimagine restituita B e pu`
o assumere i
due valori:
1

crop: B ha la stessa dimensione di A;

loose: rende limmagine B grande quanto basta a contenere tutta limmagine


ruotate (di solito di dimensioni maggiori rispettto ad A). E lopzione di default.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

44 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Ruotare unimmagine
Riportiamo un esempio, ruotando di 35 unimmagine:
>>
>>
>>
>>

I = imread(rice.png);
J = imrotate(I,35);
subplot(1,2,1), imshow(I);
subplot(1,2,2), imshow(J);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

45 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Estrarre una porzione di unimmagine


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 dallhandle h oppure dove `e stata disegnata limmagine I .
E comunque possibile indicare quale porzione estrarre con la variabile
rect, che `e il vettore di 4 elementi: [xmin ymin width height].

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

46 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
I Comandi di Base
Migliorare la Qualit`
a di unImmagine

Estrarre una porzione di unimmagine


Riportiamo un esempio:
>> I = imread(circuit.tif);
>> I2 = imcrop(I,[75 68 130 112]);
>> imshow(I), figure, imshow(I2);

M. Scarpiniti

Laboratorio per lElaborazione 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

48 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Listogramma di unimmagine
Listogramma di unimmagine pu`
o 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 dellistogramma (su n punti se


specificato) con la scala di colore a cui si riferisce.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

49 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Listogramma e il contrasto
Il contrasto di unimmagine pu`
o essere migliorato equalizzando il suo istogramma in modo tale da renderlo simile ad un istogramma di riferimento.
Se tale riferimento non `e 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 `e limmagine in esame, hgram `e listogramma di riferimento, n indica il


numero di livelli di colore utilizzato (di default pari a 64).

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

50 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Listogramma 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

51 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


I contorni di unimmagine 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 `e limmagine binaria, conn specifica il grado di connettivit`a tra


gli oggetti trovati (e vale 4 oppure 8, che `e il valore di default), mentre
option pu`o assumere solo due valori:
1 holes: ricerca i buchi (cio`
e contorni dentro i contorni) negli
oggetti;
2 noholes: non ricerca i buchi.
B `e 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 delloggetto,
mentre L contiene le label degli oggetti.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

52 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


Riportiamo un esempio:
>>
>>
>>
>>
>>
>>

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

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

53 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


Un funzione alternativa per lestrazione dei contorni `e la seguente:
>>
>>
>>
>>

J = edge(I);
J = edge(I,method);
J = edge(I,method,tresh);
[J,tresh] = edge(I,method);

dove I `e unimmagine in scala di grigi o binaria. Vengono ignorati i contorni che non superano la soglia tresh. La detection pu`o essere effettuata
attraverso diversi metodi, specificati dal parametro method:
metodo di Sobel (`e quello di default);
metodo di Prewitt;
metodo di Roberts;
metodo Laplaciano Gaussiano;
metodo del Zero-Cross;
metodo di Canny.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

54 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


Riportiamo un esempio:
>>
>>
>>
>>

I = imread(coins.png);
J = edge(I);
subplot(1,2,1), imshow(I);
subplot(1,2,2), imshow(J);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

55 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


Manualmente il contorno pu`
o essere estratto analizzando il valore della derivata numerica, per righe o per colonne, di unimmagine. Infatti un contorno
`e caratterizzato da pixel adiacenti di valore sensibilmente diverso: la derivata
quindi evidenzia queste discontinuit`a.
Se dunque, il valore della derivata `e superiore ad una certa soglia per
un determinato pixel, allora molto probabilmente quel pixel appartiene al
contorno di un oggetto dellimmagine.
In Matlab la derivata numerica di ordine N, lungo la direrione dim `e effettuata con il comando:
>> Y = diff(X,N,dim);
Se non specificato, viene assunto N = 1 e dim = 1.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

56 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


Un esempio di codice pu`
o 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

57 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


Inoltre `e anche possibile plottare il profilo di intensit`a (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 dellimmagine 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 `e possibile osservare se `e presente un contorno
allinterno del segmento scelto.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

58 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni


Riportiamo un esempio:
>>
>>
>>
>>

I = imread(coins.png);
imshow(I);
c = improfile;
plot(c);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

59 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lestrazione dei contorni

Il valore in formato RGB di un pixel, pu`


o essere ottenuto attraverso luso
del comando
>> P = impixel(I);
>> P = impixel(X,map);
Basta cliccare con il mouse su un punto di interesse dellimmagine corrente
I (o X se indicizzata) e in P viene restituito il valore RGB del pixel.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

60 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Segmantare unimmagine
La segmentazione di unimmagine `e il processo di partizione di unimmagine
in regioni significative. La segmentazione `e di solito utilizzata per localizzare
oggetti e bordi. Pi`
u precisamente, la segmentazione `e il processo con il
quale si classificano i pixel dellimmagine che hanno caratteristiche comuni,
pertanto ciascun pixel in una regione `e simile agli altri della stessa regione per
una qualche propriet`a o caratteristica (colore, intensit`a o texture). Regioni
adiacenti sono significativamente differenti rispetto ad almeno una di queste
caratteristiche. Esistono diverse tecniche per effettuare la segmentazione di
unimmagine; 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 dallintera immagine fino a
suddividerla di segmenti;
3 Algoritmi di clustering: si suddivide limmagine in segmenti
agglomerando le parti simili.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

61 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lalgoritmo K-means

Esistono molteplici algoritmi per effettuare il clustering. Uno dei pi`


u semplici
e utile `e lalgortimo k-means: lo scopo `e quello di partizionare N osservazioni
in K clusters, in cui ogni osservazione deriva dal cluster pi`
u vicino.
Dato un insieme di osservazioni (x1 , x2 , . . . , xN ), dove ogni osservazione `e
un vettore d-dimensionale, lalgoritmo 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 `e il valor medio di Si , detto centroide.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

62 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lalgoritmo K-means
Lalgoritmo 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, lalgoritmo si
applica eseguendo due passi consecutivi:
1

Assegnamento: ogni
n
(t)
Si = xj :

osservazione `e assegnata al cluster i-esimo se





o


(t)
(t)
xj mi xj mi i = 1, . . . , K

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

Lalgoritmo converge quando non ho pi`


u variazioni dei centroidi.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

63 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lalgoritmo 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
pi`
u vicino.

3) Il centroide di ognuno dei K clusters


viene aggiornato con il nuovo valor medio.

4) Si ripetono i passi 2 e 3 fino a


convergenza.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

64 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lalgoritmo K-means

Dato che lalgoritmo `e basato su uneuristica e i centroidi sono inizializzati a


caso, la convergenza dellalgoritmo non `e garantita. Inoltre il risultato finale
dipende dalle condizioni iniziali. Poich`e comunque `e un algoritmo molto
veloce ed efficiente `e possibile eseguirlo pi`
u volte con condizioni iniziali
diverse.
I due principali aspetti negativi dellalgoritmo K-means sono:
1

Il numero di clusters K deve essere noto a priori: una scelta


inappropriata di K pu`
o causare dei risultati scadenti;

Lalgoritmo utilizza una distanza Euclidea che pu`o non essere una
misura adequata della distanza.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

65 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lalgoritmo K-means: Matlab


Matlab mette a disposizione una funzione per effettuare lalgoritmo 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 lindice 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 `e possibile assegnare opportuni valori ad alcuni
parametri.
M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

66 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Lalgoritmo 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 lalgoritmo verr`a


ripetuto con diverse condizioni iniziali;
start: metodo utilizzato per selezionare la posizione dei centroidi
iniziali:
1
2
3

M. Scarpiniti

sample: selezione k osservazioni casuali da X (opzione di default);


uniform: selezion k osservazioni uniformemente su X;
cluster: esegue lalgoritmo preliminarmente sul 10% dei dati X e
seleziona i centroidi.
Laboratorio per lElaborazione 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 lalgoritmo K-means. Viene creata
una matrice le cui righe sono le terne: numero di riga, numero di colonna e valore del pixel.
Lalgoritmo 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 lElaborazione 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 dellimmagine 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 lElaborazione 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:
>>
>>
>>
>>

I = imread(coins.png);
J = imnoise(I,salt & pepper,0.02);
subplot(1,2,1), imshow(I);
subplot(1,2,2), imshow(J);

M. Scarpiniti

Laboratorio per lElaborazione 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 `e risolto tramite un filtraggio lineare dellimmagine con un
filtro (bidimensionale). Molto utile `e il filtro mediano.
Il filtraggio lineare bidimensionale `e 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 lElaborazione 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`
o assumere le opzioni:
1 average: filtro medio;
2 disk: filtro medio circolare;
3 gaussian: filtro passa-basso gaussiano;
4 laplacian: approssimazione delloperatore Laplaciano;
5 log: Laplaciano del filtro gaussiano;
6 motion: approsimazione di un movimento della fotocamera;
7 prewitt: filtro di Prewitt;
8 sobel: filtro di Sobel;
9 unsharp: filtro per lenhancement del contrasto.
M. Scarpiniti

Laboratorio per lElaborazione 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:
>>
>>
>>
>>
>>
>>

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);

M. Scarpiniti

Laboratorio per lElaborazione 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 `e 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 `e m = n = 3.

M. Scarpiniti

Laboratorio per lElaborazione 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:
>>
>>
>>
>>
>>
>>

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);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

75 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Deblurring di unimmagine
Con il termine deblurring si intende il miglioramento della qualit`a di unimmagine che risulta mossa. Poich`e il blurring `e ottenuto con una convoluzione, loperazione di deblurring `e 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:
>>
>>
>>
>>

J = deconvwnr(I,h);
J = deconvreg(I,h);
J = deconvlucy(I,h);
[J,PSF] = deconvblind(I,h);

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

76 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Introduzione
La Segmentazione

Deblurring di unimmagine
Riportiamo un esempio:
>>
>>
>>
>>
>>
>>
>>
>>

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);

M. Scarpiniti

Laboratorio per lElaborazione 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 `e una zona di una immagine in cui vogliamo
effettuare qualche operazione, ad esempio eliminare un diffetto. Matlab
mette a disposizione il comando:
>> J = roifill;
>> J = roifill(I);
>> J = roifill(I,c,r);
Tale funzione restituisce unimmagine J che `e la stessa di I in cui `e stata
eliminata una regione ottenuta costruendo un poligono intorno con
lutilizzo del mouse e sostituito dal background. E anche possibile
specificare il poligono nei vettori c e r.

M. Scarpiniti

Laboratorio per lElaborazione 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:
>>
>>
>>
>>

I = imread(coins.png);
J = roifill(I);
subplot(1,2,1); imshow(I);
subplot(1,2,2); imshow(J);

M. Scarpiniti

Laboratorio per lElaborazione 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 lElaborazione 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 lElaborazione 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`
o essere ripetuto n volte, alla
velocit`a di fps frame per secondo.

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

82 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Funzioni Base

Convertire unimmagine in un video


E possibile convertire unimmagine in un video, attraverso
>> F = im2frame(X,map);
>> F = im2frame(X);
Viceversa `e possibile convertire un singolo frame di un video in unimmagine
attraverso
>> [X,map] = frame2im(F);
Il frame corrente pu`o 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 lElaborazione 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,replacechildren);
for j = 1:20
surf(sin(2*pi*j/20)*Z,Z)
F(j) = getframe;
end
>> pause;
>> movie(F)

M. Scarpiniti

Laboratorio per lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

84 / 85

Introduzione
Elementi di Elaborazione delle Immagini
Il Video

Funzioni Base

Bibliografia
Matlab
MATLAB 7: Getting Started Guide.
Available on-line: http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/getstart.pdf
Matlab
Image Processing Toolbox 7: Users 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 lElaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini

85 / 85

Похожие интересы