User Guide¶
Table of Contents
4D image format and conversion¶
nifti format¶
Diffusion weighted image (DWI) data is a 4D image data with 3D spatial dimensions and 1D diffusion dimension determined by the value. In medical image data processing, we normally use nifti format to store the 4D image. .. See nifti header
Multi-Volume image¶
The common way to store 4D image using nifti format is to sore different 3D volumes separately in memory. We call it as multi-volume image. FSL uses this way. When we use ITK to read this image format, we need to use itk::Image<double,4>
In nifti format, a multi-volume image with size (64,64,20,120)
is stored as dim[8] = 4 64 64 20 120 1 1 1
, where a scalar value is stored in each 4D voxel.
See dim description.
VectorImage¶
In DMRITool, we mainly use VectorImage format e.g. ITK::VectorImage<double,3> for data processing. In this format, the values for the same voxel is stored continuously in memory. We can still nifti format to store it. We use this format because it is more efficient for processing 4D image data. See this example.
In nifti format, a vectorimage with size (64,64,20,120)
is stored as dim[8] = 5 64 64 20 1 120 1 1
, where a 120 dimensional vector is stored in each 3D voxel.
See dim description.
Conversion between multi-volume image and VectorImage¶
We provide two executables for conversions between these two image storages.
VectorTo4DImageConverter
is to convert a vectorimage to a multi-volume image.VectorTo4DImageConverter vectorimage.nii.gz 4dmultivolumeimage.nii.gz
4DToVectorImageConverter
is to convert a multi-volume image to a vectorimage.4DToVectorImageConverter 4dmultivolumeimage.nii.gz vectorimage.nii.gz
You can also use ImageInfo to check the image header information
ImageInfo vectorimage.nii.gz ImageInfo 4dmultivolumeimage.nii.gz
If you installed niftilib, you can try:
nifti_tool -disp_hdr -infiles vectorimage.nii.gz nifti_tool -disp_hdr -infiles 4dmultivolumeimage.nii.gz
DWI data input format¶
DWI data is a 4D image data where the fourth dimension is determined by a gradient file and a set of b values. It is possible to put gradient file and b values into the image header, as is done in NRRD format. Then the 3 files (e.g. image data file, gradient file, b values) becomes a single file.
In DMRITool, we choose to store the 3 files (e.g. image data file, gradient file, b values) separately, and the routines use a single text file which includes these 3 file names as input. The data reconstruction routines all rely on this input format.
In this format, a 3 shell DWI data with b values of (1000,2000,3000) is stored with a single txt file (e.g. data.txt
).
This txt file can have two different types.
Type 1:
******in data.txt***********
1000 grad1.txt dwi1.nii.gz
2000 grad2.txt dwi2.nii.gz
3000 grad3.txt dwi3.nii.gz
****************************
Each line is for a single shell data.
The gradient file grad1.txt
stores a Nx3
matrix.
If the dimension N
in grad1.txt
is smaller than the dimension M
in dwi1.nii.gz
(dimension XxYxZxM
),
the first M-N
dimension in dwi.nii.gz
is for b0 images.
Note
DWI data files (e.g. dwi1.nii.gz
) can be a multi-volume image format or vectorimage format. Both formats are OK.
If you just want to use some DWI volumes among these M
DWI volumes, you can optionally add a index file in each line to specifically the index of volumes you want to use
******in data.txt**********************
1000 grad1.txt dwi1.nii.gz index1.txt
2000 grad2.txt dwi2.nii.gz index2.txt
3000 grad3.txt dwi3.nii.gz index3.txt
***************************************
The index file shows the index requested for reading. It starts from 0.
Type 2: you can also specifically set all b values for all DWI volumes.
******in data.txt*********************
b1.txt grad1.txt dwi1.nii index1.txt
b2.txt grad2.txt dwi2.nii index2.txt
b3.txt grad3.txt dwi3.nii index3.txt
**************************************
b1.txt
and grad1.txt
should have the same dimension. The index files are optional.
You can also catenate all b value files (gradients, DWI data files) into one b value file (gradients, DWI data files).
******in data.txt******************************
ball.txt gradall.txt dwiall.nii indexall.txt
***********************************************
Configuration file format for DWI data simulation¶
We provides DWISimulator routine to generate DWI data from a customizable configuration file.
See example codes in Example/test.sh
and example configuration files in Example
folder.
The configuration file specially sets the mixture of tensor model or mixture of configuration model for each voxel. The following table explains the parameters in the configuration file
DimSize | output DWI image spatial size. |
---|---|
ElementSpacing | spatial spacing. |
Scale | DWI image for b=0 . |
ModelType | Symmetric tensor model, or cylinder model, spherical coordinate or Cartesian coordinate. |
DiffusionParameters | First three numbers are for spatial position. The following numbers are respectively for each tensor/cylinder components. For example, when ModelType=SYMMETRICAL_TENSOR_IN_SPHERICAL_COORDS , DiffusionParameters = 3 3 0 90 0 0.0015 0.0003 0.5 90 60 0.0015 0.0003 0.5 means in voxel (3,3,0) , two tensors with eigenvalues (0.0015,0.0003) , partial volume weight 0.5 , spherical coordinates (90,0) and (90,60) respectively. Thus crossing angle is 60 degree. |
BackgroundDiffusionParameters | diffusion parameters for all other voxels which are not specially set in DiffusionParameters . |
RicianNoiseSigma | Sigma for Rician noise. Suggest to set it as 0, then use DWINoiseGenerator to add noise to the noise-free DWI data. |
Visualization of spherical function field¶
Generate and visualize vtk files¶
Both ODFs and EAP profile are spherical function fields, where in each voxel there is a spherical function (e.g. ODF, EAP profile with a fixed radius). The spherical function field can be represented using uniform samples of spherical functions or the Spherical Harmonics (SH) coefficients of spherical functions.
We provides some routines to generate mesh files (.vtk format) from the SH coefficients or spherical function samples. Then these vtk files can be visualized in paraview or using the routine vtkviewer and VTKPolyData.py. Please see the command list for visualization. To use VTKPolyData.py, you only need to build VTK with python wrapping. It does not need to build dmritool.
Visualization using Paraview¶
When using paraview, it is possible to visualize these generated vtk files with a scalar map, e.g. the GFA map, as the background.
Paraview originally can visualize vtk files.
For the GFA map which is in nifti format, paraview can also visualize it when the AnalyzeNiftiIO
plugin is enabled.
You can enable it by clicking Tools
-> Manage Plugins
-> AnalyzeNiftiIO
.
Note that it supports .nii
file, but not .nii.gz
file, and you may need to set the origin manually in paraview such that
the gfa map can be visualized in the same coordinate as the EAP profile in vtk format.
- In the
properties
panel, when you clicktoggle advanced properties
, it showsTranslation
andScale
. - By setting
translation
, you can translate the image map to different position. - By setting
scale
, you scale the axis. If you set(-1,1,1)
for scale, it reverses the x-axis.
You can also enable other useful plugins for paraview, e.g. quadview
.