Questions about func coregistration & resolution

Hello @jcohenadad ,

I have some questions about the coregistration step between the func image and a higher resolution image (individual anatomical image and/or template).

1/ I wonder if there is a solution to avoid two steps to keep the resolution of the func image after the coregistration (sct_register_multimodal + sct_resample). Is there a possibility with sct_register_multimodal to say “do not change the resolution of the input image”?

2/ I can’t quite explain that my tSNR (func) in axial plane increases after coregistration especially in the GM (which is good). Do you think it’s an interpolation effect related to the coregistration step or something like that?

3/ Finally, do you think it is possible to get a deformation field file after moco? The idea is to apply a single transformation (sct_apply_transfo) to all my func volumes by concatenating (sct_concat_transfo) all the warping fields (e.g. I will concatenate warp_func_to_func_moco + warp_fun_moco_to_anat + warp_anat_to_PAM50 = warp_func_to_PAM50).

Thanks

Caroline

Hi @Caroline_Landelle

Thank you for reaching out.

1/ I wonder if there is a solution to avoid two steps to keep the resolution of the func image after the coregistration (sct_register_multimodal + sct_resample).

I’m not sure I fully understand what you are trying to achieve. Firstly, there is no need to resample the source (ie: ‘moving’) image if it will ultimately be resampled to the destination space (ie: ‘fixed’ image), which IIUC is the high-resolution anatomical image. So indeed, you could probably skip the sct_resample stage. Secondly, sct_register_multimodal already includes a resampling stage: after estimating the forward and backward warping fields, the source image is registered and consequently resampled to the destination image (with suffix ‘_reg’).

Is there a possibility with sct_register_multimodal to say “do not change the resolution of the input image”?

This function outputs the forward (source → dest) and backward (dest → source) warping fields, so if you wish to concatenate them with your pipeline, then you can do so and not use the source_reg image at this stage. But again, I am unsure what you are trying to achieve so it is difficult for me to advise on best practice. All I can say, is that in general fMRI data should be analyzed (first level analysis) in their native space so as to minimize interpolation errors, and what is warped to the anatomical image and/or template is the results of the first-level analysis (eg z-score maps).

2/ I can’t quite explain that my tSNR (func) in axial plane increases after coregistration especially in the GM (which is good). Do you think it’s an interpolation effect related to the coregistration step or something like that?

Interpolating (with trilinear, sinc methods) a time series changes noise properties so it is not surprising that the tSNR goes up. TSNR should always be computed on the native image space. If you with to perform motion correction before computing tSNR, then I suggest you use the nearest neighbor interpolation (flag: -x nn).

3/ Finally, do you think it is possible to get a deformation field file after moco? The idea is to apply a single transformation (sct_apply_transfo) to all my func volumes by concatenating (sct_concat_transfo) all the warping fields (e.g. I will concatenate warp_func_to_func_moco + warp_fun_moco_to_anat + warp_anat_to_PAM50 = warp_func_to_PAM50).

You can access these by setting the flag -r 0 in sct_fmri_moco. You can locate the temporary folder in your terminal, example:

And then you can access the intermediate warping fields for each volume of the 4D time series:

This post could also be helpful to you.

However, as said earlier, in general fMRI scans should be analyzed in their native space to minimize interpolation errors (eg: modification of tSNR you observed at point #2) and keeping the proper degree of freedom when using spatial autocorrelation regularization methods for adjusting p-values using Gaussian random field approaches.

Hi @jcohenadad ,
Thank you for your answers, it helps me a lot. Just a few comments:

Thanks, Indeed you answer the question in the next question, I didn’t want to use the resample stage of sct_register_multimodal.

Thanks I think it’s the solution that I need. I agree that this is not the best way to analyze func data and I also prefer to stay in the individual space as much as possible. Unfortunately, I had to make a compromise because I use a ROI approach (ROI drawn from the PAM50 template) to extract value in a dataset of 100 participants. This was the only solution to perfectly control the drawing of these ROIs for each participant (total number of voxels, no overlaps…).

Thank you , that’s what I need!

1 Like