jueves, 18 de abril de 2013

[Lab VC] Actividad 5: Detección de elipses

Para la actividad de laboratorio se debió programar el código para detección de círculos.
Los requisitos de la actividad son:

  • Identifica cada elipse/círculo individual
  • Rellénalo de un color aleatorio
  • Sigue marcando su centro con bolita & ID con etiqueta
  • Imprime un listado de los áreas de los círculos/elipses
    • En porcentaje de la imagen completa

Teoría

Para la detección de elipses se utilizó el método de cuerda-tangente, el procedimiento para aplicarlo se describe en la siguiente entrada:



Mejoras

Se mejoró el método para detectar ellipses, anteriormente hacía una búsqueda exhaustiva comparando todas las posibles combinaciones de pares de puntos para sacar los pixeles sujetos a votación y posteriormente ubicar el centro.
Ahora simplemente ordeno la lista de pixeles de los bordes por la coordenada Y, después hago una copia de la lista pero la ordeno al reves. Asi me quedan 2 listas con los pixeles ordenados en la coordenada Y pero una esta ordenada al reves.
Después, dado que tienen el mismo número de elementos, con un mismo ciclo recorro ambas listas tomando un punto de cada una, calculando las tangentes de los puntos y todo lo demás para obtener los votos.
Con éste cambio ahorro mucho tiempo de ejecución y además se mejoró un poco la precisión para hallar los centros, aunque todavía falta refinar más.

Ejemplo de detección con el nuevo método


Resultados de la actividad

Las imagenes utilizadas para las pruebas fueron las siguientes:

Original
Binarizada
Contornos



Los resultados de la detección y rellenado de pixeles fueron los siguientes:

Elipses con su área

 Elipses con su área


Código

En el repositorio encuentran la implementación completa en código, la carpeta marcada como Tarea 6.

https://github.com/jcespinosa/vision_computacional

Dado que es el mismo código que antes, solo incluyo la nueva rutina para detectar elipses:

Fin de la actividad

1 comentario: