Detección de elipses
La detección de elipses es muy útil en la rama de visión computacional, puede utilizarse para detectar círculos distorsionados en un caso real de uso, para detectar la forma de un rostro o cualquier cosa circular.
Para este reporte mi implementación se basa en un método que utiliza las lineas tangentes las lineas del contorno del elipse, esto con la premisa de que utilizando estas lineas y los puntos al cual son tangentes las mismas, se puede calcular una linea que pasa por el centro de la elipse.
[Image obtenida de:"http://ars.els-cdn.com/content/image/1-s2.0-S0957417410014612-gr2.jpg"]
A grandes rasgos los pasos de mi implementación son los siguientes:
- Se detecto el borde de la imagen utilizando mascaras de convolución de Sobel tal como se hizo en la tarea 1.

- Después se agruparon los bordes utilizando el algoritmo BFS de recorrido en grafos, esto con el fin de eliminar el ruido en el calculo.
- Después de manera aleatoria se eligieron parejas de pixeles en borde, cuidando que estos no tengan el mismo gradiente de cambio (El mismo gradiente utilizado para detectar bordes), y cuidando que fueran del mismo grupo.
- Por cada pareja se calcula:
- La recta tangente para cada pixel, esto utilizando el gradiente siendo $G_{y}$ y $G_{x}$ los lados de un triangulo se calcula la pendiente de la recta de la forma $m = \frac{G_{y}}{G_{x}}$, teniendo la pendiente y el punto por el que pasa es fácil calcularla.
- Después se calculó el punto medio $tl2$ que es el punto en el cual se cruzan las rectas.
- Después se calculó el punto medio entre los pixeles elegidos $ml2$.
- Teniendo esto se calculó una recta que pasa por los puntos $ml2$ y $tl2$, la cual pasa por el centro del ellipse.
- Se dibuja una linea que pase por el centro.

- Una vez teniendo una gran cantidad de lineas dibujadas, se toman los puntos en los cuales se crucen mas lineas como centros de elipses.
- Después se calculan las magnitudes de los elipses, utilizando los pixeles bordes y buscando los pixeles horizontales y verticales para encontrar las magnitudes del rectángulo que rodea la elipse.
Código
Resultado
Imagen original:
Salida:
max@max-laptop:~/Dropbox/vision_computacional/tarea5$ python ellipse.py ellipse.png
1
Porcentaje de diagonales de las ellipses respecto al digonal de la imagen:
E1:
Diagonal horizontal: 7.40740740741
Diagonal vertical: 7.40740740741
Tiempo de corrida: 0.608282089233
Imagen original:
max@max-laptop:~/Dropbox/vision_computacional/tarea5$ python ellipse.py ellipses.png
4
Porcentaje de diagonales de las ellipses respecto al digonal de la imagen:
E1:
Diagonal horizontal: 2.95138888889
Diagonal vertical: 2.95138888889
E2:
Diagonal horizontal: 3.125
Diagonal vertical: 3.125
E3:
Diagonal horizontal: 4.34027777778
Diagonal vertical: 4.34027777778
E4:
Diagonal horizontal: 2.08333333333
Diagonal vertical: 2.08333333333
Tiempo de corrida: 0.995491027832
Referencias:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/elipses.pdf




Es hermoso :,) 5 pts
ResponderBorrar