Source code for pybraincompare.mr.transformation
'''
transformation.py: part of pybraincompare package
Return transformations of images
'''
from pybraincompare.mr.datasets import get_standard_brain
from pybraincompare.compare.mrutils import get_nii_obj
from nilearn.image import resample_img
import nibabel as nib
import numpy
import os
# Return resampled transformation image as vector
[docs]def make_resampled_transformation_vector(nii_obj,resample_dim=[4,4,4],standard_mask=True):
resamp_nii = make_resampled_transformation(nii_obj,resample_dim,standard_mask)
if standard_mask:
standard = get_standard_brain(voxdim=resample_dim[0])
return resamp_nii.get_data()[standard.get_data()!=0]
else:
return resamp_nii.get_data().flatten()
# Make a resampled image transformation
[docs]def make_resampled_transformation(nii_obj,resample_dim=[4,4,4],standard_mask=True):
nii_obj = get_nii_obj(nii_obj)[0]
# To set 0s to nan, we need to have float64 data type
true_zeros = numpy.zeros(nii_obj.shape) # default data_type is float64
true_zeros[:] = nii_obj.get_data()
true_zeros[true_zeros==0] = numpy.nan
# Resample image to 4mm voxel, nans are preserved
true_zeros = nib.nifti1.Nifti1Image(true_zeros,affine=nii_obj.get_affine())
# Standard brain masking
if standard_mask == True:
standard = get_standard_brain(voxdim=resample_dim[0])
true_zeros = resample_img(true_zeros,target_affine=standard.get_affine(),
target_shape=standard.shape)
# Mask the image
masked_true_zeros = numpy.zeros(true_zeros.shape)
masked_true_zeros[standard.get_data()!=0] = true_zeros.get_data()[standard.get_data()!=0]
true_zeros = nib.nifti1.Nifti1Image(masked_true_zeros,affine=true_zeros.get_affine())
# or just resample
else:
if (resample_dim != numpy.diag(true_zeros.get_affine())[0:3]).all():
true_zeros = resample_img(true_zeros,target_affine=numpy.diag(resample_dim))
return true_zeros