Ejemplos de operaciones morfológicas Se aplica para rellenar zonas imcompletas de la imagen o eliminar detalles no deseados. "Amplía" la imagen, como se muestra a continuación % Se leen las imágenes y convierten a blanco y negro >> I=imread('pirata.jpg'); >> II=im2bw(I); % Se define el elemento estructural >> eI1=strel('disk', 2) eI1 = 0 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 % Se aplica la dilatación >> I1=imdilate(II, eI1); |
Nótese como se han eliminado los detalles de los puntos y ampliado el interior de los huesos, desapareciendo las líneas negras que existían. Se aplica en la eliminación de los detalles irrelevantes de la imagen. "Reduce" o "afina" la imagen, como se muestra a continuación % Se leen las imágenes y convierten a blanco y negro >> I=imread('rushmore.jpg'); >> II=im2bw(I); % Se define el elemento estructural >> eI1=strel('disk', 3) % Se aplica la erosión >> I1=imerode(II, eI1); |
Suaviza el contorno de un objeto, separando pequeños enlaces entre formas presentes en la imagen. Si se toma como referencia un contorno, la apertura suaviza la imagen por la parte interior del mismo, lo cual es consecuencia de la erosión previa a la dilatación que lo caracteriza. % Se leen las imágenes y convierten a blanco y negro >> I=imread('apercerr.jpg'); >> II=im2bw(I); % Se define el elemento estructural >> ee=strel('square', 20); % Se aplica la apertura >> III=imopen(II,ee); |
Una aplicación de la apertura es la separación de formas en una imagen. Supóngase que se desea contar la cantidad de vértebras de la columna vertebral que se muestra en la siguiente figura. El siguiente programa permite separar las vértebras % Se leen las imágenes y convierten a blanco y negro >> I=imread('columna.jpg'); >> II=im2bw(I,240/255); % Se define el elemento estructural >> eI1=strel('disk', 5); % Se aplica la apertura >> III=imopen(II,eI1); |
Como la apertura, suaviza el contorno del objeto, pero por la parte exterior del mismo. Al realizarse previamente la dilatación, se fortalecen los enlaces débiles entre los objetos. % Se leen las imágenes y convierten a blanco y negro >> I=imread('apercerr.jpg'); >> II=im2bw(I); % Se define el elemento estructural >> ee=strel('square', 20); % Se aplica la cerradura >> IV=imclose(II,ee); |
La cerradura se puede aplicar para aumentar la definición de formas, como se muestra a continuación % Se leen las imágenes y convierten a blanco y negro >> I=imread('celula.jpg'); >> II=im2bw(I,200/255); % Se define el elemento estructural >> eI1=strel('disk', 5); % Se aplica la cerradura >> III=imclose(II,eI1); |
Se aplica en la detección de píxeles que tienen cierta configuración, como pueden ser píxeles aislados o píxeles que definan determinada forma. En el ejemplo que se muestra se detectan los píxeles que definen un rectángulo % Se leen las imágenes y convierten a blanco y negro >> I=imread('rect.jpg'); >> II=im2bw(I); % Se definen los elementos estructurales >> b11=strel([0 0 0; 0 1 1; 0 1 0]); >> b12=strel([1 1 1; 1 0 0; 1 0 0]); >> b21=strel([0 0 0; 1 1 0; 0 1 0]); >> b22=strel([1 1 1; 0 0 1; 0 0 1]); >> b31=strel([0 1 0; 1 1 0; 0 0 0]); >> b32=strel([0 0 1; 0 0 1; 1 1 1]); >> b41=strel([0 1 0; 0 1 1; 0 0 0]); >> b42=strel([1 0 0; 1 0 0; 1 1 1]); % Se identifican los píxeles que definen las esquinas del rectángulo >> III=bwhitmiss(II, b11, b12); >> IV=bwhitmiss(II, b21, b22); >> V=bwhitmiss(II, b31, b32); >> VI=bwhitmiss(II, b41, b42); % Se unen las esquinas identificadas >> VII=III+IV+V+VI; >> eI1=strel('square', 5); % Para facilitar la visualización (ampliación) >> VIII=imdilate(VII,eI1); |
Se pueden obtener contornos de formas sustrayendo una imagen erosionada a la original o sustrayendo a la dilatación de una imagen la erosión de la misma, como se muestra a continuación % Se leen las imágenes y convierten a blanco y negro
>> I=imread('matricula.jpg'); >> II=im2bw(I,150/255); >> III=imcomplement(II); % Complemento de la imagen % Se suprime ruído >> IV=medfilt2(III, [8, 8], 'symmetric'); % Se erosiona y sustrae >> eI1=strel('square', 5); >> V=imerode(IV,eI1); >> VI=imsubtract(IV,V); % Se dilata y sustrae la imagen erosionada >> VII=imdilate(IV,eI1); >> VIII=imsubtract(VII,V); |
Otra forma de extraer contornos es a través de la función bwperim, que se basa en la conectividad entre píxeles. A continuación se muestra un ejemplo de como definir los caracteres presentes en la imagen a través de operaciones morfológicas I=imread('Numeros_ej.jpg'); % A escala de grises II=rgb2gray(I); imshow(II); figure; % Operación morfológica de cerradura % Eliminar parte oscura que rodea los caracteres
ee=strel('square', 9); III=imclose(II,ee); imshow(III); % Para eliminar fondo oscuro y resaltar contorno % se sustraen las imagenes IV=imcomplement(III-II); figure; imshow(IV); % Para eliminar zonas claras en interior de caracter % se aplica una apertura
V=imopen(IV,ee); figure; imshow(V); % Se convierte a blanco y negro
VI=im2bw(V, 210/255); figure; imshow(VI); % Elimina píxeles aislados
VII = bwareaopen(imcomplement(VI), 200); VIII=imcomplement(VII); figure; imshow(VIII); % Suaviza bordes
eee=strel('square', 6); IX=imclose(VIII,eee); figure; imshow(IX); |
|