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:
Referencias: