Introduzione a Matlab Operatori Morfologici A cura di: Daniel Riccio http://www.dmi.unisa.it/people/riccio/www/teaching.htm http://www.dmi.unisa.it/people/nappi 08/04/2013 Introduzione a Matlab 1
Operatori Morfologici Dilation: The value of the output pixel is the maximum value of all the pixels in the input pixel's neighborhood. In a binary image, if any of the pixels is set to the value 1, the output pixel is set to 1. Dilation on a Binary Image Erosion: The value of the output pixel is the minimum value of all the pixels in the input pixel's neighborhood. In a binary image, if any of the pixels is set to 0, the output pixel is set to 0. Dilation on a Grayscale Image 08/04/2013 Introduzione a Matlab 2
Dilation The 3 3 square is probably the most common structuring element used in dilation operations, but others can be used. A larger structuring element produces a more extreme dilation effect, although usually very similar effects can be achieved by repeated dilations using a smaller but similarly shaped structuring element. 08/04/2013 Introduzione a Matlab 3
Erosion The 3 3 square is probably the most common structuring element used in erosion operations, but others can be used. A larger structuring element produces a more extreme erosion effect, although usually very similar effects can be achieved by repeated erosions using a smaller similarly shaped structuring element. 08/04/2013 Introduzione a Matlab 4
Open As with erosion and dilation, it is very common to use this 3 3 structuring element. The effect in the above figure is rather subtle since the structuring element is quite compact and so it fits into the foreground boundaries quite well even before the opening operation. 'open' implements binary opening (erosion followed by dilation). 08/04/2013 Introduzione a Matlab 5
Close As with erosion and dilation, this particular 3 3 structuring element is the most commonly used, and in fact many implementations will have it hardwired into their code, in which case it is obviously not necessary to specify a separate structuring element. 'close' performs binary closure (dilation followed by erosion). 08/04/2013 Introduzione a Matlab 6
Skeletization Skeletonization is a process for reducing foreground regions in a binary image to a skeletal remnant that largely preserves the extent and connectivity of the original region while throwing away most of the original foreground pixels. 08/04/2013 Introduzione a Matlab 7
Watershed Original Sand image. Thresholded (value=70). Watershed result. Superimposed on original. Watershed segmentation is a method for separating essentially convex and relatively smooth features that touch slightly. 08/04/2013 Introduzione a Matlab 8
bwmorph Gli operatori morfologici in MATLAB sono implementati dalla funzione: B = bwmorph(a, operation ); B = bwmorph(a, operation, n); Il parametro operation può assumere diversi valori: Cerca configurazioni di 1 disposti a croce: 'branchpoints' 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 diventa 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 08/04/2013 Introduzione a Matlab 9
bwmorph Cerca gruppi di pixel e congiunge cambiando uno 0 in 1: bridge' 1 0 0 1 1 0 1 0 1 diventa 1 1 1 0 0 1 0 1 1 Elimina punti isolati. 'clean' 'fill' 0 0 0 0 1 0 0 0 0 Riempie posizioni vuote. 1 1 1 1 0 1 1 1 1 08/04/2013 Introduzione a Matlab 10
Esempio Dilation % DILATAZIONE % Carichiamo l'immagine A = imread('quadrato.tif'); % convertiamo l'immagine in double A = double(a); % rappresentiamo l'immagine figure(1); imshow(uint8(a)); % applichiamo una operazione di dilatazione una volta B = operazione_dilate(a, 1); % applichiamo una operazione di dilatazione 20 volte C = operazione_dilate(a, 10); % rappresentiamo l'immagine risultato figure(3); imshow(uint8(c)); % osserviamo cosa è successo all'immagine mediante una operazione di differenza D = operazione_differenza(a, B); figure(4); imshow(uint8(d)); % rappresentiamo l'immagine risultato figure(2); imshow(uint8(b)); 08/04/2013 Introduzione a Matlab 11
Esempio Erosion % EROSIONE % Carichiamo l'immagine A = imread('quadrato.tif'); % convertiamo l'immagine in double A = double(a); % rappresentiamo l'immagine figure(5); imshow(uint8(a)); % applichiamo una operazione di dilatazione una volta B = operazione_erode(a, 1); % applichiamo una operazione di dilatazione 20 volte C = operazione_erode(a, 10); % rappresentiamo l'immagine risultato figure(7); imshow(uint8(c)); % osserviamo cosa è successo all'immagine mediante una operazione di differenza F = operazione_differenza(a, B); figure(8); imshow(uint8(f)); % rappresentiamo l'immagine risultato figure(6); imshow(uint8(b)); 08/04/2013 Introduzione a Matlab 12
Esempio Open % APERTURA % Carichiamo l'immagine A = imread('open.jpg'); % convertiamo l'immagine in double A = double(a); % rappresentiamo l'immagine figure(1); imshow(uint8(a)); % applichiamo una operazione di dilatazione una volta B = operazione_open(a); % rappresentiamo l'immagine risultato figure(2); imshow(uint8(b)); % osserviamo cosa è successo all'immagine mediante una operazione di differenza D = operazione_differenza(a, B); figure(3); imshow(uint8(d)); 08/04/2013 Introduzione a Matlab 13
Esempio Close % CHIUSURA % Carichiamo l'immagine A = imread('text.tif'); % convertiamo l'immagine in double A = double(a); % rappresentiamo l'immagine figure(1); imshow(uint8(a)); % applichiamo una operazione di chiusura B = operazione_close(a); % rappresentiamo l'immagine risultato figure(2); imshow(uint8(b)); % osserviamo cosa è successo all'immagine mediante una operazione di differenza D = operazione_differenza(a, B); figure(3); imshow(uint8(d)); 08/04/2013 Introduzione a Matlab 14
Esempio Remove % REMOVE % Carichiamo l'immagine A = imread('remove.jpg'); % convertiamo l'immagine in double A = double(a); % rappresentiamo l'immagine figure(1); imshow(uint8(a)); % applichiamo una operazione di remove B = operazione_remove(a); % rappresentiamo l'immagine risultato figure(2); imshow(uint8(b)); % osserviamo cosa è successo all'immagine mediante una operazione di differenza D = operazione_differenza(a, B); figure(3); imshow(uint8(d)); 08/04/2013 Introduzione a Matlab 15
Esempio SKELETIZATION % SCHELETRIZZAZIONE % Carichiamo l'immagine A = imread('stelle.tif'); % convertiamo l'immagine in double A = double(a); % rappresentiamo l'immagine figure(1); imshow(uint8(a)); B = operazione_negativo(a); figure(2); imshow(uint8(b)); % applichiamo una operazione di scheletrizzazione C = operazione_skel(b, 50); figure(3); imshow(uint8(c)); D = operazione_negativo(255*double(c)); % rappresentiamo l'immagine risultato figure(4); imshow(uint8(d)); % osserviamo cosa è successo all'immagine mediante una operazione di somma E = operazione_somma(a, D); figure(5); imshow(uint8(e)); 08/04/2013 Introduzione a Matlab 16
Esempio Watershed % WATERSHED A = imread('riso.tif'); figure; imshow(a, []); % visualizziamo l'istogramma dell'immagine figure; imhist(a); % applichiamo loperatore di watershed D = new_watershed(c); figure; imshow(d, []); F = operazione_somma(a, D); figure; imshow(f, []); % effettuiamo una operazione di soglia B = operazione_soglia(a, 30); figure; imshow(b, []); % effettuiamo il negativo dell'immagine soglia per poter applicare l'operatore di watersheed C = operazione_negativo(b); figure; imshow(c, []); 08/04/2013 Introduzione a Matlab 17
Esercizio I Data l'immagine Quadrato.tif, estrarre il contorno della figura utilizzando gli operatori morfologici. 08/04/2013 Introduzione a Matlab 18
Esercizio II Data l'immagine Palline.tif, separare le palline all'interno dell'immagine. Successivamente delineare i contorni delle sfere utilizzando un operatore morfologico 08/04/2013 Introduzione a Matlab 19
Esercizio III Data l'immagine Text.tif, ottenere la scritta in grassetto con un operatore morfologico. 08/04/2013 Introduzione a Matlab 20
Esercizio IV Data l'immagine Palline.tif: 1) Isolare le palline mediante il filtro Watershed 2) Cerchiare le palline mediante un operatore morfologico 08/04/2013 Introduzione a Matlab 21