El método consiste básicamente en primero localizar los bordes del elipse en una imagen, calculandolos con una matriz de convolución. Estos bordes se asumirán elipses, y se buscará calcular su centro, para a partir de él localizar sus semi diámetros.
Para encontrar el centro, utilicé el método de bisección de diámetro (Tsuji & Matsumoto), que consiste en separar los pixeles del borde de un elipse por antiparalelo, usando los gradientes calculados con una convolución. Esto es para que los pixeles puedan estar en lados opuestos.
Teniendo estos separados, se toman dos pixeles opuestos, se calcula su centro imaginando una línea entre ellos, y se hace un acumulador. Repitiendo lo anterior se van sumando las veces que pares de pixeles votan por ese centro. El pixel más votado será el centro.
Ya teniendo el centro, lo siguiente es encontrar los semi diámetros del elipse (A y B). Para ello podemos usar igualmente los pixeles de borde opuestos y agregarlos a una lista, ordenándola utilizando las distancias que existen entre ellos.
La distancia menor será uno de los semi diámetros y la distancia mayor será el otro.
El resultado de usar el algoritmo pasado en una imagen simple con un elipse es el siguiente:
Donde la línea verde es el semi diámetro horizontal, la azul el vertical, y el elipse naranja es el detectado por el programa.
Código:
Ahora, lo que se pidió hacer fue:
- Marcar elipses con tonos naranja.
- Ligeramente diferentes en cada elipse.
- Marcar el centro con un punto azul.
- Al centro de cada elipse agregar una etiqueta con el ID del elipse.
- Imprimir un listado que indica para cada ID los porcentajes de los semi diámetros con respecto a la diagonal máxima de la imagen.
Referencias:
:/ La tarea dice (el PDF) que hay que usar el método cuerda-tangente... 3 pts.
ResponderEliminar