__all__ = ["get_centroids"]
import numpy as np
import ants
from ants.decorators import image_method
@image_method
def get_centroids(image, clustparam=0):
"""
Reduces a variate/statistical/network image to a set of centroids
describing the center of each stand-alone non-zero component in the image
ANTsR function: `getCentroids`
Arguments
---------
image : ANTsImage
image from which centroids will be calculated
clustparam : integer
look at regions greater than or equal to this size
Returns
-------
ndarray
Example
-------
>>> import ants
>>> image = ants.image_read( ants.get_ants_data( "r16" ) )
>>> image = ants.threshold_image( image, 90, 120 )
>>> image = ants.label_clusters( image, 10 )
>>> cents = ants.get_centroids( image )
"""
imagedim = image.dimension
if clustparam > 0:
mypoints = ants.label_clusters(image, clustparam, max_thresh=1e15)
if clustparam == 0:
mypoints = image.clone()
mypoints = ants.label_stats(mypoints, mypoints)
nonzero = mypoints[["LabelValue"]] > 0
mypoints = mypoints[nonzero["LabelValue"]]
mypoints = mypoints.iloc[:, :]
x = mypoints.x
y = mypoints.y
if imagedim == 3:
z = mypoints.z
else:
z = np.zeros(mypoints.shape[0])
if imagedim == 4:
t = mypoints.t
else:
t = np.zeros(mypoints.shape[0])
centroids = np.stack([x, y, z, t]).T
return centroids