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"]
Esta vez debido se diferenciara entre círculos y debido a que un circulo es una elipse con características especificas el mismo código puede ser útil
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
Original:
Salida:
max@max-laptop:~/Dropbox/vision_computacional/lb6$ python ellipse.py lb-2.png
Porcentaje del area de las figuras respecto a la imagen:
Circulo encontrado: C1:
Porcentaje del area: 26.2502462327
Tiempo de corrida: 6.94555902481


Original:
max@juan-laptop:~/Dropbox/vision_computacional/lb6$ python ellipse.py lb-3.png
Porcentaje del area de las figuras respecto a la imagen:
Ellipse encontrado: E1:
Porcentaje del area: 16.8737886667
Tiempo de corrida: 3.23047399521
Salida:Original:
Salida:
max@juan-laptop:~/Dropbox/vision_computacional/lb6$ python ellipse.py lb-1.png
Porcentaje del area de las figuras respecto a la imagen:
Circulo encontrado: C1:
Porcentaje del area: 9.28058376671
Ellipse encontrado: E2:
Porcentaje del area: 7.66990393943
Circulo encontrado: C3:
Porcentaje del area: 4.90873852123
Ellipse encontrado: E4:
Porcentaje del area: 8.89708856974
Tiempo de corrida: 5.71808099747
Referencias:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/elipses.pdf







Bien; 10 pts.
ResponderBorrar