Los requisitos de la actividad son:
Las imagenes utilizadas para las pruebas fueron las siguientes:- 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
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.
Dado que es el mismo código que antes, solo incluyo la nueva rutina para detectar elipses:
Fin de la actividad
Bien; 10 pts.
ResponderEliminar