Salta el contingut

Tutorial i exercisis

En aquesta pràctica s’aplica la morfologia a imatges en escala de grisos. La idea geomètrica continua sent la mateixa, però ara no es treballa només amb objecte i fons. La imatge es pot imaginar com una superfície d’intensitats: les zones clares tenen valors alts i les zones fosques tenen valors baixos. En aquest context, la dilatació tendeix a prendre màxims locals i l’erosió tendeix a prendre mínims locals.

Carreguem les imatges en escala de grisos que farem servir durant la sessió pràctica

plane = imread("Imagenes\airplane.tif");
cells = imread("Imagenes\bloodcells.tif");
cameraman = imread("Imagenes\cameraman.tif");
butterfly = imread("Imagenes\mariposa.jpg");

montage({plane,cells,cameraman,butterfly})

figure_0.png

Operadors morfològics primaris

En imatges en escala de grisos, la dilatació fa que les zones brillants s’estenguin dins del veïnat definit per l’element estructurant. L’erosió, en canvi, afavoreix els valors baixos i fa que les zones fosques guanyin presència. L’efecte final depèn de la mida de les estructures de la imatge: els detalls més petits que l’element estructurant són els que més fàcilment es modifiquen.

Definició de l’element estructural que s’utilitzarà

SE = strel("disk",5);

Recordatori! Tipus d’elements estructurals: diamond, paràmetre - distància de l’origen a l’extrem del diamant (1 per a creu); disk, paràmetre - radi; line, paràmetres - longitud i angle; rectangle, paràmetres - longitud i altura; square, paràmetre - costat; nhood, forma definida per una matriu de 0s i 1s.

Dilatació

En escala de grisos, la dilatació es pot interpretar com un filtre de màxim local. Cada píxel tendeix a prendre el valor més alt del seu veïnat, de manera que les zones brillants creixen i els detalls foscos petits es redueixen.

butterfly_dilate = imdilate(butterfly,SE);

montage({butterfly,butterfly_dilate})

figure_1.png

plane_dilate = imdilate(plane,SE);

montage({plane,plane_dilate})

figure_2.png

Erosió

L’erosió en escala de grisos és equivalent a mirar mínims locals dins del veïnat. Això fa créixer visualment les zones fosques i redueix detalls brillants petits. És l’operació dual de la dilatació.

butterfly_erode = imerode(butterfly,SE);

montage({butterfly,butterfly_erode})

figure_3.png

plane_erode = imerode(plane,SE);

montage({plane,plane_erode})

figure_4.png

Operadors secundaris

L’obertura i la clausura també tenen una interpretació clara en escala de grisos. L’obertura elimina o redueix detalls brillants petits, perquè aquests no sobreviuen a l’erosió inicial. La clausura actua de manera dual i tendeix a eliminar detalls foscos petits o depressions estretes. Això permet separar estructures segons la seva mida i el seu contrast respecte a l’entorn.

Obertura

plane_open = imopen(plane,SE);

montage({plane,plane_open})

figure_5.png

Clausura

plane_close = imclose(plane,SE);

montage({plane,plane_close})

figure_6.png

Un altre exemple:

cells_open = imopen(cells,SE);
cells_close = imclose(cells,SE);

montage({cells,cells_open,cells_close})

figure_7.png

Comparació entre obertura i erosió i entre clausura i dilatació

montage({plane,plane_erode,plane_open})

figure_8.png

montage({plane,plane_dilate,plane_close})

figure_9.png

Provem l’efecte sobre elements clars o foscos mitjançant l’ús d’un element estructural més gran.

SE = strel("disk",10);

cells_open = imopen(cells,SE);
cells_close = imclose(cells,SE);

montage({cells,cells_open,cells_close})

figure_10.png

Filtratge morfològic

El filtratge morfològic és útil quan es vol eliminar soroll o detalls petits sense fer una mitjana de tota la imatge. A diferència dels filtres lineals, no combina valors amb pesos, sinó que aplica operacions de mínims i màxims locals. Això pot conservar millor les vores fortes i les formes principals, sempre que l’element estructurant estigui ben triat.

Filtres de suavitzat morfològic

cameraman_sal_pimienta = imread("Imagenes\cameraman_ruido_sal_pimienta.png");

cameraman_gaussiano = imread("Imagenes\cameraman_ruido_gaussiano.png");

montage({cameraman_gaussiano,cameraman_sal_pimienta})

figure_11.png

Definim l’element estructural més utilitzat per a aquest tipus de filtres

SE1 = strel("diamond",1);

Recordeu! Filtre de suavitzat morfològic: clausura de l’obertura

cameraman_open1 = imopen(cameraman_sal_pimienta,SE1);
cameraman_close1 = imclose(cameraman_open1,SE1);

cameraman_open2 = imopen(cameraman_gaussiano,SE1);
cameraman_close2 = imclose(cameraman_open2,SE1);

montage({cameraman_sal_pimienta,cameraman_close1})

figure_12.png

montage({cameraman_gaussiano,cameraman_close2})

figure_13.png

Com que encara hi ha soroll, apliquem la tècnica de filtratge seqüencial alternant.

El filtratge seqüencial alternant aplica obertures i clausures amb elements estructurants de mida creixent. La idea és eliminar soroll i detalls petits de diverses escales, no només d’una mida concreta. Cal aplicar-lo amb moderació, perquè també pot simplificar massa la imatge.

SE2 = strel("diamond",2);

cameraman_close1_open = imopen(cameraman_close1,SE2);
cameraman_close1_close = imclose(cameraman_close1_open,SE2);

montage({cameraman_sal_pimienta,cameraman_close1,cameraman_close1_close})

figure_14.png

Filtres de realç morfològic o gradient morfològic

El gradient morfològic mesura la diferència entre una imatge dilatada i una imatge erosionada. Quan dins del veïnat hi ha una transició forta d’intensitat, aquesta diferència és gran. Per aquest motiu, el gradient morfològic ressalta contorns i vores, però ho fa des d’una perspectiva morfològica, basada en la forma i la mida de l’element estructurant.

Definim l’element estructural més utilitzat en aquests casos

SE3 = strel("square",3);

Primer gradient morfològic intern

plane_realce_i = plane - imerode(plane,SE3);

Després, el gradient morfològic extern

plane_realce_e = imdilate(plane,SE3) - plane;

I finalment, el gradient morfològic intern-extern

El gradient intern ressalta el costat interior del contorn, perquè compara la imatge amb la seva erosió. El gradient extern ressalta el costat exterior, perquè compara la dilatació amb la imatge original. El gradient intern-extern combina tots dos efectes i dona una vora més gruixuda.

plane_realce = imdilate(plane,SE3)-imerode(plane,SE3);

montage({plane,plane_realce_i,plane_realce_e,plane_realce})

figure_15.png

Un altre exemple

cells_realce_i = cells-imerode(cells,SE3);

cells_realce_e = imdilate(cells,SE3)-cells;

cells_realce = imdilate(cells,SE3)-imerode(cells,SE3);

montage({cells,cells_realce_i,cells_realce_e,cells_realce})

figure_16.png

Es pren la imatge negativa per a una millor visualització

cells_realce_i_neg = 255 - cells_realce_i;
cells_realce_e_neg = 255 - cells_realce_e;
cells_realce_neg = 255 - cells_realce;

montage({cells,cells_realce_i_neg,cells_realce_e_neg,cells_realce_neg})

figure_17.png

Transformades Top-Hat i Bottom-Hat

Les transformades Top-Hat i Bottom-Hat comparen la imatge original amb una versió simplificada obtinguda amb obertura o clausura. El Top-Hat destaca detalls brillants que són més petits que l’element estructurant. El Bottom-Hat destaca detalls foscos petits. Aquestes transformacions són molt útils quan es volen detectar estructures locals sobre un fons que varia lentament.

cells = imread("Imagenes\cells_internet.jpg");

cells = rgb2gray(cells);

montage(cells)

figure_18.png

Es calcula la transformada Top-Hat

El Top-Hat es calcula restant l’obertura de la imatge original. Com que l’obertura elimina detalls brillants petits, la resta deixa precisament aquests detalls com a resposta destacada.

SE = strel("disk",30);

cells_top_hat = imtophat(cells,SE);

montage({cells,cells_top_hat})

figure_19.png

Es calcula la transformada Bottom-Hat

El Bottom-Hat es calcula comparant la clausura amb la imatge original. Com que la clausura omple detalls foscos petits, la diferència permet ressaltar aquests elements foscos locals.

cells_bot_hat = imbothat(cells,SE);

montage({cells,cells_bot_hat})

figure_20.png

Amb una aplicació clara, la binarització per al posterior etiquetatge de components connexes

Aquest exemple mostra una idea important en visió per ordinador: moltes vegades no es segmenta directament la imatge original. Primer es realça la informació que interessa i es redueixen variacions que poden confondre el llindar. Després, la binarització i l’etiquetatge de components connexes resulten més fiables.

cells_bin = imbinarize(cells);

cells_top_hat_bin = imbinarize(cells_top_hat);

cells_bot_hat_bin = imbinarize(cells_bot_hat);

montage({cells_bin,cells_top_hat_bin,cells_bot_hat_bin})

figure_21.png