| 15 | 27 | 8 | | 100 | 95 | 1 | | 125 | 30 | 2 |
Imagen de entrada | Elemento estructural | | 15 | 27 | 8 | | 100 | 125 | 1 | | 125 | 30 | 2 |
Imagen de salida |
Un programa en Matlab que desarrolla el anterior ejemplo es:
% Imagen de entrada
I=[0 0 0 0 0 0 0;
0 0 0 0 0 0 0;
0 0 15 27 8 0 0;
0 0 100 95 1 0 0;
0 0 125 30 2 0 0;
0 0 0 0 0 0 0;
0 0 0 0 0 0 0];
% Elemento estructural
Ele=strel('square',3);
% Se aplica la dilatación
I1=imdilate(I, Ele);
% Matriz resultante
>> I1
I1 =
0 0 0 0 0 0 0
0 15 27 27 27 8 0
0 100 100 100 95 8 0
0 125 125 125 95 8 0
0 125 125 125 95 2 0
0 125 125 125 30 2 0
0 0 0 0 0 0 0
Los pixeles del contorno de la imagen son tratados de forma semejante a los filtros espaciales. En el caso de la dilatación, el valor de los píxeles de relleno se definen como el mínimo valor que admite el formato de dato para representar los píxeles de la imagen original, con lo que se garantiza que se sustituyan los píxeles del contorno con el máximo valor de la vecindad definida por el elemento estructural. Lo anterior se puede apreciar cuando se aplica la opción “full” a la función “imdilate”.
Como se ha expuesto previamente, el elemento estructural define la forma y el tamaño de la vecindad del píxel que será analizado, para posteriormente alterar su valor. Está definida por una matriz formada por ceros y unos de forma y tamaño arbitrario en la cual las posiciones donde está el uno define la vecindad. La matriz que define el elemento estructural tiene un tamaño muy inferior al tamaño de la matriz original que define la imagen a la que modificará.
Para determinar el origen del elemento estructural (que es equivalente al píxel que será modificado en la vecindad) se aplica la ecuación:
Centro = (tamaño+1)/2;
Por ejemplo, para el elemento estructural cuadrado de tamaño 3x3 el centro será:
Centro = (3+1 x 3+1)/2 = 2 x 2
tal y como se muestra en la siguiente figura

Si la matriz no es cuadrada, se redondea entonces hacia el entero más próximo hacia menos infinito.
A pesar de que el cuadrado de [3, 3] es el elemento estructural más generalmente usado, se pueden utilizar otros elementos estructurales, como los que se muestran a continuación
>> ee=strel('diamond', 3)
0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0
| >> ee=strel('disk', 4)
0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 0 0
| >> a=[0 1 0 1; 0 0 0 0; 0 0 0 0; 1 0 1 0];
>> se=strel('arbitrary',a) 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0
|
>> ee=strel('line', 7, 135)
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
| >> ee=strel('octagon', 3)
0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 0 0 | >> ee=strel('rectangle', [4 3])
1 1 1 1 1 1 1 1 1 1 1 1 |
Los pasos para aplicar la dilatación son:
1.- Seleccionar el píxel de la imagen original a tratar.
2.- Buscar el mayor de los píxeles de la vecindad, incluído el central, definidos por la forma y tamaño del elemento estructural.
3.- Sustituir el valor del píxel por el máximo valor.
Los anteriores pasos se ejecutan para todos los píxeles de la imagen.
La erosión reduce el nivel de los píxeles del entorno de un objeto, para ello selecciona el mínimo valor de la vecindad del punto a tratar (en vez del máximo, como cuando se aplica la dilatación). Por ejemplo
Imagen de entrada | Elemento estructural | Imagen de salida |
Como se puede apreciar, se ha sustituído el píxel central por el mínimo valor de los píxeles de la imagen original definidos por la vecindad contenida en el elemento estructural. El programa que se muestra a continuación realiza la erosión de un grupo de píxeles
% Imagen de entrada
I=[0 0 0 0 0 0 0;
0 0 0 0 0 0 0;
0 0 15 27 8 0 0;
0 0 100 95 1 0 0;
0 0 125 30 2 0 0;
0 0 0 0 0 0 0;
0 0 0 0 0 0 0];
% Elemento estructural
Ele=strel('square',3);
% Se aplica la erosión
I2=imerode(I, Ele);
% Matriz resultante
>> I2
I2 =
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Nótese que todos los elementos de la matriz I tienen en una vecindad definida por el elemento estructurante cuadrado de tamaño 3x3 al menos un cero, excepto el elemento central (95), que ha sido sustituido por 1 (el menor valor del entorno).
Apertura y cerradura
Las operaciones de dilatación y erosión se combinan para formar diferentes métodos de procesar la imagen. Por ejemplo, uno de ellos es la apertura de una imagen, que es la realización de una erosión seguida de una dilatación utilizando el mismo elemento estructural en ambas operaciones. Este método se aplica cuando se desea eliminar los pequeños objetos y mantener el tamaño en los grandes (eliminar ruído). A continuación se muestra como realizar la apertura
% Se define el elemento estructural
ee=strel('diamond', 2);
% Se aplica la erosión
I1=imerode(I,ee);
% Seguida de la dilatación
I2=imdilate(I1,ee);
Lo anterior es equivalente a:
ee=strel('diamond', 2);
I2=imopen(I,ee);
La operación de cerradura de una imagen se realiza cuando se aplica la dilatación y posteriormente la erosión (contrario a la apertura). Este proceso se caracteriza por rellenar huecos y conectar objetos que están próximos entre sí. A continuación se muestra como realizar la cerradura
% Se define el elemento estructural
ee=strel('diamond', 3);
% Se aplica la dilatación
I1=imdilate(I,ee);
% Seguida de la erosión
I2=imerode(I1,ee);
Lo anterior es equivalente a:
ee=strel('diamond', 3);
I2=imclose(I,ee);
Transformada de ganancia o pérdida (Hit or Miss)
Es una herramienta que permite detectar determinadas formas en un grupo de píxeles de la imagen. Se define como la operación AND de una imagen (A), erosionada con un elemento estructural (B1) y el complemento de la imagen, erosionada con otro elemento estructural (B2), ello es:

La anterior expresión se puede interpretar como que esta transformación la constituyen el conjunto de puntos en los que coincide B1 en A y B2 en el complemento de A simultáneamente. Por ejemplo, para detectar el punto superior izquierdo de una imagen se pueden definir los siguientes elementos estructurales
>> b1=strel([0 0 0; 0 1 1; 0 1 0])
b1 =
0 0 0
0 1 1
0 1 0
>> b2=strel([1 1 1; 1 0 0; 1 0 0])
b2 =
1 1 1
1 0 0
1 0 0
Si la imagen a la que se pretende detectar la esquina superior izquierda se define por
a = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |  |
Si se aplica la erosión utilizando b1, resulta:
>> c1=imerode(a, b1)
c1 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |  |
Cuando se aplica la erosión utilizando b2, resulta:
>> c2=imerode(imcomplement(a), b2)
c2 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 |  |
Si se interceptan ambas se obtiene el resultado final
>> c3=c1&c2
c3 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |  |
Detectándose el píxel superior izquierdo.
Lo anterior es equivalente a:
>>c3=bwhitmiss(a, b1, b2); % Se aplica a imagen binaria
Basado en lo anterior se podría, por ejemplo, detectar los píxeles de todas las esquinas, rotando 90 grados los elementos estructurales tres veces y aplicando el OR entre las cuatro imágenes resultantes. Los elementos estructurales para detectar las cuatro esquinas se resumen en la siguiente tabla.
b1 | b1 | b1 | b1 |
b2 Superior izquierdo | b2 Superior derecho | b2 Inferior derecho | b2 Inferior izquierdo |
Este método puede aplicarse en la detección de otras formas, redefiniendo los elementos estructurales.
Vecindades de un píxel
Define la relación entre determinado píxel y su entorno. Existen tres tipos fundamentales de vecindad.
Vecindad horizontal y vertical (N4(p)): Definida a través de la siguiente relación entre píxeles

a=(x+1, y), b=(x-1, y), c=(x, y+1) y d=(x, y-1)
Vecindad diagonal (ND(p)): Definida a través de la siguiente relación entre píxeles

e=(x+1, y+1), f=(x+1, y-1), g=(x-1, y+1) y h=(x-1, y-1)
Vecindad ocho (N8(p)): Se representa a través de la unión de las dos vecindades anteriores, como se muestra a continuación

N8(p)=N4(p) U ND(p)
Conectividad
Simplifica la definición de otros conceptos como fronteras y regiones. Dos píxeles p y q están interconectados si cumplen los siguientes criterios:
a) Vecindad: q pertenece a una vecindad de p (Ejemplo N8(p)).
b) Similitud: Los píxeles poseen niveles de gris (V) semejante. Ejemplo q=p=1 (imagen binaria).
Tipos de conectividad: Dos píxeles p y q pertenecen a V (nivel de gris semejante) si,
a) 4-conectados: q pertenece a N4(p).
b) 8-conectados: q pertenece a N8(p).
c) m-conectados: 1.- q pertenece a N4(p) ó, alternativamente
2.- q pertenece a ND(p) y la intersección de N4(p) y N4(q) no tienen píxeles que
pertenezcan a V.
Los píxeles m-conectados elimina la indeterminación en la relación entre píxeles que se produce en ocasiones cuando se aplica los píxeles 8-conectados, como se muestra en la siguiente relación de píxeles

Transparencias |