Hi Steven,
Thanks for the help. I am still having issues however.
Here is the code I use:
import ants
import numpy as np
import nibabel as nib
import os
WORK_DIR = '/work'
MOV_FSBRAIN_MGZ = '/derivatives/freesurfer/sub-x/mri/aparc.a2009s+aseg.mgz'
FIXED_QSIPREPT1 = '/derivatives/qsiprep/sub-x/anat/sub-x_space-ACPC_desc-preproc_T1w.nii.gz'
QSIPREP_T1_MASK = '/derivatives/qsiprep/sub-x/anat/sub-x_space-ACPC_desc-brain_mask.nii.gz'
## We need to convert fs brain .mgz to nifti format for registration
# Load the .mgz file
mgz_img = nib.load(MOV_FSBRAIN_MGZ)
# Save as NIfTI format
MOV_FSBRAIN_NII = os.path.join(WORK_DIR, "sub-x/aparc.a2009s+aseg.nii")
nib.save(mgz_img, MOV_FSBRAIN_NII)
# movImg = ants.image_read(movDir)
# targImg = ants.image_read(targetDir)
##2 Run the registration
qsiprep_t1 = ants.image_read(FIXED_QSIPREPT1)
fs_brain_nii = ants.image_read(MOV_FSBRAIN_NII)
qsiprep_t1_mask = ants.image_read(QSIPREP_T1_MASK)
# Perform registration
reg = ants.registration(
fixed=qsiprep_t1,
moving=fs_brain_nii,
type_of_transform= 'SyN', #"Rigid", # Corresponds to --transform Rigid[ 0.1 ]
mask=qsiprep_t1_mask, # Corresponds to --masks [ ${QSIPREP_T1_MASK} NULL ]
reg_iterations=(1000, 500, 250, 100), # Corresponds to --convergence [ 1000x500x250x100, 1e-06, 10 ]
verbose=True
)
# Save outputs
ants.image_write(reg["warpedmovout"], os.path.join(WORK_DIR, "sub-x/transform_Warped.nii.gz"))
#ants.write_transform(reg["fwdtransforms"], os.path.join(WORK_DIR, "sub-x/transform"))
mytx = reg['invtransforms']
##3 Apply the transformation
fsbrain_warped = ants.apply_transforms( fixed = qsiprep_t1,
moving = fs_brain_nii ,
transformlist = mytx,
interpolator = 'genericLabel',
whichtoinvert = [True, False])
ants.plot( qsiprep_t1, fsbrain_warped, overlay_alpha = 0.5 )
Here is the output:
I’m also unable to save the transform:
ants.write_transform(reg["fwdtransforms"], os.path.join(WORK_DIR, "sub-x/transform"))
I am also unable to use it in place of invtransforms.
Thanks,
Best,
-Loïc
