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
Liga al repositorio: https://github.com/jcespinosa/vision_computacional
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.
Muy completo. El uso de GIFs es muy informativo. 5 pts.
ResponderEliminar