I know I post a lot about registration (see here and here) but I believe that image registration is one of the most important components of an MRI processing pipeline. Thankfully, there are some good tools available. FLIRT, FNIRT, bbregister, and ANTS are just a few of the registration tools I’ve used. I’ve found that for intra-individual inter-modal (diffusion to T1 or vice versa) registration, rigid body or even affine (linear) is usually sufficient if the registered scans were acquired at the same scanning session. Even if they were not, linear registrations should be good enough for intra-individual work. Why is this?
Part of the difficulty with the flexibility of nonlinear registrations is that they can be too flexible. This is a problem when you are trying to align diffusion weighted scans to T1 scans, for example. Here are a couple images showing some distortion. This distortion is mostly due to proximity to the air filled sinuses.
A b0 image (no diffusion weighting applied) showing frontal distortion.
One direction from a 64 direction dwi sequence showing temporal distortion.
With very flexible nonlinear registration methods on a skull-stripped brain, the tools try to stretch brain regions to fit; if there is warping or other distortion, we do not get good results. Using a non-skull-stripped brain sometimes fixes the problem but in some cases (intra-individual inter-modal) nonlinear methods are likely overkill.
I’ve been doing trial runs with FreeSurfer’s bbregister in order to see how well it works. It’s relatively simple.
First, the T1(s) of a subject should be processed through the recon-all Freesurfer script. Next, if you want you can use FreeSurfer’s script dt_recon to do preliminary processing of diffusion data. That’s actually the easiest pathway because it will register your diffusion data to your structural data in the process. The matrix file you will need is called register.dat (see screenshot).
If you did not or do not want to run dt_recon (it uses a number of FSL’s diffusion tools), you can create that registration file by hand using bbregister. To do this type a command like this:
bbregister --s sub001 --mov /{path to b0 image}/lowb.nii.gz --reg /{path to where you will save the matrix file}/lowb2orig.dat --dti --init-fsl
What this does is create a .dat (matrix) file that tells an image how to get from diffusion space to FreeSurfer’s conformed space (i.e., the 256x256x256 1x1x1mm space that orig.mgz is in). You could set your --mov
as the orig.mgz and add a --target
with it set to your b0 (lowb or nodif or whatever the file is called) image. Without a --targ
a conformed image (e.g., orig.mgz) is the implied target. I typically make the diffusion image the movable one and then apply the inverse matrix to files in conformed space that I want to be in diffusion space. It seems a little backward but it works well. [Note: I could be mistaken about this but I believe it is the case].
You’ll see something like this in your Terminal:
You can check your results with tkregister2: tkregister2 --mov /{path to b0 image}/lowb.nii.gz --reg /{path to where you will save the matrix file}/lowb2orig.dat --surf
You’ll see something like this in tkregister2:
I’ve yet to get a bad result with good MRI data.
Now you can use this registration matrix to get ROIs from FreeSurfer’s conformed space (this example was made up with an occipital ROI that could have been created in ITK-SNAP; you could also change all of aseg.mgz into diffusion space this way) into diffusion space with mri_vol2vol:
mri_vol2vol --mov /Users/Shared/DWI_MAS/sub001/DATA/nodif.nii.gz --targ /Users/Shared/DWI_MAS/sub001/ROIS/sub001_r_occipital_roi.nii.gz --o /Users/Shared/DWI_MAS/sub001/ROIS/sub001_r_occipital_roi2dwi.nii.gz --reg /Users/Shared/DWI_MAS/sub001/DATA/orig2nodif.dat --inv –-nearest
Note the --inv
that specifies to apply the inverse of the matrix (conformed –> diffusion rather than diffusion –> conformed).
It also works for getting FreeSurfer cortical labels into diffusion space with mri_label2vol (note: you’ll want to play around with the --proj
option to see what works for you):
mri_label2vol --label /Applications/freesurfer/subjects/sub001/label/lh.entorhinal_exvivo.label --reg /Users/Shared/DWI_MAS/sub001/DATA/nodif2orig.dat --fillthresh .3 --hemi lh --subject sub001 --o /Users/Shared/DWI_MAS/sub001/rois/sub001_l_exvivo_erc.nii.gz --temp /Users/Shared/DWI_MAS/sub001/data/nodif.nii.gz --proj frac 0 1 .1
There you go! Using bbregister, you can end up with good intra-individual, inter-modal registrations. I went beyond a simple registration but registrations are only really useful as one very important step in a broader imaging process.