martes, 5 de marzo de 2013

Detección de círculos

La detección de círculos es muy importante en aplicaciones como la inspección
automática de productos que son manufacturados, la vectorización asistida de dibujos, la detección de
objetivos, etc. La detección de círculos en imágenes se hace con el método de la transformada circular de Hough.
Lo malo de este método es que es computacionalmente muy pesado.


http://sathyakumar-spark.blogspot.mx/2011/10/circle-detection-using-opencv.html

Para hacer el algoritmo se modifico el código de las líneas, pero en este código se usan los gradientes para poder calcular el angulo y poder usar ese punto como si ya fuera del circulo. Entones se obtiene un centro para cada punto, y luego se dice que es circulo cuando hay muchos píxeles que coinciden que se centro es ese mismo punto.
Usaremos otra vez el gradiente:


Luego se usa cos(Θ) = gx / g y sin(Θ) = gy / g, y con eso podemos después encontrar los posibles centros del circulo con las formulas: 
xc = int(round(x - radio * cos(Θ)))

yc = int(round(y - radio * sin(Θ)))

Aquí algunos resultados:

radio 30, tiempo 50 segundos


radio 50, tiempo 54 segundos 



radio 90, tiempo 1 minuto y 22 segundos


Código:



Referencias

Diapositivas y ejemplo

1 comentario:

  1. Quedó bien; 5 pts. Faltó imprimir la lista, pero a Emmanuel le faltó eso también.

    ResponderEliminar