How to Convert from FreeSurfer Space Back to Native Anatomical Space

Regular Stream

For the longitudinal stream, scroll down.

Question: I have successfully run a subject's data through FreeSurfer. FreeSurfer creates volumes in 1mm3, 2563 space, but I want the FreeSurfer results in the space of my original anatomical. How do I do this?

The exact command you use depends on what you want to convert, an image (like brain.mgz) or a segmentation (like aseg.mgz).

For an image:

cd $SUBJECTS_DIR/<subjid>/mri
mri_vol2vol --mov brain.mgz --targ rawavg.mgz --regheader --o brain-in-rawavg.mgz --no-save-reg

"rawavg.mgz" is a file created by FreeSurfer and is in the native space of your anatomical so we use that volume as a target space. The output is brain-in-rawavg.mgz and will be in the native space of the anatomical. Substitute brain.mgz with whatever other images you want in native space.

For a segmentation (aseg.mgz, aparc+aseg.mgz, wmparc.mgz, etc):

cd $SUBJECTS_DIR/<subjid>/mri
mri_label2vol --seg aseg.mgz --temp rawavg.mgz --o aseg-in-rawavg.mgz --regheader aseg.mgz

If you ran both of the commands above, tkmedit should show the aseg (in native space) overlaid properly on the brain (in native space) all matching up well with the rawavg.mgz (your native space target).

tkmedit -f brain-in-rawavg.mgz -aux rawavg.mgz -seg aseg-in-rawavg.mgz 

You can also map a surface into the native anatomical space

First, create a registration matrix between the conformed space (orig.mgz) and the native anatomical (rawavg.mgz)

tkregister2 --mov rawavg.mgz --targ orig.mgz --reg register.native.dat --noedit --regheader

Next, map the surface to the native space:

mri_surf2surf --sval-xyz pial --reg register.native.dat rawavg.mgz --tval lh.pial.native --tval-xyz --hemi lh --s subjectname

The output will be stored in $SUBJECTS_DIR/subjectname/surf/lh.pial.native

To verify that this worked, run

freeview -v rawavg.mgz -f lh.pial.native

Longitudinal Stream

In the longitudinal stream, the base (subject-template) and the longitudinal runs have their data all in the same space. With the following commands you can map the results from long to the native space.

Image (best to use cubic interpolation):

cd $SUBJECTS_DIR/<tpid>.long.<baseid>/mri
mri_convert -ait transforms/<tpid>_to_<tpid>.long.<baseid>.lta \
            -rl $SUBJCECTS_DIR/<tpid>/mri/rawavg.mgz \
            -rt cubic brain.mgz brain-in-rawavg.mgz

Segmentation aseg (needs nearest-neighbor method):

cd $SUBJECTS_DIR/<tpid>.long.<baseid>/mri
mri_convert -ait transforms/<tpid>_to_<tpid>.long.<baseid>.lta \
            -rl $SUBJCECTS_DIR/<tpid>/mri/rawavg.mgz \
            -rt nearest -odt uchar \
            aseg.mgz aseg-in-rawavg.mgz

Segmentation aparc+aseg (needs to be type int):

cd $SUBJECTS_DIR/<tpid>.long.<baseid>/mri
mri_convert -ait transforms/<tpid>_to_<tpid>.long.<baseid>.lta \
            -rl $SUBJCECTS_DIR/<tpid>/mri/rawavg.mgz \
            -rt nearest -odt int \
            aparc+aseg.mgz aparc+aseg-in-rawavg.mgz

To map surfaces:

cd $SUBJECTS_DIR/<tpid>.long.<baseid>/surf
lta_convert --inlta ../mri/transforms/<tpid>_to_<tpid>.long.<baseid>.lta \
            --outreg register.native.dat --src $SUBJCECTS_DIR/<tpid>/mri/rawavg.mgz
mri_surf2surf --sval-xyz pial --reg register.native.dat ../../$tp/mri/rawavg.mgz \
              --tval lh.pial.native --tval-xyz --hemi lh --s ${tp}.long.${base}