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