Operaciones Morfológicas
En esta ocasión se realizó el análisis de 4 imágenes a través de operaciones morfológicas tales como erosión, dilatación, apertura y cierre y se determinó cual de éstas es la óptima para obtener la forma más parecida al objeto mostrado.
Como primer paso luego de escoger las imágenes correspondientes a trabajar, se obtuvieron en escala de grises utilizando la función rgb2gray del software Matlab, donde siempre hemos trabajado. El código utilizado fue el siguiente e inmediatamente se encuentra el resultado obtenido.
%% Conversión a escala de grises
figure(1)
img1=rgb2gray(avion);
subplot(221),imshow(img1),title('Imagen 1')
img2=rgb2gray(alce);
subplot(222),imshow(img2),title('Imagen 2')
img3=rgb2gray(baseball);
subplot(223),imshow(img3),title('Imagen 3')
img4=rgb2gray(cangaroo);
subplot(224),imshow(img4),title('Imagen 4')
Luego se procede a hacer el análisis de cada una de las imágenes para determinar cual de ls 4 operaciones nos permite visualizar mejor la forma de la misma. Para esto se utilizó la función SE=strel(‘diamond’,R), la cual crea un objeto plano donde la estructuración es en forma de rombo y la letra R permite especificar la distancia del origel del elemento estructurador a los puntos del diamante. Este número debe ser positivo.
En el primer caso luego de saber esto, procedemos a utilizar dicha función con R=3, ya que después de varias pruebas se cofirmó que era el valor más óptimo. Vemos a continuación cuales fueron los resultados obtenidos para cada operación.
Como podemos ver, las operaciones de erosión y apertura nos muestran una imagen más elaborada que la original, sin embargo entre estas dos, la imagen obtenida utilizando la operación de erosión tiene mejor apariencia que las demás, por lo tanto, se concluye que en este caso es la operación ideal para obtener la forma de la imagen.
El código utilizado se muestra a continuación.
%% Análisis de img1 (avion)
sel = strel('diamond',3);
im_d=imdilate(img1,sel);
figure(2)
subplot(231)
imshow(img1)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img1,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img1,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img1, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Para el segundo caso la imagen seleccionada fue la que tiene forma de alce. En este caso se procede como en el anterior, escogiendo un valor de R óptimo tal que la forma de la imagen se realce y distinga mucho mejor. Luego de varias pruebas se concluyo que dicho valor es R=2. Los resultados obtenidos se pueden ver en la siguiente imagen.
Como podemos ver nuevamente las operaciones de apertura y erosión nos muestran una mejor visualización de la figura de la imagen original, sin embargo, podríamos decir que la operación de cierre también hace un buen intento por mostrar un contorno adecuado. En este caso se elige la operación de apertura por optimizar de una mejor forma la imagen original.
El código utilizado en este caso lo visualizamos en breve.
sel = strel('diamond',3);
im_d=imdilate(img1,sel);
figure(2)
subplot(231)
imshow(img1)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img1,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img1,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img1, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Para el segundo caso la imagen seleccionada fue la que tiene forma de alce. En este caso se procede como en el anterior, escogiendo un valor de R óptimo tal que la forma de la imagen se realce y distinga mucho mejor. Luego de varias pruebas se concluyo que dicho valor es R=2. Los resultados obtenidos se pueden ver en la siguiente imagen.
Como podemos ver nuevamente las operaciones de apertura y erosión nos muestran una mejor visualización de la figura de la imagen original, sin embargo, podríamos decir que la operación de cierre también hace un buen intento por mostrar un contorno adecuado. En este caso se elige la operación de apertura por optimizar de una mejor forma la imagen original.
El código utilizado en este caso lo visualizamos en breve.
%% Análisis de img2 (alce)
sel = strel('diamond',2);
im_d=imdilate(img2,sel);
figure(3)
subplot(231)
imshow(img2)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img2,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img2,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img2, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Como tercer caso, la imagen escogida fue la correspondiente al chico jugando baseball. Luego de realizar las mismas operaciones que en los casos anteriores y hacer análisis similares y correspondientes, se llegó a la conclusión de que en este caso el valor óptimo de R en este caso debería corresponder nuevamente a 2. Los resultados a continuación.
Vemos que indudablemente en este caso las operaciones de dilatación y cierre hacen un mejor trabajo que las otras dos, e indudablemente se elige como mejor caso la de cierre ya que recrea de manera fiel la forma que se pretende alcanzar del jugador.
El código se muestra a continuación.
sel = strel('diamond',2);
im_d=imdilate(img2,sel);
figure(3)
subplot(231)
imshow(img2)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img2,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img2,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img2, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Como tercer caso, la imagen escogida fue la correspondiente al chico jugando baseball. Luego de realizar las mismas operaciones que en los casos anteriores y hacer análisis similares y correspondientes, se llegó a la conclusión de que en este caso el valor óptimo de R en este caso debería corresponder nuevamente a 2. Los resultados a continuación.
Vemos que indudablemente en este caso las operaciones de dilatación y cierre hacen un mejor trabajo que las otras dos, e indudablemente se elige como mejor caso la de cierre ya que recrea de manera fiel la forma que se pretende alcanzar del jugador.
El código se muestra a continuación.
%% Análisis de img3 (baseball)
sel = strel('diamond',2);
im_d=imdilate(img3,sel);
figure(4)
subplot(231)
imshow(img3)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img3,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img3,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img3, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Como última imagen tenemos la forma de un canguro. Y luego de varias pruebas se determinó que el valor de R adecuado para este caso debería ser de 1, ya que de esta forma las operaciones dilatación y cierre nos muestran unos resultados muy buenos, en comparación con las de erosión y apertura si aumentamos R, no iguala a la optimización que se logra con este valor y estas operaciones. Veamos a continuación los resultados.
Tal y como se mencionó se comprueba que ambas operaciones nos brindan los mejores resultados por lo que se puede elegir cualquiera de las dos en este caso.
El código utilizado se muestra a continuación.
sel = strel('diamond',2);
im_d=imdilate(img3,sel);
figure(4)
subplot(231)
imshow(img3)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img3,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img3,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img3, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Como última imagen tenemos la forma de un canguro. Y luego de varias pruebas se determinó que el valor de R adecuado para este caso debería ser de 1, ya que de esta forma las operaciones dilatación y cierre nos muestran unos resultados muy buenos, en comparación con las de erosión y apertura si aumentamos R, no iguala a la optimización que se logra con este valor y estas operaciones. Veamos a continuación los resultados.
Tal y como se mencionó se comprueba que ambas operaciones nos brindan los mejores resultados por lo que se puede elegir cualquiera de las dos en este caso.
El código utilizado se muestra a continuación.
%% Análisis de img4 (cangaroo)
sel = strel('diamond',1);
im_d=imdilate(img4,sel);
figure(5)
subplot(231)
imshow(img4)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img4,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img4,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img4, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Para concluir se puede decir que las operaciones morfológicas nos permite encontrar la forma de un objeto dependiendo de este y la operación a realizar. Muchas veces es mejor utilizar algunas en comparación con otras, o algunas veces simplemente podemos utilizar varias ya que nos brindan resultados similares e igual de valiosos. También se puede hacer uso de todas para comparar, eliminar errores, o redundancias en una imagen.
sel = strel('diamond',1);
im_d=imdilate(img4,sel);
figure(5)
subplot(231)
imshow(img4)
title('Original')
subplot(232)
imshow(im_d)
title('Dilatación usando Strel. diamante.')
im_e = imerode(img4,sel);
subplot(233)
imshow(im_e)
title('Erosión usando Stel. diamante.')
im_ap = imdilate(imerode(img4,sel),sel);
subplot(234)
imshow(im_ap)
title('Apertura usando Strel diamante.')
im_cr = imerode(imdilate(img4, sel),sel);
subplot(235)
imshow(im_cr)
title('Cierre usando Strel. diamante')
Para concluir se puede decir que las operaciones morfológicas nos permite encontrar la forma de un objeto dependiendo de este y la operación a realizar. Muchas veces es mejor utilizar algunas en comparación con otras, o algunas veces simplemente podemos utilizar varias ya que nos brindan resultados similares e igual de valiosos. También se puede hacer uso de todas para comparar, eliminar errores, o redundancias en una imagen.
10 de mayo de 2010, 16:19
Hola, te felicito por tu blog, se nota que eres una persona muy dedicada y con mucho potencial.
Tus entradas son bastante detalladas y espero qeu sigas poniendo nuevas entradas siempre, siempre leo tu Blog y espero que se mantenga asi siempre.
Saludos