def remove_small_blobs(centers_of_mass, segmentation_layer):
"""
removes non-overlapping pixel-islands and cell centres (centers_of_mass)
:param segmentation_layer: NxM ndarray image mask of all target objects
:param centers_of_mass: a np ndarray of x,y coordinates for the center of each target object
:return updated_labels:
"""
labels, label_number = ndimage.label(segmentation_layer) # label all pixel islands
updated_labels = np.zeros_like(labels)
centers_of_mass_to_keep = np.zeros(len(centers_of_mass)) # holder
for i in range(label_number):
idx = np.where(labels == i+1)
for j, c in enumerate(centers_of_mass.astype(int)):
if labels[c[0], c[1]] == i+1: # if the center_of_mass is in the blob
updated_labels[idx] = 1 # add the blob
centers_of_mass_to_keep[j] = 1 # add the center_of_mass
centers_of_mass_idx = np.where(centers_of_mass_to_keep == 1)
updated_centers_of_mass = centers_of_mass[centers_of_mass_idx]
return updated_labels, updated_centers_of_mass
评论列表
文章目录