martes, 12 de febrero de 2013

[VC] Tarea 1: Detección de bordes

Para la tarea 1 de la clase de visión computacional programe las rutinas necesarias para realizar la detección de bordes en imágenes, utilizando Python como lenguaje principal y las librerías PIL (Python Imaging Library) y Numpy para la manipulación de la imagen en forma de un arreglo

Para la detección de bordes es necesario:
  • Soporte para distintos tipos de máscaras
  • Desarrollar la fórmula de convolución discreta (2D)

Primeramente, los pasos necesarios para la detección son:
  • Convertir la imágen a escala de grises
  • Elegir las máscaras a aplicar, en mi caso elegi 4 máscaras de Prewitt
    • Prewitt horizontal simétrica
    • Prewitt vertical simétrica
    • Prewitt 0 grados
    • Prewitt 45 grados
  • Aplicar las máscaras utilizando convolución discreta (2D)
  • Aplicar un método de acomplamiento con las gradientes resultantes al aplicar las máscaras
  • Aplicar un binarizado utilizando el filtro de umbral
El último paso puede variar para diferentes imágenes, en mi caso me quede con la imagen obtenida después de aplicar las máscaras y utilizando la interfaz que desarrollé busqué el nivel adecuado de binarización, una vez encontrado solo guardé la imagen en formato *.png

Las máscaras fueron obtenidas del libro:

Machine Vision Theory, Algorithms, Practicalities
E. R. Davies
Chapter 5: Edge Detection
Pag. 133, 134

Resultados


Utilicé 3 imágenes para probar la detección de bordes, los resultados los guarde en forma de imágenes gif para que se pueda apreciar una comparación entre las diferentes fases:

Prueba 1

 Prueba 2

Prueba 3



Imágenes estáticas
Convolución

Binarizadas




Código


En el repositorio pueden encontrar el código relacionado a la actividad, en una entrada anterior expliqué ampliamente las rutinas de filtros básicos, en esta actividad también se utilizan, si lo desean pueden consultar la entrada


para entender un poco mejor los filtros, ahora incluyo sólo las rutinas de convolución discreta y detección de bordes


Medición del rendimiento


Para medir el rendimiento fue necesario realizar pruebas 30 veces para medir el tiempo que tardaba la aplicación en terminar de aplicar las fórmulas, los resultados fueron los siguientes

Gráfico imágen vs. corrida vs. tiempo


Promedios:
  • Imagen 1 (figuras):
    • Tamaño: 500x389
    • Tiempo: 169.223000 segundos
  • Imagen 2 (circuito): 
    • Tamaño: 523x210
    • Tiempo: 94.315333 segundos
  • Imagen 3 (horno 3): 
    • Tamaño: 320x240
    • Tiempo: 69.448333 segundos

Interfaz


Se agregaron también nuevas características a la interfaz, se quitarón los botones y las opciones se agruparon por menús. Ahora también es posible observar la imagen original vs. la imagen modificada.



Los menús contienen las opciones de:
  • File
    • Abrir
    • Guardar
    • Salir
  • Filters
    • Escala de grises
    • Difuminado
    • Negativo
    • Umbral
    • Sepia
  • Image
    • Se agregaran cosas como girar, espejear, cambiar tamaño
  • Advanced
    • Agregar ruido
    • Diferencia
    • Convolución 2D (agregar una imágen)
  • Machine Vision
    • Detección de bordes
  • Undo
    • Deshacer todos los cambios.
Por medio de sliders se controlan:
  • Cantidad de ruido a agregar
  • La intensidad del ruido agregado
  • Los umbrales inferior y superior
  • Se agregará la opción de agresividad de la limpieza de ruido.

1 comentario: