# Reconstruction of the diffusion signal with the WMTI model

DKI can also be used to derive concrete biophysical parameters by applying microstructural models to DT and KT estimated from DKI. For instance, Fieremans et al. [Fierem2011] showed that DKI can be used to estimate the contribution of hindered and restricted diffusion for well-aligned fibers - a model that was later referred to as the white matter tract integrity WMTI technique [Fierem2013]. The two tensors of WMTI can be also interpreted as the influences of intra- and extra-cellular compartments and can be used to estimate the axonal volume fraction and diffusion extra-cellular tortuosity. According to previous studies [Fierem2012] [Fierem2013], these latter measures can be used to distinguish processes of axonal loss from processes of myelin degeneration.

In this example, we show how to process a dMRI dataset using the WMTI model.

First, we import all relevant modules:

import numpy as np
import matplotlib.pyplot as plt
import dipy.reconst.dki as dki
import dipy.reconst.dki_micro as dki_micro
from dipy.data import fetch_cfin_multib
from scipy.ndimage.filters import gaussian_filter


As the standard DKI, WMTI requires multi-shell data, i.e. data acquired from more than one non-zero b-value. Here, we use a fetcher to download a multi-shell dataset which was kindly provided by Hansen and Jespersen (more details about the data are provided in their paper [Hansen2016]).

fetch_cfin_multib()

data = img.get_data()

affine = img.affine


For comparison, this dataset is pre-processed using the same steps used in the example for reconstructing DKI (see Reconstruction of the diffusion signal with the kurtosis tensor model).

# data masking
autocrop=False, dilate=1)

# Smoothing
fwhm = 1.25
gauss_std = fwhm / np.sqrt(8 * np.log(2))
data_smooth = np.zeros(data.shape)
for v in range(data.shape[-1]):
data_smooth[..., v] = gaussian_filter(data[..., v], sigma=gauss_std)


The WMTI model can be defined in DIPY by instantiating the ‘KurtosisMicrostructureModel’ object in the following way:

dki_micro_model = dki_micro.KurtosisMicrostructureModel(gtab)


Before fitting this microstructural model, it is useful to indicate the regions in which this model provides meaningful information (i.e. voxels of well-aligned fibers). Following Fieremans et al. [Fieremans2011], a simple way to select this region is to generate a well-aligned fiber mask based on the values of diffusion sphericity, planarity and linearity. Here we will follow these selection criteria for a better comparison of our figures with the original article published by Fieremans et al. [Fieremans2011]. Nevertheless, it is important to note that voxels with well-aligned fibers can be selected based on other approaches such as using predefined regions of interest.

# Diffusion Tensor is computed based on the standard DKI model
dkimodel = dki.DiffusionKurtosisModel(gtab)

# Initialize well aligned mask with ones

# Diffusion coefficient of linearity (cl) has to be larger than 0.4, thus
# we exclude voxels with cl < 0.4.
cl = dkifit.linearity.copy()

# Diffusion coefficient of planarity (cp) has to be lower than 0.2, thus
# we exclude voxels with cp > 0.2.
cp = dkifit.planarity.copy()

# Diffusion coefficient of sphericity (cs) has to be lower than 0.35, thus
# we exclude voxels with cs > 0.35.
cs = dkifit.sphericity.copy()

# Removing nan associated with background voxels


Analogous to DKI, the data fit can be done by calling the fit function of the model’s object as follows:

dki_micro_fit = dki_micro_model.fit(data_smooth, mask=well_aligned_mask)


The KurtosisMicrostructureFit object created by this fit function can then be used to extract model parameters such as the axonal water fraction and diffusion hindered tortuosity:

AWF = dki_micro_fit.awf
TORT = dki_micro_fit.tortuosity


These parameters are plotted below on top of the mean kurtosis maps:

MK = dkifit.mk(0, 3)

axial_slice = 9

fig1, ax = plt.subplots(1, 2, figsize=(9, 4),
subplot_kw={'xticks': [], 'yticks': []})

AWF[AWF == 0] = np.nan
TORT[TORT == 0] = np.nan

ax[0].imshow(MK[:, :, axial_slice].T, cmap=plt.cm.gray,
interpolation='nearest', origin='lower')
im0 = ax[0].imshow(AWF[:, :, axial_slice].T, cmap=plt.cm.Reds, alpha=0.9,
vmin=0.3, vmax=0.7, interpolation='nearest', origin='lower')
fig1.colorbar(im0, ax=ax.flat[0])

ax[1].imshow(MK[:, :, axial_slice].T, cmap=plt.cm.gray,
interpolation='nearest', origin='lower')
im1 = ax[1].imshow(TORT[:, :, axial_slice].T, cmap=plt.cm.Blues, alpha=0.9,
vmin=2, vmax=6, interpolation='nearest', origin='lower')
fig1.colorbar(im1, ax=ax.flat[1])

fig1.savefig('Kurtosis_Microstructural_measures.png')


Axonal water fraction (left panel) and tortuosity (right panel) values of well-aligned fiber regions overlaid on a top of a mean kurtosis all-brain image.

## References

Fierem2011

Fieremans E, Jensen JH, Helpern JA (2011). White matter characterization with diffusion kurtosis imaging. NeuroImage 58: 177-188

Fierem2012

Fieremans E, Jensen JH, Helpern JA, Kim S, Grossman RI, Inglese M, Novikov DS. (2012). Diffusion distinguishes between axonal loss and demyelination in brain white matter. Proceedings of the 20th Annual Meeting of the International Society for Magnetic Resonance Medicine; Melbourne, Australia. May 5-11.

Fierem2013(1,2)

Fieremans, E., Benitez, A., Jensen, J.H., Falangola, M.F., Tabesh, A., Deardorff, R.L., Spampinato, M.V., Babb, J.S., Novikov, D.S., Ferris, S.H., Helpern, J.A., 2013. Novel white matter tract integrity metrics sensitive to Alzheimer disease progression. AJNR Am. J. Neuroradiol. 34(11), 2105-2112. doi: 10.3174/ajnr.A3553

Hansen2016

Hansen, B, Jespersen, SN (2016). Data for evaluation of fast kurtosis strategies, b-value optimization and exploration of diffusion MRI contrast. Scientific Data 3: 160072 doi:10.1038/sdata.2016.72

Example source code

You can download the full source code of this example. This same script is also included in the dipy source distribution under the doc/examples/ directory.