Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Este documento presenta una aplicación simple que permite obtener el borde de una imagen binaria
(binarizada) utilizando operaciones morfológicas. Esta forma de obtener bordes es una excelente
alternativa al uso de filtros pasa altos. Sin embargo, como queda claro en el título, sólo se puede
utilizar cuando se tiene imágenes binarias.
También se presenta un algoritmo clásico para rellenar imágenes binarias (Fill Hole) utilizando una
secuencia de operaciones morfológicas. El relleno de imágenes es muy útil cuando se desea mejorar
problemas en la binarización, que generan zonas sin relleno indeseadas.
ETAPA 1: BORDE
Figura 1
La técnica de obtención de borde utilizada consiste en utilizar un elemento estructurante para dilatar
(o erosionar) la imagen original. Este proceso se puede repetir una o más veces. Posteriormente se
procede a restar la imagen dilatada con original.
0 1 0
1 1 1
0 1 0
β ( IM ) = ( IM ⊕ B ) − IM
Es decir la imagen de Borde corresponde a la dilatación menos la imagen original.
Es importante notar que el borde calculado con esta operación corresponde al borde "externo" de la
imagen original. Es decir los puntos del borde no son parte de los puntos del objeto original.
Otra tal vez más apropiada para mantener las proporciones del objeto original es determinar el
borde en base a la imagen original menos la imagen erosionada.
β ( IM ) = IM − ( IMΘB )
El código del programa en Matlab es:
IM=imread('bw.bmp');
subplot(2,2,1);imshow(IM);
%Elemento Estructurante
B=[0 1 0;1 1 1;0 1 0];
%Dilatación
IM2=dilate(IM,B);
%Borde
BORDE=double(IM2)-double(IM);
subplot(2,2,2);imshow(BORDE);
%Dilatación
IM2=dilate(IM2,B);
%Borde
BORDE=double(IM2)-double(IM);
subplot(2,2,3);imshow(BORDE);
%Dilatación
IM2=dilate(IM2,B);
%Borde
BORDE=double(IM2)-double(IM);
subplot(2,2,4);imshow(BORDE);
ETAPA 2: RELLENO
Dada una imagen de borde original como la imagen A de la figura 2, se obtiene la imagen AC, que
corresponde al complemento de la imagen A. Se define también un elemento estructurante B.
Figura 2
X k = ( X k −1 ⊕ B ) ∩ AC
Se utiliza como punto de partida un punto al interior de la objeto que se desea rellenar como
muestra la imagen X0 y se realiza la operación dilatación con el elemento B. Esta dilatación
expande la imagen en todas las direcciones. Sin embargo al realizar la intersección con la imagen
AC, se logra mantener los puntos dilatados siempre dentro de los bordes de la imagen original. Este
proceso se repite "n-veces" hasta que la imagen Xk sea idéntica a la imagen Xk-1. Es decir, hasta que
no se generen nuevos cambios y el proceso se detenga.
Figura 3
La fig. 3d presenta el resultado del relleno de la imagen 3.c utilizando el siguiente
algoritmo en Matlab:
IM=imread('bw.bmp');
subplot(2,2,1);imshow(IM);
%Elemento Estructurante
B=[0 1 0;1 1 1;0 1 0];
%Dilatación 4 veces
IM2=dilate(IM,B);IM2=dilate(IM2,B);
IM2=dilate(IM2,B);IM2=dilate(IM2,B);
subplot(2,2,2);imshow(IM2);
%Borde
BORDE=double(IM2)-double(IM);
subplot(2,2,3);imshow(BORDE);
%FUNCION DE RELLENO
%Se Busca el primer punto al interior del borde
[nf nc]=size(IM);
f=1;
while f<nf
c=1;
while c<nc
if IM(f,c)==1 % Si encuentra un punto termina los ciclos
ff=f;cc=c;
f=nf;c=nc;
end;
c=c+1;
end;
f=f+1;
end;