Basic Data IO

Accessing images using nipy:

While Nifti is the primary file format Analyze images (with associated .mat file), and MINC files can also be read.

Load Image from File

Get a filename for an example file. anatfile gives a filename for a small testing image in the nipy distribution:

>>> from nipy.testing import anatfile

Load the file from disk:

>>> from nipy import load_image
>>> myimg = load_image(anatfile)
>>> myimg.shape
(33, 41, 25)
>>> myimg.affine
array([[ -2.,   0.,   0.,  32.],
       [  0.,   2.,   0., -40.],
       [  0.,   0.,   2., -16.],
       [  0.,   0.,   0.,   1.]])

Access Data into an Array

This allows the user to access data as a numpy array.

>>> mydata = myimg.get_fdata()
>>> mydata.shape
(33, 41, 25)
>>> mydata.ndim
3

Save image to a File

>>> from nipy import save_image
>>> newimg = save_image(myimg, 'newmyfile.nii')

Create Image from an Array

This will have a generic affine-type CoordinateMap with unit voxel sizes.

>>> import numpy as np
>>> from nipy.core.api import Image, vox2mni
>>> rawarray = np.zeros((43,128,128))
>>> arr_img = Image(rawarray, vox2mni(np.eye(4)))
>>> arr_img.shape
(43, 128, 128)

Coordinate map

Images have a Coordinate Map.

The Coordinate Map contains information defining the input (domain) and output (range) Coordinate Systems of the image, and the mapping between the two Coordinate systems. The input coordinate system is the voxel coordinate system, and the output coordinate system is the world coordinate system.

>>> newimg.coordmap
AffineTransform(
   function_domain=CoordinateSystem(coord_names=('i', 'j', 'k'), name='voxels', coord_dtype=float64),
   function_range=CoordinateSystem(coord_names=('aligned-x=L->R', 'aligned-y=P->A', 'aligned-z=I->S'), name='aligned', coord_dtype=float64),
   affine=array([[ -2.,   0.,   0.,  32.],
                 [  0.,   2.,   0., -40.],
                 [  0.,   0.,   2., -16.],
                 [  0.,   0.,   0.,   1.]])
)

See Basics of the Coordinate Map for more detail.