Operaciones Morfológicas en Imágenes Binarias

Anuncio
Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial
Cátedra: Visión Artificial
Agosto de 2005
Apéndice
Ahora que hemos presentado las operaciones morfológicas más comunes que se emplean sobre imágenes binarias, vamos a construir algoritmos en scripts de Matlab que realicen estos procedimientos de la forma más genérica posible, de manera que puedan ser
programados en otro lenguaje sin mayores inconvenientes.
Traslación
Supongamos que el origen de coordenadas de la imagen se encuentra en su centro.
Luego la traslación de una imagen binaria contenida en a por el punto x se realiza como
sigue
at=zeros(size(a));
x=[-50 -50];
% Determino los limites de los indices para no exceder las dimensiones de la
%imagen
nMax=min(n,n-x(1));
nMin=max(1,-x(1)+1);
mMax=min(m,m-x(2));
mMin=max(1,-x(2)+1);
for i=nMin:nMax
for j=mMin:mMax
at(i+x(1),j+x(2))=a(i,j);
end
end
imshow(a), title('Imagen Original')
figure, imshow(at), title('Imagen Trasladada')
Reflexión
Ahora veamos como se refleja la imagen resultante de la traslación anterior respecto a
su origen:
% El punto sobre el cual se realiza la reflexion es el centro de la imagen
b=zeros(size(a));
for i=1:n
for j=1:m
b(i,j)=at(n-i+1,m-j+1);
end
end
imshow(at), title('Imagen Original')
figure, imshow(b), title('Imagen Reflejada')
Resta de imágenes
En este punto es necesario tener en cuenta el tipo de datos con el que se está trabajando, es decir, datos binarios, 1’s y 0’s, blanco y negro. Por ello, aquellos valores negativos en los píxeles que se obtienen como resultado de una resta carecen de sentido (en
realidad, les corresponde el valor ‘0’). Nunca obtendríamos estos resultados si consideramos la otra definición para la resta: A-B = A ∩BC . Concretando
Operaciones Morfológicas en Imágenes Binarias - Apéndice
1
Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial
Cátedra: Visión Artificial
Agosto de 2005
res=a-at;
imshow(a)
figure , imshow(res)
ó
at_complemento=1-at;
res=and(a,at_complemento); % intersección de a y at_complemento
imshow(a)
figure , imshow(res)
Dilatación
Recordemos la idea intuitiva de la dilatación:
Tomar cada píxel del objeto (con valor “1”) y setear al valor “1” todos aquellos píxeles
pertenecientes al fondo (background) que tienen una conectividad C (C=4, C=8, etc) con
el píxel del objeto. En pocas palabras, poner a “1” los píxeles del fondo vecinos a los píxeles del objeto.
Teniendo en cuenta lo anterior, consideremos que a contiene la imagen binaria que deseamos dilatar y que el elemento estructural está dado por una vecindad 4. Entonces, el
algoritmo siguiente realiza la dilatación buscada. Cabe aclarar que en lo que sigue, los píxeles pertenecientes al objeto tienen el valor ‘1’ que corresponte al color blanco.
[n,m]=size(a);
dilatada=zeros(size(a));
for i=2:n-1
for j=2:m-1
dilatada(i,j)=a(i,j);
if (a(i,j)==0 & (a(i,j-1)==1 | a(i-1,j)==1 | a(i,j+1)==1 | a(i+1,j)==1))
dilatada(i,j)=1;
end
end
end
Erosión
Repasemos ahora la idea intuitiva de la erosión:
Tomar cada píxel del objeto que tiene una conectividad C con los píxeles del fondo y
setearlo al valor “0”. En otras palabras, poner a “0” los píxeles del objeto vecinos a los píxeles del fondo.
Como se ve, la idea es casi la misma que para la dilatación. Luego
erosionada=zeros(size(a));
for i=2:n-1
for j=2:m-1
erosionada(i,j)=a(i,j);
if (a(i,j)==1 & (a(i,j-1)==0 | a(i-1,j)==0 | a(i,j+1)==0 | a(i+1,j)==0))
erosionada(i,j)=0;
end
end
end
Operaciones Morfológicas en Imágenes Binarias - Apéndice
2
Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial
Cátedra: Visión Artificial
Agosto de 2005
Por último, comparemos los resultados de nuestros algoritmos de dilatación y erosión
con los obtenidos con funciones de Matlab:
B=[0 1 0;1 1 1;0 1 0];
% ELEMENTO ESTRUCTURAL 4-conectado
dilatada_matlab=imdilate(a,B);
figure, subplot(1,2,1), imshow(dilatada)
title('Dilatacion con algoritmo intuitivo')
subplot(1,2,2), imshow(dilatada_matlab)
title('Dilatacion con "imdilate" de Matlab')
erosionada_matlab=imerode(a,B);
figure, subplot(1,2,1), imshow(erosionada)
title('Erosion con algoritmo intuitivo')
subplot(1,2,2), imshow(erosionada_matlab)
title('Erosion con "imerode" de Matlab')
Operaciones Morfológicas en Imágenes Binarias - Apéndice
3
Descargar