Para la detección de elipses, en la tarea de laboratorio se pidió realizar lo siguiente:
- Identificar cada círculo o elipse individual
- Rellenarlo de un color aleatorio
- Marcar su centro con un punto e ID con etiqueta
- Imprimir un listado de las áreas de los círculos o elipses
- En porcentaje de la imagen completa.
Para hacerlo, utilicé el mismo código que la entrada de la clase, pero limitandolo a la localización del centro del elipse. Conociendo el centro, se puede aplicar un recorrido BFS desde ese punto a sus vecinos de color similar, hasta pintar todo el interior del elipse o círculo en cuestión.
Con el mismo recorrido además contamos cuantos pixeles tiene en su interior el elipse o círculo. Así obtenemos un área aproximada, la cual estimamos su porcentaje en cuanto al total de la imagen, el total siendo el número de pixeles totales de la imagen (ancho x largo).
Código
El código es básicamente el mismo que la entrada de clase, modificado para al localizar un centro y comprobar que es una elipse/círculo aplicar bfs a los pixeles del mismo color que el centro.
Ejemplos:
Estoy segura que esto no es una manera muy óptima de validar si algo es un elipse:
ResponderEliminarfor point in coords:
for p in elipse:
if p == point:
#print p, point
c += 1
total = len(elipse)
porcentaje = (c / float(total) ) * 100.0
#print porcentaje
if porcentaje < 80.0:
return True
else:
return False
Además hubiera estado padre determinar cuáles sí son círculos.
9 pts.