Modelos, Control y Sistema de Visión

Central     Modelos     Control     Visión     Aplicaciones     Mapa del sitio     Publicaciones     Sobre el autor      

Ejemplos de operaciones morfológicas

  

  • Dilatación

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);

 

 

Imagen original

 

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.

 

  • Erosión

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);

 

 

Imagen original

 

 

 

  • Apertura

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);

 

 

Imagen original

 

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);

 

 

Imagen original

 

  • Cerradura

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);

 

 

Imagen original

 

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);

 

 

Imagen original

 

 

 

  • Transformada de ganancia o pérdida (Hit or Miss)

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);


 
 
  • Extracción de contornos

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);

 

I (Imagen original)

VI

VIII

 

Otra forma de extraer contornos es a través de la función bwperim, que se basa en la conectividad entre píxeles.

 

  • Extracción de caracteres

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);