I realized that before jumping into any kind of data analyses or modeling, I should devote a small post about what ‘Brain Data’ looks like.
In the future posts, we will be looking at a lot of Neuro data and I felt that this post would be a crucial component for the same. An NIPY-DIPY (and Nibabel) image is the association of three things:
- The image data array: a 3D or 4D array of image data
- An affine array that tells you the position of the image array data in a reference space.
- Image metadata (data about the data) describing the image, usually in the form of an image header.
import nibabel as nib import matplotlib.pyplot as plt epi_img = nib.load('C:/Users/Shreyas/Desktop/DATA_understanding/someones_epi.nii') epi_img_data = epi_img.get_data() epi_img_data.shape """ Function to display row of image slices """ def show_slices(slices): fig, axes = plt.subplots(1, len(slices)) for i, slice in enumerate(slices): axes[i].imshow(slice.T, cmap="gray", origin="lower") slice_0 = epi_img_data[26, :, :] slice_1 = epi_img_data[:, 30, :] slice_2 = epi_img_data[:, :, 16] show_slices([slice_0, slice_1, slice_2]) plt.suptitle("Center slices for EPI image")
In the above grayscale image that looks like the cross-sections of the brain, each pixel is a ‘Voxel’, i.e. a pixel with Volume: Where black areas denote a minimum and white areas denote maximum values. A 3D array of such voxels is forms a voxel array. The following will help us understand how to get the voxel coordinates of the center slices and the value at that voxel!
n_i, n_j, n_k = epi_img_data.shape center_i = (n_i - 1) // 2 center_j = (n_j - 1) // 2 center_k = (n_k - 1) // 2 centers = [center_i, center_j, center_k] print("Co-ordinates in the voxel array: ", centers) # O/P: Co-ordinates in the voxel array: [26, 30, 16] center_vox_value = epi_img_data[center_i, center_j, center_k] print(center_vox_value) # O/P: 81.54928779602051
Note that the voxel coordiantes do not tell us anything about where the data came from, as in, the point of view of the scanner/ position of the subject/ left-right brain imaging,… etc. Therefore we need to perform some kind of affine transformations to these coordinates to get them into the subject-scanner reference space.
(x, y, z) = f(i, j, k)
The above example, though of EPI (Echo Planar Imaging), gives a brief overview of what these data mean.
In Diffusion MRI (dMRI) usually we use three types of files, a Nifti file with the diffusion weighted data, and two text files: one with b-values and one with the b-vectors. In DIPY we provide tools to load and process these files and we also provide access to publicly available datasets for those who haven’t acquired yet their own datasets.
There are some brilliant tutorials which provide an abundance of high quality information: