jueves, 7 de marzo de 2013

Actividad #5 Laboratorio - Detección de círculos con diferentes tamaños

Esta actividad es lo mismo que la de la clase, lo único diferente es que ahora necesitamos poder detectar círculos con diferentes tamños (radios).

El procedimiento es el mismo, que ya se había mencionado en la entrada anterior:

  • Se calculan los gradientes para cada píxel en la imagen, usando las técnicas empleadas en detección de bordes. Utilizando las máscaras de Sobel, ya que al parecer estas dan mejores resultados para este tipo de trabajo sobre las de Prewitt.

  • Después se calculan los valores de cos y sen de theta utilizando los valores de los gradientes, sin necesariamente calcular el valor del angulo, esto por:


  • Ya con lo anterior se procede a calcular los centros que puede contener la imagen con las siguientes formulas:


Los valores obtenidos en los posibles centros se van almacenan, y se lleva una especie de conteo de que tan frecuente puede ser un centro, los más frecuentes es más posible que sean centros verdaderos, se usa un pequeño umbral para mejorar los resultados y para pintar los círculos solo se checa si se encuentra en la lista de los más frecuentes(que previamente se analizó con el umbral para sacar los no tan frecuentes).

Pero ahora con una variante para poder encontrar diferentes tamaños de círculos, esto añadiendo un ciclo para que evalúe las condiciones anteriores dentro de un rango que el programa toma como parámetro(valor inicial y valor final). 

El código:


Resultado:



Al igual que en la tarea de la clase el resultado no es el esperado ya que solo debería de reconocer los tres círculos más grandes debido a que se usó un rango de 15 a 30. Además de que no pinta exactamente en el centro de los círculos, si no los pinta a un lado.

Enlace a mi git.

_________________________________________________________________________________
Referencias:

martes, 5 de marzo de 2013

Detección de Círculos

La tarea es, dada una imagen hay que encontrar los círculos en ella y marcarlos.

Los pasos para lograr esta actividad son sencillos:

  • Se calculan los gradientes para cada píxel en la imagen, usando las técnicas empleadas en detección de bordes. Utilizando las máscaras de Sobel, ya que al parecer estas dan mejores resultados para este tipo de trabajo sobre las de Prewitt.

  • Después se calculan los valores de cos y sen de theta utilizando los valores de los gradientes, sin necesariamente calcular el valor del angulo, esto por:


  • Ya con lo anterior se procede a calcular los centros que puede contener la imagen con las siguientes formulas:


Los valores obtenidos en los posibles centros se van almacenan, y se lleva una especie de conteo de que tan frecuente puede ser un centro, los más frecuentes es más posible que sean centros verdaderos, se usa un pequeño umbral para mejorar los resultados y para pintar los círculos solo se checa si se encuentra en la lista de los más frecuentes(que previamente se analizó con el umbral para sacar los no tan frecuentes).

El código:


Los resultados:






Los resultados no fueron los esperados ya que no identifica correctamente la posición de los círculos, además por cierta razón identifica todos los círculos, cuando solo debería de identificar uno, el de la esquina inferior derecha que es el cuenta con el radio de 30 que se toma como parámetro al ejecutar el código.

Enlace a mi git.
_________________________________________________________________________________Referencias: