10 de enero de 2011

Filtros y operaciones en imágenes

Ejercicio 1 - Cargue una imagen con texturas interesantes. Suavice la imagen en diferente maneras usando la función cv.Smooth con tipo de suavizado = CV_GAUSSIAN

a. Use una ventana de suavizado simetrica de 3x3, 5x5, 9x9 y 11x11 y muestre los resultados

Resultado:






Codigo:
















b. ¿Son parecidos los resultados de suavizar la imagen dos veces con un filtro de 5x5 que suavizandola 1 vez con un filtro de 11x11?.



Aunque los resultados son similares, el filtro de 11x11 se puede ver mas suavizado que el de 2 veces 5x5.

Ejercicio 2 - Cree una imagen de un solo canal de 200x200. Limpiela y el pixel del medio pongalo en 255 (blanco).

a. Suavize la imagen con un filtro gaussiano de 5x5 y muestre los resultados.

Resultado:



Codigo:














Se puede ver claramente que el pixel blanco comienza a parecerce a sus vecinos. La utilidad principal de un suavizado es eliminar el ruido en la imagenes. Y ese pixel blanco en la mitad de un fondo negro es ruido, ya que es un cambio abrupto en los valores de la imagen.

b. Vuelva a hacerlo con un filtro gaussiano de 9x9.

Resultado:



No creo que sea necesario volver a colocar el mismo codigo y cambiar dos cincos por dos nueves. : )

Como podemos ver entre mas grande sea el nucleo del filtro gaussiano, el ruido es menos perceptible.

Los ejercicios 2.c y el 3 me parecieron que ya no ameritaban hacerlos entonces voy a continuar.

Ejercicio 4 - Use una camara para tomar dos fotos de la misma escena tratando de mover la camara lo menos posible. Cargue esas imagenes y llamela scr1 y src2.

Imagen 1

Imagen 2

a. Tome el valor absoluto de src1 menos src2 (restar las imagenes); Llame a la diferencia diff12 y muestrela. Si fue hecho perfectamente diff12 sera una imagen negra. ¿Por qué no lo es?

Resultado:


Codigo:









Este codigo no necesita mucho explicación. La diferencia entre las dos imagenes se debe principalmente a los cambios de iluminación y fluctuasiones de la camara al momento de tomar las fotos.

b. Cree cleandiff  aplicando cv.Erode y luego cv.Dilate sobre diff12. Muestre el resultado.

Resultado:


Codigo:



Podemos ver como las variaciones fueron casi eliminadas por medio de la erosión y dilatacion de la diferencia

c. Cree dirtydiff aplicando cv.dilate y cv.erode sobre diff12

Resultado:





Codigo:













d. Explique las diferencias entre cleandiff y dirtydiff

Las diferencias son evidentes. Si erosiono primero y despues dilato el ruido tiende a desaparecer. Pero por el contrario si dilato y luego erosiono el ruido se puede ver con mas claridad.

Ejercicio 5 - Tome la foto de una escena. Luego, sin mover la camara, ponga una taza de cafe en la escena y tome otra foto. Cargue esta imagenes y conviertalas en imagenes en escala de grises de 8 bits.

a. Tome el valor absoluto de sus diferencias. Muestre los resultados, el cual deberia parecer como una mascara ruidosa de la taza de cafe.

Imagenes:

Imagen 1




Imagen agregando la taza
Resultado:





Codigo:











Parece que era justo lo que esperaba. El unico problema es que tambien aparece el reflejo de la tasa en la mesa.

b. Haga un umbral binario (binary threshold) a la imagen resultante, usando un nivel que preserve la taza y que elimine el ruido. Muestre el resultado.

Resultado:


Codigo: 
El valor de 40 lo obtuve de probar valores y este es el que daba el mejor resultado.

c. Haga un CV_MOP_OPEN sobre la imagen para eliminar aun mas el ruido.

Resultado:


Codigo:














Como se puede ver, la funcion MorphologyEx elimina correctamente el ruido de la imagen. Espero mas adelante encontrar alguna manera de poder distinguir entre la taza real y el reflejo.

Voy a postear solamente estos ejercicios, pero es conveniente realizarlos todos para poder afianzar lo que se halla visto en el capitulo.

1 comentario: