Fmriprep co-registration


I just finished reading over the fmriprep pre-print and had two questions regarding how co-registration is performed when specifying different flag options. I’m currently incorporating the FreeSurfer workflow, since the paper suggests that bbregister performs the best during co-registration.

1). If --force-bbr is specified, does that overwrite bbregister and use boundary-based registration instead?
2). If I don’t use --force-bbr but specify --fs-no-reconall, does that mean that co-registration is performed using FSL’s flirt?

Thank you for the clarification.


Hi Dan,

bbregister is a boundary-based registration tool. BBR is a two-step process:

  1. fast, rigid registration
  2. boundary-based refinement

Both of these steps are implemented whether FreeSurfer is used or not. If FreeSurfer is used, then the steps use (1) mri_coreg (FreeSurfer’s reimplementation of SPM’s coregistration) and (2) bbregister (this is what bbregister actually does with default options, but we split it out for reasons described below). If not, then both steps are done with FSL’s flirt, with the second one using the BBR cost function.

We add in an extra step at the end, and look at the normalized difference between the affine transformations produced by these registrations. If that difference is too high, we conclude that the BBR step hit a pathological case, which most often happens in images with low tissue contrast.

What --force-bbr and --force-no-bbr do is tell fMRIPrep not to compare the registration affines, and either to use the two-step BBR process or to only perform the rigid registration. The main reason we did this is that we aren’t supremely confident in our heuristic, and want to give users a way to test both registrations, rather than endlessly tweaking the heuristic. I’ve seen people use --force-bbr when the initial registration was a worse than usual, so the actually good BBR refinement was deemed “too far” by the heuristic. The main reason to use --force-no-bbr is that you know the BBR step is going to be bad and don’t want to waste the computation time.

Hope this helps.