Hi,
I'm using FSL's mcflirt for motion correction with the "-mats" option to
store a registration matrix for each time point. In my application, I
would like to use a one-step interpolation process to sample points from
the freesurfer surfaces (e.g. white) from the 4D fMRI data.
I tried to convert the FSL .mat matrix to "TkReg-RAS space", which, as I
understand it, is the space the surface coordinates in "lh.white" etc.
are stored in. What I did:
1) Obtain the .mat matrix file using mcflirt:
mcflirt -in bold.nii.gz -out bold_mcflirt.nii.gz \
-reffile bold_ref.nii.gz -mats
this creates a directory "bold_mcflirt.nii.gz.mat", where the
registration matrix files for each time point are stored (MAT_0000,
MAT_0001...). As I understand it, the FSL matrix is the transform from
bold to bold_ref in mm space. I.e., to get the transform in voxel
coordinates, one would use:
M_vox = A1 * M * inv(A2)
where A1 and A2 are the affine matrices from the headers in bold_ref and
bold, resp. The matrix M is the affine matrix computed by mcflirt.
2) Convert the matrix to TkReg-RAS space. The matrix bold->bold_ref
matrix in this space is given by
M_ras = vox2ras1 * M_vox * inv(vox2ras2)
where vox2ras1 and vox2ras2 are obtained using "mri_info --vox2ras-tkr"
for bold_ref and bold, resp.
Is this correct? I have tried it and for some reason the translated
points don't seem to be at the correct locations in the "bold space".
What I did is create an all-zero nifti file with the same size as "bold"
and then fill-in the points corresponding to the white surface. For
later time points (when the subject movement relative to bold_ref is
larger), the surface is increasingly misaligned. This tells me that either
a) the transform is computed incorrectly
or
b) MCFLIRT stores something different than the bold -> bold_ref
transform for each time point.
Any help is appreciated.
Best,
Martin