Extraer objetos conectados de una imagen en Python

Tengo una imagen de png de graysacle y quiero extraer todos los componentes conectados de mi imagen. Algunos de los componentes tienen la misma intensidad, pero quiero asignar una etiqueta única a cada objeto. aqui esta mi imagen

introduzca la descripción de la imagen aquí

He intentado este código:

img = imread(images + 'soccer_cif' + str(i).zfill(6) + '_GT_index.png') labeled, nr_objects = label(img) print "Number of objects is %d " % nr_objects 

Pero solo obtengo tres objetos usando esto. Por favor, dime cómo conseguir cada objeto.

JF Sebastian muestra una forma de identificar objetos en una imagen. Sin embargo, requiere elegir manualmente un radio de desenfoque gaussiano y un valor de umbral:

 import scipy from scipy import ndimage import matplotlib.pyplot as plt fname='index.png' blur_radius = 1.0 threshold = 50 img = scipy.misc.imread(fname) # gray-scale image print(img.shape) # smooth the image (to remove small objects) imgf = ndimage.gaussian_filter(img, blur_radius) threshold = 50 # find connected components labeled, nr_objects = ndimage.label(imgf > threshold) print "Number of objects is %d " % nr_objects plt.imsave('/tmp/out.png', labeled) plt.imshow(labeled) plt.show() 

introduzca la descripción de la imagen aquí

Con blur_radius = 1.0 , esto encuentra 4 objetos. Con blur_radius = 0.5 , se encuentran 5 objetos:

introduzca la descripción de la imagen aquí

Si el borde de los objetos es completamente claro y tiene una imagen binaria en img, puede evitar el filtrado gaussiano y simplemente hacer esta línea:

 labeled, nr_objects = ndimage.label(img)