def get_centers_of_mass_from_blobs(segmentation_layer, iterations=3):
"""
Determine the centers of each object in an image
::param segmentation_layer: NxM ndarray image mask of all target objects
::param iterations: threshold for removal of small non-target objects
::return centers_of_mass: a np ndarray of x,y coordinates for the center of each target object
"""
segmentation_layer = ndimage.binary_opening(segmentation_layer, iterations=iterations) # remove small objects
labels, label_number = ndimage.measurements.label(segmentation_layer) # label remaining blobs
centers_of_mass = np.zeros((label_number, 2))
for i in range(label_number):
idx = np.where(labels == i+1) # calculate the center of mass for each blob
centers_of_mass[i, 1] = np.mean(idx[1].astype(float)) # must be float
centers_of_mass[i, 0] = np.mean(idx[0].astype(float)) # must be float
return centers_of_mass
评论列表
文章目录