nipreps / niworkflows

Common workflows for MRI (anatomical, functional, diffusion, etc)
https://www.nipreps.org/niworkflows
Apache License 2.0
86 stars 52 forks source link

Fill-in AFNI skull-stripping mask #194

Open effigies opened 7 years ago

effigies commented 7 years ago

See poldracklab/mriqc#552, poldracklab/mriqc#554, poldracklab/fmriprep#659.

oesteban commented 7 years ago

The fully automated process consists of three steps:

  1. Preprocessing of volume to remove gross spatial image non-uniformity artifacts and reposition the brain in a reasonable manner for convenience.
  2. Expand a spherical surface iteratively until it envelopes the brain. This is a modified version of the BET algorithm: Fast robust automated brain extraction, by Stephen M. Smith, HBM 2002 v 17:3 pp 143-155 Modifications include the use of:
    • outer brain surface
    • expansion driven by data inside and outside the surface
    • avoidance of eyes and ventricles
    • a set of operations to avoid the clipping of certain brain areas and reduce leakage into the skull in heavily shaded data
    • two additional processing stages to ensure convergence and reduction of clipped areas.
    • use of 3d edge detection, see Deriche and Monga reference in 3dedge3 -help.
  3. The creation of various masks and surfaces modeling brain and portions of the skull
  Common examples of usage:

  o 3dSkullStrip -input VOL -prefix VOL_PREFIX
     Vanilla mode, should work for most datasets.
  o 3dSkullStrip -input VOL -prefix VOL_PREFIX -push_to_edge
     Adds an agressive push to brain edges. Use this option
     when the chunks of gray matter are not included. This option
     might cause the mask to leak into non-brain areas.
  o 3dSkullStrip -input VOL -surface_coil -prefix VOL_PREFIX -monkey
     Vanilla mode, for use with monkey data.
  o 3dSkullStrip -input VOL -prefix VOL_PREFIX -ld 30
     Use a denser mesh, in the cases where you have lots of 
     csf between gyri. Also helps when some of the brain is clipped
     close to regions of high curvature.

Tips:

 I ran the program with the default parameters on 200+ datasets.
 The results were quite good in all but a couple of instances, here
 are some tips on fixing trouble spots:

 Clipping in frontal areas, close to the eye balls:
    + Try -push_to_edge option first.
      Can also try -no_avoid_eyes option.
 Clipping in general:
    + Try -push_to_edge option first.
      Can also use lower -shrink_fac, start with 0.5 then 0.4
 Problems down below:
    + Piece of cerebellum missing, reduce -shrink_fac_bot_lim 
      from default value.
    + Leakage in lower areas, increase -shrink_fac_bot_lim 
      from default value.
 Some lobules are not included:
    + Use a denser mesh. Start with -ld 30. If that still fails,
    try even higher density (like -ld 50) and increase iterations 
    (say to -niter 750). 
    Expect the program to take much longer in that case.
    + Instead of using denser meshes, you could try blurring the data 
    before skull stripping. Something like -blur_fwhm 2 did
    wonders for some of my data with the default options of 3dSkullStrip
    Blurring is a lot faster than increasing mesh density.
    + Use also a smaller -shrink_fac is you have lots of CSF between
    gyri.
 Massive chunks missing:
    + If brain has very large ventricles and lots of CSF between gyri,
    the ventricles will keep attracting the surface inwards. 
    This often happens with older brains. In such 
    cases, use the -visual option to see what is happening.
    For example, the options below did the trick in various
    instances. 
        -blur_fwhm 2 -use_skull  
    or for more stubborn cases increase csf avoidance with this cocktail
        -blur_fwhm 2 -use_skull -avoid_vent -avoid_vent -init_radius 75 
    + Too much neck in the volume might throw off the initialization
      step. You can fix this by clipping tissue below the brain with 
             @clip_volume -below ZZZ -input INPUT  
      where ZZZ is a Z coordinate somewhere below the brain.

 Large regions outside brain included:
   + Usually because noise level is high. Try @NoisySkullStrip.

Make sure that brain orientation is correct. This means the image in 
AFNI's axial slice viewer should be close to the brain's axial plane.
The same goes for the other planes. Otherwise, the program might do a lousy
job removing the skull.
effigies commented 7 years ago

Did any of those options seem useful to you? Blurring at 2 didn't do much, blurring at 4 had huge chunks of skull, and -use_skull caused a crash. 3dmask_tool only partially filled in the ventricles but didn't touch the spaces between gyri.