Skip to content

Spatial normalization targeting dura(?) instead of brain in presence of atrophy #954

Description

@psadil

Summary

In several participants exhibiting a decent amount of atrophy, the spatial normalization step isn't really adjusting the outer cortical regions and is instead appears to match the dura of the patient to the edge of the brain of the template. Registration is great in many parts of the brain (e.g., genu of corpus callosum), but not near any edge of cortex that has receded from the skull. In this example case, the see the superior part of the frontal cortex on the x=13 and x=-14 slices

Image Image

Additional details

  • QSIPrep version: 0.21.5.dev0+g36b93fe.d20240504
  • Docker version: pennbbl/qsiprep:0.21.4
  • Singularity version: apptainer/1.4.1

What were you trying to do?

Process older participants, some of whom have a decent amount of atrophy.

What did you expect to happen?

I expected better normalization in the frontal cortex.

What actually happened?

Here's my best guess at the source of the issue. QSIprep makes a brain mask with mri_synthstrip, which is amazing at what it's designed to do. However, the mask that mri_synthstrip creates tends to include dura, which is especially noticeable in brains that have lots of atrophy (e.g., see their T1w example: https://surfer.nmr.mgh.harvard.edu/docs/synthstrip/resources/examples.png), although this can be controlled with the --no-csf flag. In contrast, the template brain masks are tighter.

Image

I suspect that the call to antsRegistration does a great job ensuring that the edges of the fixed and moving images are aligned, but that ends up being a problem, because the "edges" are different kinds of tissue, brain and dura respectively.

It is my impression that an ANTs tool like antsBrainExtraction.sh targets something different than mri_synthstrip, which is a tighter mask that excludes dura (and csf), more comparable to what is available for template images on templateflow.

Even if that's the source of the issue, I'm not really sure what would be the solution. Maybe call mri_synthstrip with the --no-csf flag? Alternatively, replace the template mask with one created by a default call to mri_synthstrip?

I have lots of these examples, so if it's agreed that A) this is an issue, and B) a likely source, then I'd be happy to experiment with solutions.

Reproducing the bug

FWIW,

args=['qsiprep', '--fs-license-file', '/opt/qsiprep_app/license.txt', '--output-resolution', '1.7', '--hmc_model', 'eddy', '--eddy-config', '/opt/qsiprep_app/eddy_params.json', '--unringing-method', 'mrdegibbs', '--denoise-method', 'patch2self', '--notrack', '--skip-bids-validation', '--work-dir', '/tmp/tmpg7dxtyvq', '--nthreads', '16', '--mem_mb', '32000', '/tmp/tmpol1gpc2z', '/tmp/tmpe2fisj5y', 'participant']

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions