Multi-slice MOLLI T1-mapping in the kidney#

This example shows how mdreg can be used to perform 2D motion correction slice-by-slice on a 4D array, for the case of Look-Locker T1 mapping.

Setup#

import numpy as np
import mdreg

# Fetch the multi-slice MOLLI dataset and plot
data = mdreg.fetch('MOLLI')

# Get the relevant variables
array = data['array']

# Visualise the motion
anim = mdreg.plot.animation(array, vmin=0, vmax=1e4)

Perform slice-by-slice motion correction#

Slice-by-slice analysis works the same way as single-slice or 3D analysis. We just have to remember to set the keyword argument force_2d to True so fit knows that we want 2D motion correction. This overrules the default behaviour of fitting 3D data with 3D motion correction:

coreg, fit, transfo, pars = mdreg.fit(
    array,
    fit_image={
        'func': mdreg.fit_abs_exp_recovery_2p,
        'TI': np.array(data['TI'])/1000,
    },
    fit_coreg={
        'package': 'elastix',
        'spacing': data['pixel_spacing'],
        'FinalGridSpacingInPhysicalUnits': 50.0,
    },
    force_2d=True,
    verbose=2,
)
Fitting slice:   0%|                                                                                                | 0/2 [00:00<?, ?it/s]Initializing..
Iteration 1: fitting signal model
Fitting deformation field (iteration 1)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 1: 2.8358890374501544 min
Iteration 2: fitting signal model
Fitting deformation field (iteration 2)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 2: 2.8654742161432902 min
Iteration 3: fitting signal model
Fitting deformation field (iteration 3)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 3: 2.8608351707458497 min
Iteration 4: fitting signal model
Fitting deformation field (iteration 4)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 4: 2.857551634311676 min
Iteration 5: fitting signal model
Fitting deformation field (iteration 5)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 5: 2.8616483092308043 min
Total calculation time: 14.281398367881774 min

Fitting slice:  50%|███████████████████████████████████████████▌                                           | 1/2 [14:16<14:16, 856.88s/it]Initializing..
Iteration 1: fitting signal model
Fitting deformation field (iteration 1)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 1: 2.86215207974116 min
Iteration 2: fitting signal model
Fitting deformation field (iteration 2)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 2: 2.874415413538615 min
Iteration 3: fitting signal model
Fitting deformation field (iteration 3)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 3: 2.87472851673762 min
Iteration 4: fitting signal model
Fitting deformation field (iteration 4)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 4: 2.867288080851237 min
Iteration 5: fitting signal model
Fitting deformation field (iteration 5)
Building elastix parameter object..
Coregistering..
Calculation time for iteration 5: 2.8700268030166627 min
Total calculation time: 14.348610893885295 min

Fitting slice: 100%|███████████████████████████████████████████████████████████████████████████████████████| 2/2 [28:37<00:00, 859.26s/it]
Fitting slice: 100%|███████████████████████████████████████████████████████████████████████████████████████| 2/2 [28:37<00:00, 858.90s/it]

Visualise the results

anim = mdreg.plot.animation(
    coreg, title='Motion corrected', interval=500, vmin=0, vmax=1e4
)

Total running time of the script: (28 minutes 39.794 seconds)

Gallery generated by Sphinx-Gallery