Si la salida de su filtro Gábor es confiable y la variación en sus datos de imagen no es tan alta como para que el resultado se vea completamente diferente, entonces puede usar el siguiente enfoque (partes de él donde ya se mencionó):
Binarice su segunda imagen con cualquier algoritmo de umbral automático. El rango de umbrales que funcionará es grande como verá.
Use un algoritmo de etiquetado de componentes para etiquetar cada región de píxel conectada con un valor único.
Calcule para cada componente de su imagen una propiedad que describa qué tan cerca está su objeto de un círculo relleno. Para esto, puede usar, por ejemplo, la compacidad . Usé debajo de la fracción de píxeles dentro del radio de disco equivalente . Este radio es el radio de un disco con la misma área que tendría su objeto.
- El área simplemente cuenta el número de píxeles de su objeto
- Calcular el radio de un círculo dada su área también debería ser manejable
- Para el píxel dentro de este radio, necesita el centro de cada objeto de imagen, pero esta es solo la media de todas las posiciones de los píxeles del objeto. Si usted es físico, entonces conoce el centro de masa de varios puntos de masa. Esto es equivalente
- Ahora calcula para cada píxel de cada objeto la distancia desde su centro y verifica si es más pequeño o no que el radio del círculo. Al dividir los dos números, obtienes la fracción de píxel interno y externo.
- Toma el objeto con la fracción más alta. Nota: los objetos con un solo píxel obtendrán un valor de 1. Por lo tanto, debe establecer un umbral de tamaño y tomar solo objetos más grandes, digamos 10 píxeles.
Para ver que una binarización automática debería funcionar, aquí están los resultados para un umbral muy bajo y muy alto:
Actualizar etiquetado de componentes
La elección del etiquetado de componentes no es crítica para su aplicación. Sugeriría, si tiene que implementarlo usted mismo, usar un método muy simple. La versión de un paso del sitio de Wikipedia es muy fácil. Básicamente, usted itera a través de su imagen binaria y cuando encuentra un píxel que es blanco y aún no está etiquetado, usa una nueva etiqueta para este objeto y comienza con este píxel.
El proceso de etiquetar este objeto con una etiqueta es básicamente similar a un relleno de inundación. Esto está en el sitio de Wikipedia los pasos internos 1-4 en el algoritmo. Comienza con este píxel etiquetado y coloca a todos sus vecinos en una pila (usaron un vector ). Para un píxel en la pila, verifica si está en primer plano y no está etiquetado. Si tiene que etiquetarlo, vuelve a poner todos sus vecinos en la pila. Haga esto hasta que su pila esté vacía.
Luego continúa escaneando la imagen. A diferencia de la descripción en el sitio Wiki, no tiene que eliminar un píxel de su imagen original, simplemente omite cuando tiene un valor diferente de 0 en su imagen de etiqueta.