Detectar objetos sobre un fondo blanco en Python.

Estoy tratando de usar Python para detectar cuántos objetos hay en una superficie blanca. Una imagen de ejemplo se encuentra al final de esta publicación.

Me pregunto cómo debo hacer esto, principalmente porque el fondo es blanco y la mayoría de las veces se detecta como primer plano.

Lo que tengo ahora en Python basado en este tutorial ( http://pythonvision.org/basic-tutorial ) usa varias bibliotecas y detecta el blanco cuando el objeto cuenta 1, las herramientas se detectan como fondo y, por lo tanto, se ignoran:

dna = mahotas.imread('dna.jpeg') dna = dna.squeeze() dna = pymorph.to_gray(dna) print dna.shape print dna.dtype print dna.max() print dna.min() dnaf = ndimage.gaussian_filter(dna, 8) T = mahotas.thresholding.otsu(dnaf) labeled, nr_objects = ndimage.label(dnaf > T) print nr_objects pylab.imshow(labeled) pylab.jet() pylab.show() 

¿Hay opciones para obtener la parte blanca como fondo y las herramientas como primer plano?

¡Gracias por adelantado!

    Imagen de ejemplo: introduzca la descripción de la imagen aquí

    La imagen segmentada donde el rojo es el primer plano y el fondo azul (las pocas herramientas que se fusionan no son un problema):

    introduzca la descripción de la imagen aquí

    Si la sombra no es un problema.

    Puede etiquetar las imágenes en mahotas ( http://mahotas.readthedocs.org/en/latest/labeled.html ) dada esta imagen binaria. También puede usar skimage.morphology (que usa ndlabel como se mencionó en los comentarios). http://scikit-image.org/docs/dev/auto_examples/plot_label.html

    Estos son ejemplos de algoritmos de componentes de conexión y son estándar en cualquier paquete general de procesamiento de imágenes. ImageJ también hace esto bastante simple.

    Si la sombra es un problema.

    El umbral de Otsu devuelve un solo valor: el brillo de un píxel, y todo lo que está haciendo es mantener todos los píxeles que sean más débiles que este umbral. Este método se ve afectado por sus sombras, por lo que debe probar otro algoritmo de segmentación, preferiblemente uno que realice una segmentación local (es decir, segmenta pequeñas regiones de la imagen individualmente).

    Los métodos adaptativos o locales no tienen este problema y serían muy adecuados para las sombras de su imagen:

    http://scikit-image.org/docs/dev/auto_examples/plot_threshold_adaptive.html#example-plot-threshold-adaptive-py

    En mahotas debería haber otros métodos de segmentación, pero solo conozco scikit-image. Si desea obtener una descripción general seria sobre la segmentación, consulte este documento: https://peerj.com/preprints/671/

    Revelación completa, es mi papel.