Segmentación de imágenes basada en el mapa de píxeles de borde

He entrenado un clasificador en Python para clasificar píxeles en una imagen de celdas como borde o no borde. Lo he usado con éxito en algunos conjuntos de datos de imágenes, pero me estoy topando con problemas con este conjunto de datos en particular, que parece bastante ambiguo incluso para el ojo humano. No conozco ninguna técnica automatizada existente que pueda segmentarla con precisión.

Después de la predicción obtengo la siguiente imagen:

Imagen de predicción

Soy relativamente nuevo en el procesamiento de imágenes y no estoy seguro de cómo proceder para obtener realmente las segmentaciones finales de las celdas. He intentado brevemente algunas técnicas diferentes, a saber, la transformación circular de Hough, los conjuntos de niveles, la esqueletización, el hallazgo de contornos, pero ninguno realmente ha hecho el truco. ¿Simplemente no estoy ajustando los parámetros correctamente o hay una técnica mejor por ahí?

Aquí están los contornos correctos, por cierto, como referencia.

Contornos correctos

Y la imagen original:

introduzca la descripción de la imagen aquí

Y el mapa de probabilidad continua:

Mapa de probabilidad continua

Al ver la imagen del píxel de bordes / no bordes en el clasificador, podemos ver que la imagen de gradiente de su entrada ya básicamente da el resultado del clasificador que ha aprendido. Pero el mapa de confianza muestra una buena solución, excepto que: 1. son conjuntos de niveles conectados, con diferentes tamaños. 2. tiene puntos shinys ruidosos en las celdas que causan salidas falsas del clasificador. (tal vez podría considerarse algún ajuste) 3. Supongo que probablemente sería más fácil caracterizar el interno de cada celda: las variaciones de escala de grises, el tamaño promedio. Aprender estas distribuciones probablemente le proporcionará mejores resultados de detección. Topológicamente tenemos un conjunto de valores de escala de grises bajos nesteds en valores de escala de grises grandes. Para realizar esto, se podría utilizar Graphcuts con el modelo GMM para los costos unitarios y una distribución de gradiente aprendida para el término de pares

Creo que tu transformada de Hough es una buena idea. Una cosa que deberías intentar (si no lo has hecho ya) es poner un umbral a tu imagen antes de ejecutarla a través de tu formulario, aunque el artículo que acabo de enlazar parece ser solo un umbral binario. Lo que esto podría hacer es exagerar las diferencias entre el borde y el fondo, por lo que podría ser más fácil de detectar. Básicamente, aplique una función (en la forma de un filtro que funcione con el valor del píxel) a cada píxel.

Otra cosa que puedes probar son los contornos activos . Básicamente, colocas algunos círculos y se mueven a través de la imagen hasta que encuentran lo que estás buscando.

Mi última idea es tal vez intentar una transformada wavelet . Estos parecen funcionar bastante bien para seleccionar límites y bordes en imágenes. Espero que estas ideas puedan ayudarte a comenzar.