--- a +++ b/ants/label/make_points_image.py @@ -0,0 +1,61 @@ + + +__all__ = ['make_points_image'] + +import math +import numpy as np + +import ants + +def make_points_image(pts, target, radius=5): + """ + Create label image from physical space points + + Creates spherical points in the coordinate space of the target image based + on the n-dimensional matrix of points that the user supplies. The image + defines the dimensionality of the data so if the input image is 3D then + the input points should be 2D or 3D. + + ANTsR function: `makePointsImage` + + Arguments + --------- + pts : numpy.ndarray + input points + + target : ANTsImage + Image defining target space + + radius : integer + radius for the points + + Returns + ------- + ANTsImage + + Example + ------- + >>> import ants + >>> import pandas as pd + >>> mni = ants.image_read(ants.get_data('mni')) + >>> powers_pts = pd.read_csv(ants.get_data('powers_mni_itk')) + >>> powers_labels = ants.make_points_image(powers_pts.iloc[:,:3].values, mni, radius=3) + """ + lblimg = target * 0 + npts = len(pts) + dim = target.dimension + if pts.shape[1] != dim: + raise ValueError('points dimensionality should match that of images') + + for r in range(npts): + pt = pts[r,:] + idx = ants.transform_physical_point_to_index(target, pt.tolist() ).astype(int) + in_image=True + for kk in range(target.dimension): + in_image = in_image and idx[kk] >= 0 and idx[kk] < target.shape[kk] + if ( in_image == True ): + if (dim == 3): + lblimg[idx[0],idx[1],idx[2]] = r + 1 + elif (dim == 2): + lblimg[idx[0],idx[1]] = r + 1 + return ants.morphology( lblimg, 'dilate', radius, 'grayscale' )