Laboratorio per l'Elaborazione MultiMediale Lezione 6...

85
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` a 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

Transcript of Laboratorio per l'Elaborazione MultiMediale Lezione 6...

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

Laboratorio per l’ElaborazioneMultiMediale

Lezione 6 -Elaborazione delle Immagini

Prof. Michele Scarpiniti

Dipartimento di Ingegneria dell’Informazione, Elettronica e Telecomunicazioni“Sapienza” Universita 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

1 IntroduzioneIntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

2 Elementi di Elaborazione delle ImmaginiIntroduzioneLa Segmentazione

3 Il VideoFunzioni Base

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 2 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Introduzione

Introduzione

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 3 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Introduzione

L’obiettivo di questa lezione e di illustrare i comandi di base per operare conle immagini in Matlab.

Vengono anche discusse alcune semplici tecniche di elaborazione delle im-magini.

Matlab mette a disposizione centinaia d funzioni, utili per lavorare con leimmagini: queste funzioni sono parte dell’Image Toolbox. Una guida diquesto Toolbox puo 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Tipi di Immagine

Esistono diverse modalita per memorizzare un file rappresentante un’immagine.Le principali sono le seguenti tre:

1 Scala di grigi;2 Truecolor;3 Indicizzata.

Nella modalita a scala di grigi ogni pixel dell’immagine contiene un livellodi grigio, compreso tra 0 e 1.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 5 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Tipi di Immagine

Nella modalita Truecolor ogni pixeldell’immagine e un vettore di tre ele-menti contenenti i livelli di rosso,verde, blu (RGB), compresi tra 0 e1.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 6 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Tipi di Immagine

Infine, nella modalita indicizzata ogni pixel rappresenta la riga di una mappadi colore, costituita da tre elementi, cioe 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: leggere un file di immagine

Per leggere un file contenete una immagine in scala di grigi o a colori, Matlabmette 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 restituitauna matrice I di dimensioni M × N se a scala di grigio (gli M × N pixels delle Mrighe e N colonne), oppure di dimensioni M × N × 3 se a colori rappresentati conil modello RGB o M × N × 4 se rappresentati con il modello CMYK (tipico deifile *.tiff ). Gli elementi di questa matrice sono numeri interi (tipo uint8), cioeassumono valori da 0 a 255. Se il formato ’fmt’ non viene specificato, la funzioneimread 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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 ilcomando

>> 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 ’

Comment: {}

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 10 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: ottenere le informazioni un file di immagine

Informazioni sul tipo di file possono essere ottenute dal seguente comando, cherestituisce 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 11 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: ottenere le informazioni un file di immagine

Senza il tipo di formato, la funzione imformats restituisce in una tabella tutti icampi delle proprieta 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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 formatospecificato da ’fmt’ contenente l’immagine rappresentata dalla matrice I.La matrice I puo avere dimensioni M × N per immagini in scala di grigi,oppure dimensioni M × N × 3 per immagini a colori, rappresentata dalmodello RGB o M×N×4 per immagini a colori, rappresentata dal modelloCMYK.

La seconda riga salva una immagine indicizzata con la relativa mappa dicolore, specificata dalla variabile map.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 14 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: visualizzare una immagine

Per visualizzare una immagine in scala di grigi o a colori contenuta in unamatrice I, Matlab mette a disposizione il comando

>> imshow(I);

>> imshow(I,[low high]);

>> imshow(I,map);

>> imshow(filename);

>> handle = imshow (...);

Se l’immagine e in scala di grigi , posso visualizzare solo i pixels con valoriall’interno dell’intervallo [low high], gli altri valori saranno sostituiti con ilcolore nero, se il loro valore e minore di low , altrimenti, se maggiore, conil colore bianco. Posso anche visualizzare una immagine indicizzata con larelativa mappa di colore contenuta nella variabile map, oppure un’immagineda un file di nome ’filename’. Se serve, la funzione imshow restituiscel’handle della figura.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 15 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: visualizzare una immagine

Un modo alternativo per visualizzare una immagine in scala di grigi o acolori contenuta in una matrice A (quindi trattata come un’immagine), equello 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 visua-lizzare, ma l’immagine e la stessa della chiamata precedente. Se serve lafunzione image restituisce l’handle della figura.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 18 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: visualizzare una immagine

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

>> load mandrill

>> figure(’color ’,’k’)

>> image(X)

>> colormap(map)

>> axis off

>> axis image

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 19 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: visualizzare una immagine

Un ulteriore modo alternativo per visualizzare una immagine in scala di grigi o acolori contenuta in una matrice A (quindi trattata come un’immagine), e quello diutilizzare 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 e visua-

lizzata 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 e la stessa della chiamata prece-

dente. 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: visualizzare una immagine

Ad esempio, carico da file una matrice X che contiene una fotografia a colori di unclown 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 21 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: la mappa di colore

Una mappa di colore e una matrice di dimensione M × 3 di valori com-presi nell’intervallo [0 1], che specifica i valori RGB degli M colori pre-definiti. 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 mappedi 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 damap, il secondo comando consente di utilizzare la mappa corrente comedefault, 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Matlab: la mappa di colore

Le 17 mappe di colore disponibili in Matlab sono elencate qui sotto edillustrate 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 24 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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 puo utilizzare

>> colormapeditor

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 25 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Migliorare la Qualita di un’Immagine

Molte volte l’immagine che abbiamo a disposizione non e di buona qualita.Ad esempio l’immagine puo essere troppo scura o troppo chiara, oppureavere un contrasto molto limitato.

Matlab mette a disposizione varie funzioni che consentono di modifica-re in modo elementare gli attributi piu semplici di un’immagine, come laluminosita e/o il contrasto.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 26 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Modificare la luminosita

La luminosita di una immagine puo 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 particolarela 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. Innewmap viene restituita la nuova mappa di colore, o la versione modificatadi quella correntemente in uso cmap.

Ogni elemento della mappa di colore map viene elevato ad un esponente γ,pari a

γ =

{1− β se β > 0

11+β se β ≤ 0

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 27 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Modificare la luminosita

Riportiamo un esempio di modifica della luminosita:

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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Modificare il contrasto

Il contrasto di una immagine puo essere modificato tramite il comando:

>> cmap = contrast(X);

>> cmap = contrast(X,m);

Tale funzione crea una nuova mappa di colore cmap. Tale nuova mappa hauna distribuzione approssimativamente uniforme: tutti gli elementi in ogniriga 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Modificare il contrasto

Riportiamo un esempio di modifica del contrasto:

>> load clown;

>> cmap = contrast(X);

>> imshow(X,gray);

>> colormap(cmap);

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 30 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Modificare l’intensita

E’ possibile modificare l’intensita di una immagine in scala di grigi o a colori, utilizzandoi 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 e saturato alle

basse ed alte intensita: il risultato e 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 e spinta verso valori piu elevati (risultato piu

luminoso), altrimenti, se γ > 1, la saturazione e spinta verso valori piu bassi (risultato

piu scuro). Di default e γ = 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Modificare l’intensita

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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 32 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Modificare l’intensita

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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 33 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Convertire un’immagine in binario

E’ possibile trasformare una immagine in scala di grigi o a colori in unaimmagine binaria, cioe in una immagine i cui pixels hanno solo due valori:1 (bianco) e 0 (nero). Il comando che e messo a disposizione da Matlab eil seguente:

>> BW = im2bw(I, level);

>> BW = im2bw(X, map , level);

Tutti i pixel con intensita superiori a level vengono posti a 1, quelli piupiccoli a 0. Se ho a disposizione la mappa di colore si utilizza la secondalinea.

Il livello ottimale level puo 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 cioe il grado di efficacia della soglia calcolata.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 34 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Convertire un’immagine 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 35 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Convertire un’immagine in binario

Un metodo alternativo, e utilizzare la funzione

>> BW = dither(I);

>> X = dither(RGB ,map);

Il secondo comando converte un’immagine a colori in un’altra con una risoluzionedi colori aumentata grazie all’utilizzo 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 36 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Convertire un’immagine in scala di grigio

E’ possibile trasformare una immagine indicizzata in scala di grigi attraverso ilseguente comando:

>> J = ind2gray(I,map);

Il comando ind2gray rimuove le informazioni di tonalita e saturazione, lasciandoinalterata l’informazione sulla luminosita. 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 37 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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 = imadd(I,J);

>> K = imsubtract(I,J);

>> K = imabsdiff(I,J);

>> K = immultiply(I,J);

>> K = imdivide(I,J);

>> K = imlinconb(c1,I1 ,c2,I2 ,...,cn ,In);

>> K = imcomplement(I);

L’ultima riga calcola il complemento, cioe il valore massimo meno il valoredel pixel. La variabile J puo 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Elaborare un’immagine: imtool

Matlab mette a disposizione un’interfaccia grafica per poter effettuare la visualizza-zione e/o modifica semplice di un’immagine. Tale interfaccia puo essere richiamatacon il comando

>> imtool

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 40 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Visualizzare una sequenza di immagini e video

E’ possibile visualizzare un insieme di immagini come una sequenza, con ilcomando

>> implay(sequenza);

dove sequenza contiene tutte le immagini da visualizzare, cioe e un insieme dimatrici (ovvero un tensore). Viene aperto un’interfaccia grafica che consenteanche di vedere filmati in formato *.avi. Posso creare un video con leimmagini, 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

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 un’immagine letta a blocchi.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 42 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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 e scale volte l’immagine A, mentre la secondariga restituisce l’immagine A rapportata a mrows righe e ncols colonne. La terza riga vieneutilizzata se utilizzo immagini indicizzate (mappe di colore). L’iterpolazione utilizzata nelridimensionamento, puo 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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 quil’interpolazione utilizzata nella rotazione, puo essere effettuata con diversi metodi, speci-ficata dal parametro ’method’:

’nearest’;

’bilinear’;

’bicubic’.

Il parametro ’bbox’ specifica la dimensione dell’immagine restituita B e puo assumere idue valori:

1 ’crop’: B ha la stessa dimensione di A;

2 ’loose’: rende l’immagine B grande quanto basta a contenere tutta l’immagineruotate (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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita di un’Immagine

Ruotare un’immagine

Riportiamo un esempio, ruotando di 35◦ un’immagine:

>> I = imread(’rice.png’);

>> J = imrotate(I,35);

>> subplot (1,2,1), imshow(I);

>> subplot (1,2,2), imshow(J);

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 45 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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, ospecificata dall’handle h oppure dove e stata disegnata l’immagine 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 46 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneI Comandi di BaseMigliorare la Qualita 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’istogramma di un’immagine

L’istogramma di un’immagine puo 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 sespecificato) con la scala di colore a cui si riferisce.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 49 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’istogramma e il contrasto

Il contrasto di un’immagine puo essere migliorato equalizzando il suo isto-gramma in modo tale da renderlo simile ad un istogramma di riferimento.Se tale riferimento non e specificato, viene preso di default un istogrammapiatto. 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 l’immagine in esame, hgram e l’istogramma di riferimento, n indica ilnumero di livelli di colore utilizzato (di default pari a 64).

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 50 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione dei contorni

I contorni di un’immagine binaria, possono essere trovati attraverso la fun-zione

>> B = bwboundaries(BW);

>> B = bwboundaries(BW ,conn);

>> B = bwboundaries(BW ,conn ,options);

>> [B,L] = bwboundaries (...);

in cui BW e l’immagine binaria, conn specifica il grado di connettivita tragli oggetti trovati (e vale 4 oppure 8, che e il valore di default), mentre’option’ puo assumere solo due valori:

1 ’holes’: ricerca i “buchi” (cioe contorni dentro i contorni) neglioggetti;

2 ’noholes’: non ricerca i “buchi”.

B e un array di celle, in cui ogni cella contiene una matrice di dimensioneQ × 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 53 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione dei contorni

Un funzione alternativa per l’estrazione 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 un’immagine in scala di grigi o binaria. Vengono ignorati i con-torni che non superano la soglia tresh. La detection puo essere effettuataattraverso 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 54 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 55 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione dei contorni

Manualmente il contorno puo essere estratto analizzando il valore della deri-vata numerica, per righe o per colonne, di un’immagine. Infatti un contornoe caratterizzato da pixel adiacenti di valore sensibilmente diverso: la derivataquindi evidenzia queste discontinuita.

Se dunque, il valore della derivata e superiore ad una certa soglia perun determinato pixel, allora molto probabilmente quel pixel appartiene alcontorno di un oggetto dell’immagine.

In Matlab la derivata numerica di ordine N, lungo la direzione dim e effet-tuata 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione dei contorni

Un esempio di codice puo 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione dei contorni

Inoltre e anche possibile disegnare il profilo di intensita (valore del pixel)lungo un segmento, attraverso il comando:

>> c = improfile;

>> c = improfile(n);

>> c = improfile(I,xi ,yi);

>> c = improfile(I,xi ,yi,n);

Cliccando con il mouse su due punti dell’immagine viene valutato in c il pro-filo su n punti. E’ anche possibile specificare il segmento dando le coordinatenei due vettori xi e yi .

Osservando questo profilo e possibile osservare se e presente un contornoall’interno del segmento scelto.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 58 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione dei contorni

Riportiamo un esempio:

>> I = imread(’coins.png’);

>> imshow(I);

>> c = improfile;

>> plot(c);

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 59 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’estrazione dei contorni

Il valore in formato RGB di un pixel, puo essere ottenuto attraverso l’usodel comando

>> P = impixel(I);

>> P = impixel(X,map);

Basta cliccare con il mouse su un punto di interesse dell’immagine correnteI (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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Segmantare un’immagine

La segmentazione di un’immagine e il processo di partizione di un’immaginein regioni significative. La segmentazione e di solito utilizzata per localizzareoggetti e bordi. Piu precisamente, la segmentazione e il processo con ilquale si classificano i pixel dell’immagine che hanno caratteristiche comuni,pertanto ciascun pixel in una regione e simile agli altri della stessa regione peruna qualche proprieta o caratteristica (colore, intensita o texture). Regioniadiacenti sono significativamente differenti rispetto ad almeno una di questecaratteristiche. Esistono diverse tecniche per effettuare la segmentazione diun’immagine; le principali sono

1 Algoritmi di crescita: si parte dai singoli pixel fino a formare isegmenti per fusione;

2 Algoritmi di divisione: si parte dall’intera immagine fino asuddividerla di segmenti;

3 Algoritmi di clustering: si suddivide l’immagine in segmentiagglomerando le parti simili.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 61 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’algoritmo K-means

Esistono molteplici algoritmi per effettuare il clustering. Uno dei piu semplicie utile e l’algoritmo k-means: lo scopo e quello di partizionare N osservazioniin K clusters, in cui ogni osservazione deriva dal cluster piu vicino.

Dato un insieme di osservazioni (x1, x2, . . . , xN), dove ogni osservazione eun vettore d-dimensionale, l’algoritmo k-means partiziona le N osservazioninegli K insiemi (K < N) S = {S1,S2, . . . ,SK} tali da minimizzare lafunzione obiettivo:

arg minS

K∑i=1

∑xj∈Si

‖xj −mi‖2

dove mi e il valor medio di Si , detto centroide.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 62 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’algoritmo K-means

L’algoritmo K-means utilizza una tecnica iterativa.

Dato un insieme iniziale di K valor medi m(1)1 , . . . ,m

(1)k chiamati centroidi e che

sono i rappresentanti dei clusters, che possono essere scelti random, l’algoritmo siapplica eseguendo due passi consecutivi:

1 Assegnamento: ogni osservazione e assegnata al cluster i-esimo se:

S(t)i =

{xj :

∥∥∥xj −m(t)i

∥∥∥ ≤ ∥∥∥xj −m(t)i∗

∥∥∥ ∀i∗ = 1, . . . ,K}

2 Aggiornamento: calcolo i nuovi valori medi che saranno i nuovi centroididei clusters:

m(t+1)i =

1∣∣∣S (t)i

∣∣∣∑

xj∈S (t)i

xj

L’algoritmo converge quando non ho piu variazioni dei centroidi.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 63 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’algoritmo K-means: un esempio

1) K “medie” iniziali (in questo caso K =3) sono selezionate a caso dai dati (cerchicolorati).

2) Vengono creati K clusters associandoogni osservazione al cluster con centroidepiu vicino.

3) Il centroide di ognuno dei K clustersviene aggiornato con il nuovo valor medio.

4) Si ripetono i passi 2 e 3 fino aconvergenza.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 64 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’algoritmo K-means

Dato che l’algoritmo e basato su un’euristica e i centroidi sono inizializzati acaso, la convergenza dell’algoritmo non e garantita. Inoltre il risultato finaledipende dalle condizioni iniziali . Poiche comunque e un algoritmo moltoveloce ed efficiente e possibile eseguirlo piu volte con condizioni inizialidiverse.

I due principali aspetti negativi dell’algoritmo K-means sono:

1 Il numero di clusters K deve essere noto a priori: una scelta inappro-priata di K puo causare dei risultati scadenti;

2 L’algoritmo utilizza una distanza Euclidea che puo non essere unamisura adeguata della distanza.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 65 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

L’algoritmo K-means: Matlab

Matlab mette a disposizione una funzione per effettuare l’algoritmo K-means, 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 restituisceun vettore IDX contenete l’indice del cluster per ogni punto dei dati. Seinteressa restituisce anche la posizione dei centroidi nel vettore C, il valoredel funzionale di errore in sumd , ovvero la distanza dal relativo centroide inD. Infine e possibile assegnare opportuni valori ad alcuni parametri.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 66 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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 ’sqEuclidean’: distanza Euclidea (opzione di default);2 ’cityBlock’: norma L1;3 ’cosine’;4 ’correlation’;5 ’Hamming’.

’replicates’: specifica il numero di volte che l’algoritmo verraripetuto con diverse condizioni iniziali;

’start’: metodo utilizzato per selezionare la posizione dei centroidiiniziali:

1 ’sample’: seleziona k osservazioni casuali da X (opzione di default);2 ’uniform’: seleziona k osservazioni uniformemente su X;3 ’cluster’: esegue l’algoritmo preliminarmente sul 10% dei dati X e

seleziona i centroidi.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 67 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Il segmentatore

Riportiamo un semplice esempio di segmentatore, utilizzando l’algoritmo K-means. Viene creatauna 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 successivamenteviene 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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 Iaggiungendovi 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 70 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Rimozione del rumore

Molto spesso le immagini a disposizione sono corrotte dal rumore: divienequindi necessario saper eliminare il rumore dalle immagini. Normalmentequesto problema e risolto tramite un filtraggio lineare dell’immagine con unfiltro (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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 71 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Rimozione del rumore

Molto utili sono alcuni particolari tipi di filtri bidimensionali, che possonoessere ottenuti attraverso il comando:

>> h = fspecial(type);

>> h = fspecial(type , parameters);

In cui la variabile ’type’ puo 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

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 73 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Rimozione del rumore

Per eliminare efficacemente il rumore di tipo sale e pepe e possibile applicareun 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 intornom × n del pixel. Per default e m = n = 3.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 74 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 75 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Deblurring di un’immagine

Con il termine deblurring si intende il miglioramento della qualita di un’im-magine che risulta mossa. Poiche il blurring e ottenuto con una convolu-zione, l’operazione di deblurring e effettuata attraverso una deconvoluzione.Ovviamente esistono varie tecniche per effettuare questa convoluzione con ilfiltro h. Ad esempio con un filtro di Wiener, un filtro regolarizzato, il meto-do di Lucy-Richardson, oppure in modo blind . Matlab mette a disposizionele 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 76 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Deblurring di un’immagine

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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 77 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa Segmentazione

Eliminare un difetto

Una regione di interesse o ROI e una zona di una immagine in cui vogliamoeffettuare qualche operazione, ad esempio eliminare un difetto. Matlabmette a disposizione il comando:

>> J = roifill;

>> J = roifill(I);

>> J = roifill(I,c,r);

Tale funzione restituisce un’immagine J che e la stessa di I in cui e stataeliminata una regione ottenuta costruendo un poligono intorno con l’utilizzodel mouse e sostituito dal background. E’ anche possibile specificare ilpoligono nei vettori c e r.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 78 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il Video

IntroduzioneLa 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 79 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il VideoFunzioni Base

Il Video

Il Video

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 80 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il VideoFunzioni Base

Gestire un video

Matlab consente di gestire i file video di tipo *.avi. Per aprire un file avi siutilizza:

>> mov = aviread(filename);

>> mov = aviread(filename ,index);

Restituisce il video contenuto in ’filename’ o i frame indicati in indexnella 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

IntroduzioneElementi di Elaborazione delle Immagini

Il VideoFunzioni 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 puo essere ripetuto n volte, alla velocitadi fps frame per secondo.

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 82 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il VideoFunzioni Base

Convertire un’immagine in un video

E’ possibile convertire un’immagine in un video, attraverso

>> F = im2frame(X,map);

>> F = im2frame(X);

Viceversa e possibile convertire un singolo frame di un video in un’immagineattraverso

>> [X,map] = frame2im(F);

Il frame corrente puo 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 ilmodello RGB) e F .colormap (mappa di colore).

M. Scarpiniti Laboratorio per l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 83 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il VideoFunzioni 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 l’Elaborazione MultiMediale Lezione 6 - Elaborazione delle Immagini 84 / 85

IntroduzioneElementi di Elaborazione delle Immagini

Il VideoFunzioni 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 Processing2-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