Morfologia Matematica applicata alle Immagini Digitali Daniela Garofalo Viviana Zimbone
MORFOLOGIA MATEMATICA Branca della matematica rivolta all elaborazione delle immagini. Fornisce strumenti utili per: rappresentare e descrivere le forme degli oggetti presenti in un immagine rimuovere particolari irrilevanti mantenendo le informazioni importanti sulla forma degli oggetti Elemento strutturante: Immagine binaria che viene utilizzata come parametro nelle operazioni morfologiche (es. 3x3 o 5x5). In Matlab l elemento strutturante può essere generato utilizzando la funzione strel, che grazie ai parametri passati permette la creazione di diverse forme a grandezza variabile. Applicata su: Immagini binarie Immagini a scala di grigio
DILATION L operazione di dilatazione aggiunge pixel ai contorni di un oggetto. Il numero di pixel aggiunti dipende dalla forma e dalla dimensione dell elemento strutturante. ü Immagini a scala di grigio A = imread ('dilation.jpg'); e = strel ('diamond', 4); D = imdilate (A, e);
EROSION L operazione di erosione rimuove pixel ai contorni di un oggetto. Il numero di pixel rimossi dipende dalla forma e dalla dimensione dell elemento strutturante. ü Immagini a scala di grigio A = imread ('erosion.jpg'); e = strel ('diamond', 3); D = imerode (A, e);
DILATION & EROSION Le operazioni di dilatazione ed erosione possono essere usate congiuntamente per ottenere altre operazioni. Ad esempio: GRADIENT LAPLACIAN OPENING CLOSING
GRADIENT Poiché la dilatazione rende le regioni più spesse e l erosione le assottiglia, la loro differenza (GRADIENT) enfatizza i confini tra le regioni. Il risultato è un immagine in cui si vedono bene i bordi tra gli oggetti e in cui non è presente il contributo di zone omogenee. ü Immagini a scala di grigio A = imread ('image.jpg'); e = strel ('square', 15 ); G = imdilate(a, e) imerode(a, e);
LAPLACIAN Un alternativa al gradiente morfologico è l operatore laplaciano che tende a formare contorni chiusi. ü Immagini a scala di grigio A = imread ('image.jpg'); e = strel ('square', 15 ); L = imdilate(a, e) + imerode(a, e) 2*A;
OPENING L operazione di apertura ha come scopo di preservare il più possibile regioni di forma simile all elemento strutturante e di eliminare quelle differenti. ü Immagini a scala di grigio A = imread ('opening.jpg'); e = strel ('octagon, 12 ); E = imerode (A, e); D = imdilate (E, e);
OPENING In realtà Matlab prevede il comando imopen per realizzare l operazione di apertura. A = imread ('opening.png'); e = strel ('octagon', 12); O = imopen (A, e);
CLOSING L operazione di chiusura ha come scopo di chiudere eventuali buchi e piccole concavità nell immagine e rafforza la connessione di regioni unite debolmente. ü Immagini a scala di grigio A = imread ('closing.png'); e = strel ('disk', 15); D = imdilate (A, e); E = imerode (D, e);
CLOSING In realtà Matlab prevede il comando imclose per realizzare l operazione di chiusura. A = imread ('closing.jpg'); e = strel ('disk', 15); O = imclose (A, e);
OPENING & CLOSING Le operazioni morfologiche possono essere adoperate per agire analogamente ai filtri spaziali. Vediamo adesso due esempi di applicazione delle operazioni di apertura e chiusura. NOISE REDUCTION Per ottenere la riduzione del rumore in un immagine binaria senza modificare le strutture che caratterizzano l immagine si sceglie un elemento strutturante piccolo e si procede effettuando un operazione di apertura seguita da una di chiusura.
OPENING & CLOSING ü Immagini a scala di grigio SMOOTHING MORFOLOGICO Dato che l operazione di apertura sopprime i dettagli brillanti più piccoli di uno specifico elemento strutturante e che la chiusura sopprime dettagli scuri, nelle immagini a scala di grigio queste due operazioni sono usate insieme per realizzare i filtri morfologici di smoothing e di noise reduction. A = imread ('noise.jpg'); e = strel ('square', 3 ); O = imopen (A, e); C = imclose (O, e);
EDGE DETECTION I contorni di un immagine si possono ottenere applicando l operazione di erosione con un opportuno elemento strutturante (determina lo spessore del contorno) sottraendo poi il risultato all immagine originale. ü Immagini a scala di grigio A = imread ('edge.jpg'); e = strel ('square', 4 ); E = imerode (A, e); diff = A E;
HIT OR MISS TRANSFORM La trasformazione Hit or Miss è uno strumento base per la shape detection (individuazione delle forme) all interno di un immagine. Si applica l operazione di erosione all immagine con un opportuno elemento strutturante e poi di nuovo ai loro complementi. Dall intersezione degli insieme ottenuti si ottengono le posizioni dei pixel cercate. A = imread ('hitormiss.png'); e = strel ('line', 30, 90 ); E = imerode (A, e); E1 = imerode (not(a), not(e)); I = and (E, E1);
HIT OR MISS TRANSFORM In realtà Matlab prevede il comando bwhitmiss per realizzare la trasformazione Hit or Miss. A = imread ('hitormiss.png'); e = strel ('line', 30, 0 ); H = bwhitmiss(a, e, not(e));
HTM CORNER DETECTION La trasformazione Hit or Miss può essere utilizzata per determinare gli angoli presenti in un immagine binaria. 1 1 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 0 0 0 0 1 1 Se i pixel di foreground e background dell elemento strutturante hanno un exactly match con il foreground e background pixels dell immagine, allora il pixel corrispondente alla posizione dell origine dell elemento strutturante verrà settato a 1, altrimenti 0.
HTM CORNER DETECTION Il risultato finale è un OR di quattro immagini ciascuna ottenuta da uno dei quattro elementi strutturanti. A = imread ('cornerdetection.png'); r = zeros (size(a)); for x=0:1 for y=0:1 for z=0:1 c1 = [x 1 y; 0 1 1; 0 0 z]; c2 = [x 1 y; 1 1 0; z 0 0]; c3 = [x 0 0; 1 1 0; y 1 z]; c4 = [ 0 0 x; 0 1 1; y 1 z]; b1 = bwhitmiss(a, c1, not(c1)); b2 = bwhitmiss(a, c2, not(c2)); b3 = bwhitmiss(a, c3, not(c3)); b4 = bwhitmiss(a, c4, not(c4)); r=r b1 b2 b3 b4; end end end
COMANDO bwmorph Il comando bwmorph di Matlab è applicabile solo a immagini binarie e realizza diverse operazioni formate da una combinazione di quelle base, la sintassi è: bwmorph ( x, operation); bwmorph ( x, operation, n); dove x è l immagine binaria, operation il tipo di operazione morfologica e n il numero di volte che l operazione deve essere applicata. (n può essere inf nel caso cui l operazione viene ripetuta finchè l immagine non cambia più) Tramite questo comando è possibile effettuare operazioni di dilatazione, erosione, apertura e chiusura, inserendo in operation rispettivamente 'dilate', 'erode', 'open' e 'close'.
THINNING L operazione di assottigliamento riduce la forma di un oggetto rendendo le linee più sottili. A = imread ('thinning.tif'); B = bwmorph (A, 'thin', inf); Quando n=inf si assottigliano gli oggetti dell immagine in linee.
THICKENING L operazione di ispessimento viene utilizzata per far crescere regioni opportunamente selezionate. A = imread ('thickening.tif'); B = bwmorph (A, 'thicken', 4);
SKELETONIZATION La scheletrizzazione è un operazione morfologica che riduce gli oggetti in un immagine binaria ad un insieme di linee sottili che conservano l informazione rilevante sulla forma dell oggetto. A = imread ('skeletonization.jpg'); B = bwmorph (A, 'skel', inf);
BRIDGE Cerca gruppi di pixel non connessi e li congiunge cambiando lo 0 in 1. ESEMPIO 1 0 0 1 0 1 0 0 1 diventa 1 0 0 1 1 1 0 0 1 A = imread ('image.png'); B = bwmorph (A, 'bridge', 1);
CLEAN Questa operazione elimina pixel isolati. Ad esempio un singolo 1 circondato da tutti 0. A = imread ('image.png'); B = bwmorph (A, 'clean', 1); ESEMPIO 0 0 0 0 1 0 0 0 0
SHRINK Con questa operazione si rimuovono i pixel dell immagine in modo che gli oggetti senza fori si riducano ad un punto e quelli con dei fori si riducano ad un anello collegato a metà tra ciascun foro e il contorno esterno. A = imread ('shrink.jpg'); B = bwmorph (A, 'shrink', inf); Quando n=inf si riducono in punti gli oggetti dell immagine.
PIXEL FILLING Questa operazione permette di riempire i pixel isolati situati all interno di un immagine binaria. ESEMPIO 1 1 1 1 0 1 1 1 1 A = imread ('pixel.jpg'); B = bwmorph (A, 'fill', 1); Invece, l operazione 'hbreak rimuove i pixel connessi. 1 1 1 0 1 0 1 1 1 diventa 1 1 1 0 0 0 1 1 1
REGION FILLING È un operazione che riempie i fori presenti in un immagine binaria o a scala di grigio. Un foro è definito come un area di pixel scuri circondati da pixel più chiari. ü Immagini a scala di grigio A = imread ('regionfilling.png'); F = imfill (A, 'holes');
CONNECTED COMPONENTS È un operazione che permette di trovare le componenti connesse presenti in un immagine binaria. A = imread ('connected.jpg'); C = bwconncomp(a); x = C.NumObjects; R = label2rgb(labelmatrix(c)); p=cc.pixelidxlist; In particolare, l istruzione x = C.NumObjects restituisce il numero di componenti connesse individuate nell immagine e l istruzione p=cc.pixelidxlist restituisce un cell array che contiene gli indici lineari dei pixel di ogni componente.
CONVEX HULL Calcola l involucro convesso di tutti gli oggetti presenti nell immagine trattandoli come un unico oggetto e restituisce un immagine binaria convessa. A = imread ('convexhull.png'); Q = bwconvhull (A);
TOP HAT & BOTTOM HAT Una delle applicazioni principali di queste trasformazioni è la rimozione degli oggetti da un immagine attraverso un elemento strutturante che non si abbina agli elementi da rimuovere; la loro differenza porta ad avere un immagine in cui rimangono solo le componenti rimosse.
TOP HAT La trasformazione top-hat si usa per oggetti chiari su uno sfondo scuro (white top-hat) e viene spesso utilizzata per correggere efficacemente gli effetti di un illuminazione non uniforme (shading correction). ü Immagini a scala di grigio A = imread ('tophat.png'); e = strel ('disk', 3 ); T = imtophat(a, e);
BOTTOM HAT La trasformazione bottom-hat si usa per oggetti scuri su uno sfondo chiaro (black top-hat) e viene spesso utilizzata per correggere efficacemente gli effetti di un illuminazione non uniforme (shading correction). ü Immagini a scala di grigio A = imread ('bottomhat.png'); e = strel ('disk', 3 ); T = imbothat(a, e);
CORREZIONE ILLUMINAZIONE
SE NON-FLAT Estendendo la morfologia ad immagini a scala di grigio si possono utilizzare elementi strutturanti di tipo non-flat dove ad ogni elemento è assegnato un valore di intensità, il cui intervallo di valori è lo stesso di quello dell'immagine a toni di grigio. SE = strel ('ball', R, H, N) Crea un elemento strutturante non-flat a forma di ellissoide, il cui raggio nel piano x-y è R e la cui altezza è H. R deve essere un intero non negativo H deve essere uno scalare reale N deve essere un intero non negativo
SE NON-FLAT Quando N > 0 l'elemento strutturante sferico è approssimato da una sequenza di N elementi strutturanti non-flat a forma di linea. Quando N = 0 non viene utilizzata alcuna approssimazione e i membri dell elemento strutturante consistono in tutti i pixel i cui centri non sono maggiori di R rispetto all'origine. I corrispondenti valori di altezza sono determinati dalla formula dell'ellissoide specificata da R e H. Se N non è specificato, il valore predefinito è 8. SE = strel ('ball', R, H, N)