Bayesian Segmentation with Histological Atlas "NextBrain"
Visit the homepage of the NextBrain project for further information on this atlas.
Author: Juan Eugenio Iglesias
E-mail: jiglesiasgonzalez [at] mgh.harvard.edu
Rather than directly contacting the author, please post your questions on this module to the FreeSurfer mailing list at freesurfer [at] nmr.mgh.harvard.edu
Relevant publications:
"A probabilistic histological atlas of the human brain for MRI segmentation", Casamitjana et al., accepted. Preprint available here.
"Fast segmentation with the NextBrain histological atlas", Puonti et al., submitted. Preprint available here.
Contents
- General Description
- Installation
- Usage
SynthMorph version
- Legacy mode
- Frequently asked questions (FAQ)
1. General Description
This module uses NextBrain, our new probabilistic atlas of the human brain, to segment ~300 distinct ROIs per hemisphere on in vivo or ex vivo scans (including single hemispheres). Segmentation relies on a Bayesian algorithm and is thus robust against changes in MRI pulse sequence (e.g., T1-weighted, T2-weighted, FLAIR, etc). Sample slices of the atlas and the segmentation of the sample subject "bert" are shown below:
2. Installation
The first time you run this module, it will prompt you to download the atlas and machine learning model files. Follow the instructions on the screen to obtain the files.
3. Usage
The default version of the algorithm is compatible with in vivo and ex vivo brains and relies on FireANTs (Jena et al) for the registration part of the algorithm. The command line is:
mri_histo_atlas_segment_fireants INPUT_SCAN OUTPUT_DIRECTORY GPU THREADS [MODE]
INPUT_SCAN: scan to process, in mgz or nii(.gz) format.
OUTPUT_DIRECTORY: directory where segmentations, volume files, etc, will be created (more on this below).
GPU: set to 1 to use the GPU (faster, but you many run out of memory!).
THREADS: number of CPU threads used by the code (set to -1 to use all available threads).
MODE (optional): type of scan: invivo (default), exvivo, cerebrum (ex vivo without brainstem or cerebellum), hemi (ex vivo with single cerebral hemisphere).
The output directory will contain the following files:
seg.[left/right].nii.gz: segmentation of left/right hemisphere
lut.txt: the lookup table to visualize seg.[left/right].nii.gz, for convenience
vols.[left/right].csv: files with volumes of the brain regions segmented by the atlas, in CSV format.
supersynth.nii.gz: segmentation of the scan at the whole structure level (from the foundation model)
supersynth.vols.csv: volumes estimated by foundation model
4. SynthMorph version
There is a version of the code that estimates the registration with SynthMorph (Hoffmann et al., Imaging Neuroscience, 2024), rather than FireANTs. This version is very good for 1mm isotropic in vivo scans. However, SynthMorph relies heavily on fitting the boundaries of whole structures and does not the map smaller regions (e.g., thalamic nuclei) as well as the FireANTs version. Therefore, we do not recommend it for images with resolution better than 1mm isotropic. Also, it does not support ex vivo scans, cerebra, or single hemispheres. the command is:
mri_histo_atlas_segment_synthmorph INPUT_SCAN OUTPUT_DIRECTORY GPU THREADS
The input arguments and structure of the output directory are very similar to those of mri_histo_atlas_segment_fireants.
5. Legacy mode
We discourage users from using this version, which we only keep for compatibility and reproducibility.
Our original implementation (still available for compatibility and reproducibilityw) used a "proper" Bayesian inference algorithm that makes segmentation incredibly slow (tens of hours) unless a GPU with pretty large RAM is available.
To segment a brain MRI scan,
mri_histo_atlas_segment_fullbayesian INPUT_SCAN OUTPUT_DIRECTORY ATLAS_MODE GPU THREADS [BF_MODE] [GMM_MODE]
where:
INPUT_SCAN: scan to process, in mgz or nii(.gz) format.
OUTPUT_DIRECTORY: directory where segmentations, volume files, etc, will be created (more on this below).
ATLAS_MODE : full (atlas with all 333 labels) or simplified (simpler brainstem protocol used by fast versions; recommended)
GPU: set to 1 to use the GPU (we highly recommend using a GPU to run this module; without a GPU, running this module on a single scan can take tens of hours). The GPU requirements depend on the image but are about 24GB of memory.
THREADS: number of CPU threads used by the code (set to -1 to use all available threads).
BF_MODE (optional): bias field mode: dct (default), polynomial, or hybrid.
GMM_MODE (optional): gaussian mixture model (GMM) mode: must be 1mm unless you define your own (see FAQ below).
In the output directory, you will find:
bf_corrected.mgz: a bias field corrected version of the input scan.
SynthSeg.mgz: SynthSeg segmentation of the input (which we use in preprocessing and to initialize Gaussian parameters).
MNI_registration.mgz: EasyReg registration to MNI space, use in preprocessing.
seg_[left/right].mgz: segmentation into 333 ROIs of the left and right hemisphere, respectively.
vols_[left/right].csv: CSV spreadsheet with the volumes of the different ROIs, computed from the posteriors (soft segmentations).
lookup_table.txt: FreeSurfer lookup table mapping label indices to brain anatomy. You need it when visualizing the segmentations with Freeview.
6. Frequently asked questions (FAQ)
I have an ex vivo hemisphere with cerebellum and/or brainstem
If you use the hemi mode, you will not get the cerebellum or brainstem. Use the exvivo mode instead (with the caveat that you may lose some voxels around the medical wall, which may get assigned to the contralateral hemisphere).
Can the exvivo model handle arbitrary orientations of the input
No, it cannot. You need to manually reorient the brain to RAS (e.g., with Freeview).
Do I need a GPU?
Certainly no! The code should run in less than half an hour on any semi-modern workstation, if you allocate enough threads (or about two hours for an ex vivo scan at 0.25mm resolution).
Do I really need a GPU for the 'full' Bayesian version?
Technically, no. In practice, yes. On a modern GPU, the code runs in an hour or less. On the CPU, it depends on the number of threads, but it can easily take a whole day or more.
What do the BF_MODE and GMM_MODE arguments do in the full Bayesian version?
You should not need to touch these, but the BF_MODE changes the set of basis functions for bias field correction and you could potentially try tinkering with it if the bias field correction fails (i.e., if bf_corrected.mgz has noticeable bias). GMM_MODE allows you to change the grouping of ROIs into tissue classes (advanced mode!). The GMM model is crucial as it determines how different brain regions are grouped into tissue types for the purpose of image intensity modeling. This is specified though a set of files that should be found under 'data' in the atlas directory:
data/gmm_components_[GMM_MODE].yaml: defines tissue classes and specificies the number of components of the corresponding GMM
data/combined_aseg_labels_[GMM_MODE].yaml defines the labels that belong to each tissue class
data/combined_atlas_labels_[GMM_MODE].yaml defines FreeSurfer ('aseg') labels that are used to initialize the parameters of each class.
We distribute a GMM_MODE named "1mm" that we have used in our experiments, and which is the default mode of the code. If you want to use your own model, you will need to create another triplet of files of your own (use the 1mm version as template).