operatori morfologici - studiogaldi.it · 08/04/2013 introduzione a matlab 2 operatori morfologici...

21
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

Upload: letruc

Post on 16-Feb-2019

215 views

Category:

Documents


0 download

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.

08/04/2013 Introduzione a Matlab 21

Esercizio IV

Data l'immagine Palline.tif:

• 1) Isolare le palline

mediante il filtro

Watershed

• 2) Cerchiare le palline

mediante un operatore

morfologico