Lo primero que tenemos que realziar es detectar los bordes de la imagen, en anteriores post hemos hablado de como se realiza esto.
Ellipse normal :
Detectando sus bordes y binarizandola queda de la siguiente manera:
Lo primero que se tiene que hacer es leer todo los bordes de la figura, posterioremente se creo un filtro de los mismos puntos de los bordes, con respecto a los diferentes gradientes para que no exista pixeles sin ninguna dirección o ángulo.
Aquí el código1:
Ya teniendo este filtro se procede hacer las iteraciones para sacar el centro del ellipse, entre mas iterraciones es mas seguro encontrar las ellipeses.
Al iniciar se van seleccionando dos pares de pixeles, estos pixeles se eligen con pendientes diferentes a ceros, ademas que se busca que las pendientes una sea positiva y otra negativa para el sentido de la orientación y con un rango de valores especificos.
Aquí el código 2:
La pendiente como se puede observar se saca usando los gradientes que significan el cambio de movimiento de los pixeles, y la pendiente es su inclinacion
pendiente = gradiente y / gradiente x
Ya teniendo las pendientes se pasan a sacar la ecuacion de la recta para sacar nuestra tangente para ambos casos, para esto se realiza lo siguiente:
Primero se sabe que la ecuacion de la recta tiene esta forma : y = ax + b, donde a es la pendiente y b e sla intersseccion en el eje y. Bueno para sacar el valor de la interseccion se puede hacer lo siguiente:
P = y2 - y1 / x2 - x1,
Donde usaremos siempre en "x1" e "y1" el valor de los pixeles donde se usaron sus gradientes para sacar la pendiente.
Para hacer la recta solo es necesario ir sustituyendo los valores, para ir sacando nuevos valores de "x2" e "y2" y realizar la línea. Teniendo cada uno de los puntos una misma pendiente.
Aquí el código 3
Aquí el código 3
Y aquí una imagen mostrando lo que paso en la imagen:
-
-
Posteriormente se saca una recta con respecto a las dos tangentes generadas en la intersección donde estos se juntan y se toma una votación apartir de la unión de los puntos que se usaron para la generación de la tangente.
-
-
Si nos fijamos bien los mayores puntos se enceuntran en el medio, es por eso que se utiliza la votación.
Aquí el código 4
Aquí el código 4
Y se repite nuevemente el proceso guardando todos los votos en un diccionario y al final elegir el punto con mas votos y ese punto es nuestro centro de la ellipse. Para sacar lso focos solo es necesario recorrer del punto a la izquierda y a la derecha para medir la longuitud y sacar los focos.
Aquí el código de esto
Aquí el código de esto
Resultado final:
Varias imagenes de diferentes pruebas:
Donde el centro es el cuadro verde y los rojos sus correspondientes focos
Original
Final
Gracias eso es todo
Aqui unas paginas sobre rectas y gradientes
OK; 5 pts.
ResponderEliminar