Source code for ants.ops.weingarten_image_curvature


__all__ = ['weingarten_image_curvature']

import numpy as np

import ants
from ants.decorators import image_method
from ants.internal import get_lib_fn

[docs] @image_method def weingarten_image_curvature(image, sigma=1.0, opt='mean'): """ Uses the weingarten map to estimate image mean or gaussian curvature ANTsR function: `weingartenImageCurvature` Arguments --------- image : ANTsImage image from which curvature is calculated sigma : scalar smoothing parameter opt : string mean by default, otherwise `gaussian` or `characterize` Returns ------- ANTsImage Example ------- >>> import ants >>> image = ants.image_read(ants.get_ants_data('mni')).resample_image((3,3,3)) >>> imagecurv = ants.weingarten_image_curvature(image) """ if image.dimension not in {2,3}: raise ValueError('image must be 2D or 3D') if image.dimension == 2: d = image.shape temp = np.zeros(list(d)+[10]) for k in range(1,7): voxvals = image[:d[0],:d[1]].numpy() temp[:d[0],:d[1],k] = voxvals temp = ants.from_numpy(temp) myspc = image.spacing myspc = list(myspc) + [min(myspc)] temp.set_spacing(myspc) temp = temp.clone('float') else: temp = image.clone('float') optnum = 0 if opt == 'gaussian': optnum = 6 if opt == 'characterize': optnum = 5 libfn = get_lib_fn('weingartenImageCurvature') mykout = libfn(temp.pointer, sigma, optnum) mykout = ants.from_pointer(mykout) if image.dimension == 3: return mykout elif image.dimension == 2: subarr = ants.from_numpy(mykout.numpy()[:,:,4]) return ants.copy_image_info(image, subarr)