Puede hacer esto en Python usando la biblioteca OpenCV.
En particular, usted estará interesado en las siguientes características:
- histograma de estiramiento (
cv.EqualizeHist
). Esto es missing de la API actual de Python, pero si descarga la última versión SVN de OpenCV, puede usarla. Esta parte es para propósitos de la pantalla, no se requieren para obtener el mismo resultado
- image thresholding
- operaciones morfológicas tales como erode (también dilatan, abrir, cerrar, etc)
- determinar el contorno de una burbuja en una imagen binaria usando cv.FindContours - vea this question. Está utilizando C, no Python, pero las API son prácticamente las mismas, de modo que puede aprender mucho de allí
- Segmentación de cuencas (use
cv.Watershed
- exists, pero por alguna razón no puedo encontrarlo en el manual)
con esto en mente, aquí es como me gustaría utilizar OpenCV para obtener los mismos resultados que en el artículo de MATLAB:
- umbral de la imagen usando un umbral determinado empíricamente (o método de Ohtsu)
- Aplicar dilatación a la imagen para llenar los vacíos. Opcionalmente, falta de definición de la imagen antes de la etapa de umbral anterior - que también eliminar pequeñas "agujeros"
- Determinar contornos usando
cv.FindContours
- Opcionalmente, paint the contours
- Utilizando la información blob, iterar sobre cada blob en el originales imagen y aplicar un umbral diferente para cada nota para separar los núcleos de las células (esto es lo que su funcionamiento está haciendo
imextendedmax
)
- Opcionalmente, la pintura en los núcleos
- Aplicar la cuenca transformada
No he probado nada de esto (lo siento, no tengo tiempo ahora), por lo que aún no puedo mostrarle ningún código. Sin embargo, de acuerdo con mi experiencia con OpenCV, estoy seguro de que todo hasta el paso 7 funcionará bien. Nunca he usado la transformada watershed de OpenCV antes, pero no veo una razón para que no funcione aquí.
Pruebe a seguir los pasos que he mostrado y díganos si tiene algún problema. Asegúrese de publicar su fuente de esa manera, más personas podrán ayudarlo.
Por último, para responder a su pregunta sobre la tinción de las células y cuantificar su presencia, es bastante fácil conocer los tintes que está utilizando. Por ejemplo, para determinar las células teñidas con colorante rojo, extraería el canal rojo de la imagen y examinaría las áreas de alta intensidad (tal vez mediante el umbral).
seguro de cómo tomar este que está en espera, pero trató de edición para hacer frente a la (en lugar nitpicking e incorrecta) "off -topic "marcando. –
@bluefeet: ¿por qué estaba cerrado? Es una pregunta específica, con dos respuestas específicas a continuación. Edité la parte pidiendo una recomendación. –
@thouis ¿Por qué estaba cerrado? Porque es una pregunta demasiado amplia y también está pidiendo una biblioteca. Su edición para eliminar la última línea básicamente invalida cada respuesta en esta pregunta que solo apunta a un enlace. Cerrar una pregunta no significa que se eliminará, pero esta pregunta tal como está escrita no está relacionada con el tema. – Taryn