def centroid(im, labels, return_mm3=True):
"""
Centroid (center of mass, barycenter) of a list of labels.
:param im:
:param labels: list of labels, e.g. [3] or [2, 3, 45]
:param return_mm3: if true the answer is in mm if false in voxel indexes.
:return: list of centroids, one for each label in the input order.
"""
centers_of_mass = centroid_array(im.get_data(), labels)
ans = []
if return_mm3:
for cm in centers_of_mass:
if isinstance(cm, np.ndarray):
ans += [im.affine[:3, :3].dot(cm.astype(np.float64))]
else:
ans += [cm]
else:
for cm in centers_of_mass:
if isinstance(cm, np.ndarray): # else it is np.nan.
ans += [np.round(cm).astype(np.uint64)]
else:
ans += [cm]
return ans
评论列表
文章目录