Source code for ants.utils.convert_nibabel
__all__ = ["to_nibabel", "from_nibabel", "nifti_to_ants"]
import os
from tempfile import mkstemp
import numpy as np
import nibabel as nib
from ..core import ants_image_io as iio2
[docs]def to_nibabel(image):
"""
Convert an ANTsImage to a Nibabel image
"""
import nibabel as nib
fd, tmpfile = mkstemp(suffix=".nii.gz")
image.to_filename(tmpfile)
new_img = nib.load(tmpfile)
os.close(fd)
# os.remove(tmpfile) ## Don't remove tmpfile as nibabel lazy loads the data.
return new_img
[docs]def from_nibabel(nib_image):
"""
Convert a nibabel image to an ANTsImage
"""
fd, tmpfile = mkstemp(suffix=".nii.gz")
nib_image.to_filename(tmpfile)
new_img = iio2.image_read(tmpfile)
os.close(fd)
os.remove(tmpfile)
return new_img
[docs]def nifti_to_ants( nib_image ):
"""
Converts a given Nifti image into an ANTsPy image
Parameters
----------
img: NiftiImage
Returns
-------
ants_image: ANTsImage
"""
ndim = nib_image.ndim
if ndim < 3:
print("Dimensionality is less than 3.")
return None
q_form = nib_image.get_qform()
spacing = nib_image.header["pixdim"][1 : ndim + 1]
origin = np.zeros((ndim))
origin[:3] = q_form[:3, 3]
direction = np.diag(np.ones(ndim))
direction[:3, :3] = q_form[:3, :3] / spacing[:3]
ants_img = iio2.from_numpy(
data = nib_image.get_data().astype( np.float ),
origin = origin.tolist(),
spacing = spacing.tolist(),
direction = direction )
return ants_img