jueves, 7 de marzo de 2013

[VISIÓN COMPUTACIONAL] Lab 5: Círculos con radios desconocidos

Para la tarea de laboratorio de esta semana se encargó detectar círculos con radios desconocidos. La tarea de clase fue detectar círculos con radios fijos. Por razones secundarias no entregué esa tarea, pero la idea era simple y traté de hacerla, hoy muestro el resultado final.

Para detectar un circulo, primero tengo que detectar un objeto, para así poder clasificarlo. Mi idea de detectar círculos se basa en el hecho de que podemos conocer el radio de cualquier circulo tan solo con saber el área del mismo.

Utilicé los centros de masa de cada objeto detectado para crear un circulo fantasma con un radio obtenido de cada área, en este caso la cantidad de pixeles que hay dentro del borde de cada objeto.

Utilicé la siguiente imagen para hacer pruebas:
Invertí el color de la imagen ya que la detección de bordes se basa en el color blanco.

Ahora lo que sigue es detectar los bordes y el área que existe dentro de ellos, para eso, use mi detección de objetos, el resultado es el siguiente:
Los bordes tienen un centro de masa muy similar a la figura, por lo tanto el borde del círculo contiene el centro de masa, con el cual saqué el radio con la siguiente formula:
Por lo tanto la raíz cuadrada de área entre π es el radio.

Conociendo los radios obtenidos con el área, dibujo un circulo fantasma en el centro de cada objeto detectado:
Estos círculos tienen un área aproximada a la de cada objeto.

Ahora lo que hago es calcular el porcentaje de error de cada circulo fantasma, es decir, si están ocupando la misma área que el objeto. El margen de error lo tengo en 6%, cualquier margen de error mayor no es un circulo, al menos desde mi punto de vista, pero puede variar con las imagenes, recordemos que en la pantalla los círculos no son círculos en si, sino que son polígonos con demasiadas caras que parece que tiene un solo lado curvo.

Finalmente coloqué un tag "Circulo" a cualquier cosa que me detectara como círculo.

Al correr el programa este fue el resultado final:
Código utilizado:

Liga del proyecto:
https://github.com/victoralex911/vision-computacional

1 comentario:

  1. Muy heurístico como el de Rodolfo, pero jala bien. 8 pts.

    ResponderEliminar