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