12 de abril de 2013

Detección de Elipses

Visión Computacional
Tarea 5

Para esta tarea se nos pidió escribir un programa para la detección de elipses, usando python y algunas librerías básicas de utilidad como PIL, ImageDraw y math.

El método usado para la detección de elipses fue el llamado Cuerda-Tangente, que es fácil de entender, y que con la siguiente imagen es posible darse una idea de que se tiene que hacer.


  • Lo primero que tenemos que hacer es detectar todo el contorno de una figura.
  • De los puntos encontrados que forman parte de la figura, se tomarán dos puntos al azar.
  • Estos dos puntos, P1 y P2, se unen con una línea que atraviesa el posible elipse, y el centro de esa línea se denomina M.
  • Desde los puntos P1 y P2, para cada uno de ellos se encuentra una recta tangente.
  • Las dos rectas tangentes se unen en un punto del espacio (siempre y cuando no sean paralelas), al cual llamamos T
  • Ahora desde T trazamos una línea recta que pasa por el punto M, y se extiende hasta tocar un borde de la figura.
  • Desde el punto M hasta donde se extiende la línea antes de tocar el contorno, es donde se encuentra nuestro centro del elipse.

Computacionalmente usamos esta ventaja de saber en que zona es donde el centro del elipse debe de estar, y mediante un programa que recorra varios pares de puntos y se hagan los pasos anteriores, es posible encontrar el punto por el cual más líneas los atravesaron y determinar mediante la obtención de los semidiámetros si se trata de un elipse o no.

Muestra de detección


A continuación una serie de capturas de imágenes después de la detección de contornos continuos mediante BFS y la imágenes después de la detección de elipses.







Código



Se creo una rutina sencilla para el conteo de votos, y elegir el centro más votado en cada elipse por separado. Y se añadieron también rutinas ya usadas anteriormente como la del método de convolución, búsqueda BFS y detección de formas.


Código completo en mi repositorio de Visión Computacional


Referencias:
Machine Vision, Fourth Edition: Theory, Algorithms, and Practicalities

1 comentario:

  1. Se me hace que el código de def search_ellipse(...) es incompleto. No se alcanza a ver la parte donde los votos se generan y procesan. 4 pts.

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.