operatori morfologici - studiogaldi.it · 08/04/2013 introduzione a matlab 2 operatori morfologici...
TRANSCRIPT
08/04/2013 Introduzione a Matlab 1
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 2
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.
• 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 Binary Image
Dilation on a Grayscale Image
08/04/2013 Introduzione a Matlab 3
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 4
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 5
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 6
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 7
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 8
Watershed
Original Sand image.
Watershed result.
Thresholded (value=70).
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 9
bwmorph
Gli operatori morfologici in MATLAB sono implementati dalla funzione:
B = bwmorph(A, ‘operation’);
B = bwmorph(A, ‘operation’, n);
'branchpoints'
Cerca configurazioni di 1 disposti a croce:
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
Il parametro ‘operation’ può assumere diversi valori:
08/04/2013 Introduzione a Matlab 10
bwmorph
bridge'
Cerca gruppi di pixel e congiunge
cambiando uno 0 in 1:
1 0 0 1 1 0
1 0 1 diventa 1 1 1
0 0 1 0 1 1
'clean'
Elimina punti isolati.
0 0 0
0 1 0
0 0 0
'fill'
Riempie posizioni vuote.
1 1 1
1 0 1
1 1 1
08/04/2013 Introduzione a Matlab 11
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);
% rappresentiamo l'immagine risultato
figure(2);
imshow(uint8(B));
% 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));
08/04/2013 Introduzione a Matlab 12
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);
% rappresentiamo l'immagine risultato
figure(6);
imshow(uint8(B));
% 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));
08/04/2013 Introduzione a Matlab 13
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 14
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 15
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 16
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 17
Esempio Watershed
% WATERSHED
A = imread('riso.tif');
figure;
imshow(A, []);
% visualizziamo l'istogramma dell'immagine
figure;
imhist(A);
% 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, []);
% applichiamo loperatore di watershed
D = new_watershed(C);
figure;
imshow(D, []);
F = operazione_somma(A, D);
figure;
imshow(F, []);
08/04/2013 Introduzione a Matlab 18
Esercizio I
• Data l'immagine
Quadrato.tif, estrarre il
contorno della figura
utilizzando gli
operatori morfologici.
08/04/2013 Introduzione a Matlab 19
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 20
Esercizio III
• Data l'immagine
Text.tif, ottenere la
scritta in grassetto con
un operatore
morfologico.