Source code for scilpy.io.tensor

# -*- coding: utf-8 -*-

import numpy as np

supported_tensor_formats = ['fsl', 'nifti', 'mrtrix', 'dipy']
tensor_format_description = \
    """
    Dipy's order is [Dxx, Dxy, Dyy, Dxz, Dyz, Dzz]
       Shape: [i, j , k, 6].
       Ref: https://github.com/dipy/dipy/blob/master/dipy/reconst/dti.py#L1639
    
    MRTRIX's order is : [Dxx, Dyy, Dzz, Dxy, Dxz, Dyz]
       Shape: [i, j , k, 6].
       Ref: https://mrtrix.readthedocs.io/en/dev/reference/commands/dwi2tensor.html
    
    ANTS's order ('nifti format') is : [Dxx, Dxy, Dyy, Dxz, Dyz, Dzz].
       Shape: [i, j , k, 1, 6] (Careful, file is 5D).
       Ref: https://github.com/ANTsX/ANTs/wiki/Importing-diffusion-tensor-data-from-other-software
    
    FSL's order is [Dxx, Dxy, Dxz, Dyy, Dyz, Dzz]
       Shape: [i, j , k, 6].
       Ref: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FDT/UserGuide
       (Also used for the Fibernavigator)
    """


[docs] def convert_tensor_to_dipy_format(tensor, initial_format): """ See description of formats at the top of this file. """ assert initial_format in supported_tensor_formats, \ "Tensor format not supported" if initial_format == 'nifti' or initial_format == 'dipy': correct_order = [0, 1, 2, 3, 4, 5] tensor = np.squeeze(tensor) elif initial_format == 'mrtrix': correct_order = [0, 3, 1, 4, 5, 2] else: # initial_format == 'fsl': correct_order = [0, 1, 3, 2, 4, 5] return tensor[..., correct_order]
[docs] def convert_tensor_from_dipy_format(tensor, final_format): """ See description of formats at the top of this file. """ assert final_format in supported_tensor_formats, \ "Tensor format not supported" if final_format == 'nifti' or final_format == 'dipy': correct_order = [0, 1, 2, 3, 4, 5] elif final_format == 'mrtrix': correct_order = [0, 2, 5, 1, 3, 4] else: # final_format == 'fsl'. correct_order = [0, 1, 3, 2, 4, 5] tensor_reordered = tensor[..., correct_order] if final_format == 'nifti': # We need to add the fifth dimension tensor_reordered = tensor_reordered[:, :, :, None, :] return tensor_reordered
[docs] def convert_tensor_format(tensor, initial_format, final_format): """ See description of formats at the top of this file. """ tensor = convert_tensor_to_dipy_format(tensor, initial_format) return convert_tensor_from_dipy_format(tensor, final_format)