March 4, 2013

Detección de círculos

Este post trata sobre detección de centros de círculos en imágenes y apartir de estos centros detectar los círculos. Destacando que el radio de los círculos se conoce de antemano.

Para realizar esto, el proceso es muy similar al de detección de líneas ya que se utiliza de la transformada de Hough pero enfocada a círculos.

De igual manera en que las líneas tienen su fórmula en base de senos y cosenos, los círculos tienen sus fórmulas:

Donde:
  • "a" y "b" son las coordenadas del centro del círculo.
  • "x" y "y" son los puntos de la circunferencia en determinado ángulo.
Para obtener el centro de un círculo se toman como base estas fórmulas, lo que se hace es calcular posibles centros y las coordenadas que tengan una mayor frecuencia serán el centro del círculo. Por lo que es necesario despejar las fórmulas de tal manera que a partir de los puntos de la circunferencia se calculan los posibles centros:


Para obtener los ángulos se utilizan los gradientes de la imagen (en x y en y) utilizando máscaras de convolución, en caso de que no sepan qué es o no recuerden pueden consultar este post anterior. Una forma de obtener el seno y coseno del ángulo es la siguiente:


En mi código hice uso del módulo atan2 para obtener el ángulo, al cual se le pasa como parámetro el gradiente en y y el gradiente en x en ese orden; esto lo hice ya que probando las dos maneras ésta fue la que me dió un mejor resultado

Una vez teniendo los posibles centros junto con sus frecuencias, lo que hice fue sumar obtener un promedio de todas las frecuencias y restarselo al valor máximo para de esta manera obtener un umbral y descartar los posibles centros que no sobrepasaran ese umbral.

Cada centro es etiquetado y a cada circunferencia es coloreada de un tono amarillo distinto.

Cabe aclarar que tomé como base el código realizado por la Dra. Elisa.

Código





Pruebas

Imagen Original

Detección


Imagen Original

Detección

Como se puede observar en las pruebas, la detección nos es muy precisa ya que para obtener los posibles centros lo que hice fue redondear las cantidades a números múltipos de 10 por lo que no obtiene el verdadero centro y al momento de calcular el umbral como se puede apreciar en la primera prueba resulta muy bajo y provoca que se detecte otro centro.

Fuentes


1 comment:

  1. Habría que filtrar los centros fantasma. En la explicación, primero observas correctamente que no hace falta calcular theta y luego-luego calculas theta... Desesperante... 4 pts.

    ReplyDelete