Back to list of all tutorials

Back to course page


Anatomical ROI analysis

This tutorial gives a brief introduction to anatomical ROI analysis which includes working with label files, extracting ROI measures from the anatomical data, group statistics etc.


1. Preparations

1.1. If You're at an Organized Course

If you are taking one of the formally organized courses, everything has been set up for you on the provided laptop. The only thing you will need to do is run the following commands in every new terminal window (aka shell) you open throughout this tutorial. Copy and paste the commands below to get started:

export SUBJECTS_DIR=$TUTORIAL_DATA/buckner_data/tutorial_subjs/group_analysis_tutorial
cd $SUBJECTS_DIR

To copy: Highlight the command in the box above, right click and select copy (or use keyboard shortcut Ctrl+c), then use the middle button of your mouse to click inside the terminal window (this will paste the command). Press enter to run the command. These two commands set the SUBJECTS_DIR variable to the directory where the data is stored and then navigates into this directory. You can now skip ahead to the tutorial (below the gray line).

1.2. If You're not at an Organized Course

If you are NOT taking one of the formally organized courses, then to follow this exercise exactly be sure you've downloaded the tutorial data set before you begin. If you choose not to download the data set you can follow these instructions on your own data, but you will have to substitute your own specific paths and subject names. These are the commands that you need to run before getting started:

<source_freesurfer>
export TUTORIAL_DATA=<path_to_your_tutorial_data>
export SUBJECTS_DIR=$TUTORIAL_DATA/buckner_data/tutorial_subjs/group_analysis_tutorial
cd $SUBJECTS_DIR

If you are not using the tutorial data you should set your SUBJECTS_DIR to the directory in which the recon(s) of the subject(s) you will use for this tutorial are located.


2. Relationship between segmentation, parcellation and LookUp Table (LUT)

In this exercise, you will examine a segmentation, parcellation, and color lookup table to understand how they are related. Open the subject in Freeview using the following command and select 'coronal' view at the top menu bar:

freeview -v 004/mri/orig.mgz \
004/mri/aparc+aseg.mgz:colormap=lut:opacity=0.4 \
-f 004/surf/lh.white:annot=aparc.annot


NOTE: The backslash allows you to copy and paste multiple lines of code as one command. We use this throughout the tutorials to display the commands in a more easy-to-read manner, while still allowing you to copy and paste. Whenever you are typing in your own commands, instead of copying and pasting a command written out across multiple lines, a backslash is not necessary.


The above command opens the orig and aparc+aseg segmentation volume (aparc+aseg.mgz) as well as the cortical surface parcellation (aparc.annot) on the white surface in the left hemisphere. Note that the default parcellation uses the Desikan/Killiany atlas. There is also the option to use the Destrieux atlas parcellation, where the surface is parcellated into more anatomical regions than the Desikan/Killiany atlas.

good_output_4.png annot_surf.jpg

Note: The aparc+aseg.mgz file shows the parcellated cortical ribbon at the same time as the segmented subcortical structures. The colormap=lut tells Freeview to display the aparc+aseg.mgz file with colors according to the look up table (LUT). The aparc+aseg.mgz uses the Desikan-Killiany atlas. To see the Destrieux atlas, you would load fsaverage/mri/aparc.a2009s+aseg.mgz Run the following command in a new terminal window to display the contents of the LUT:

less $FREESURFER_HOME/FreeSurferColorLUT.txt

You can hit the 'Page Up' and 'Page Down' buttons on your keyboard to scroll through the text file. Or click here to view the contents of the file. (To exit the less command, hit 'q' on your keyboard.)

Things to do -- Navigating between freeview and the LUT:

  1. Choose the coronal view and click on a cortical structure in the brain.
  2. See the structure name next to 'aparc+aseg' in the Cursor section below the main viewing window. For example, it may say ctx-lh-precentral. Notice which hemisphere is specified.
  3. Look at the number listed immediately after the 'aparc+aseg'. For example, it may say 1024.
  4. Find that value in the LUT, which you have opened using the command mentioned above.
  5. Verify that it is the same structure you chose in freeview.
  6. Do the same with a subcortical structure of your choice.

You can close freeview once you are done. To get out of the less command, type 'q' for quit and hit enter.


3. Label files

To accurately map a manually drawn or pre-existing label of a region of interest to several subjects in your study, you should first register your label to or draw your label on fsaverage (a template to which all subjects run with FreeSurfer have been registered to) and then use the mri_label2label command to map the label to individual subjects. An example of the command you would use is illustrated below using the FreeSurfer-generated lh.BA45_exvivo.label (Brodmann area 45, part of Broca's area involved in language). Please run:

cd $SUBJECTS_DIR
mri_label2label \
  --srcsubject fsaverage \
  --srclabel fsaverage/label/lh.BA45_exvivo.label \
  --trgsubject 004 \
  --trglabel 004/label/lh.BA45_exvivo.label \
  --hemi lh \
  --regmethod surface

For more information about this command, type mri_label2label --help inside your terminal. Important flags:

Our target subject in this example was 004. You can now view the label on this subject in Freeview. First load the subject:

freeview -v 004/mri/orig.mgz

Then on the menu bar click File > Load ROI loadroi.jpeg choose lh.BA45_exvivo.label and hit 'Open'. The label is visible in coronal slice 153. To jump to that slice, double click on the coordinates [127,127,128] next to where it says 'orig' in the Cursor window pane. The last number is the slice number. Change it to 153 and hit enter.

BAlabel.jpg

To view the label on the surface, first load the subject's inflated surface in Freeview (in another terminal window) using the command below. At the top menu bar, select the 3D view.

freeview -f 004/surf/lh.inflated

On the left menu, click on the drop down menu next to 'Curvature' and select 'Off'. Next to 'Label', select 'Load'. In the window that pops up, navigate to the label directory if it is not already in it and select lh.BA45_exvivo.label. Hit 'OK'. The label loaded on the inflated surface will look like this:
roi_surf_label.jpeg
Note: If you want to use a pre-existing label and register it to fsaverage, be aware that this might involve two instances of resampling and the results might not be as accurate as they would be if you drew the label on fsaverage. Please contact the FreeSurfer team to get more details on this process if you have any concerns. You can close freeview once you are done.


4. Individual Stats files

During the FreeSurfer processing stream, via the recon-all script, some statistical output files are generated. They are kept in each subjects' stats/ subdirectory and are generated for the subcortical segmentation (aseg) and the cortical parcellation (aparc). These tables include information on each labeled region for the individual subject. You can view these output files via the terminal or a text editor.

4.1. aseg.stats

The statistical output from the subcortical segmentation, called aseg.stats, is a regular text file and will contain the volumes of specific structures. For example, you can obtain information such as the volume of left hippocampus and its mean intensity from this file.

cd $SUBJECTS_DIR/004/stats
less aseg.stats

At the head of the text file there will be information about the command that was run, the version used, the user who ran it and a time stamp. Following this there is information about the volume of the entire brain.
The next section of this file defines the column headers, field name, and units for the rest of the table. We can expect to see the Segmentation Id, Number of Voxels, Volume, Structure Name, Intensity normMean, Intensity normStdDev, Intensity normMin, Intensity normMax, and Intensity normRange for each entry in the table. The "norm" stats are extracted for each segmented structure from $SUBJECTS_DIR/004/mri/norm.mgz.
The remainder of the table shows this information for all the structures that are labeled in the aseg. (Remember, press 'q' if you want to quit the 'less' command).

# Title Segmentation Statistics
#
# generating_program mri_segstats
# cvs_version $Id: mri_segstats.c,v 1.121 2016/05/31 17:27:11 greve Exp $
# cmdline mri_segstats --seg mri/aseg.mgz --sum stats/aseg.stats --pv mri/norm.mgz --empty --brainmask mri/brainmask.mgz --brain-vol-from-seg --excludeid 0 --excl-ctxgmwm --supratent --subcortgray --in mri/norm.mgz --in-intensity-name norm --in-intensity-units MR --etiv --surf-wm-vol --surf-ctx-vol --totalgray --euler --ctab /space/freesurfer/build/pub-releases/v6.0.0/freesurfer/ASegStatsLUT.txt --subject 004
# sysname  Linux
# hostname compute-0-39
# machine  x86_64
# user     zkaufman
# anatomy_type volume
#
# SUBJECTS_DIR /autofs/cluster/freesurfer/subjects/test/buckner_data/stable6
# subjectname 004
# Measure BrainSeg, BrainSegVol, Brain Segmentation Volume, 1262276.000000, mm^3
# Measure BrainSegNotVent, BrainSegVolNotVent, Brain Segmentation Volume Without Ventricles, 1187271.000000, mm^3
# Measure BrainSegNotVentSurf, BrainSegVolNotVentSurf, Brain Segmentation Volume Without Ventricles from Surf, 1186951.705907, mm^3
# Measure VentricleChoroidVol, VentricleChoroidVol, Volume of ventricles and choroid plexus, 69043.000000, mm^3
# Measure lhCortex, lhCortexVol, Left hemisphere cortical gray matter volume, 259221.573235, mm^3
# Measure rhCortex, rhCortexVol, Right hemisphere cortical gray matter volume, 258713.044172, mm^3
# Measure Cortex, CortexVol, Total cortical gray matter volume, 517934.617407, mm^3
# Measure lhCerebralWhiteMatter, lhCerebralWhiteMatterVol, Left hemisphere cerebral white matter volume, 239218.899217, mm^3
# Measure rhCerebralWhiteMatter, rhCerebralWhiteMatterVol, Right hemisphere cerebral white matter volume, 236617.189283, mm^3
# Measure CerebralWhiteMatter, CerebralWhiteMatterVol, Total cerebral white matter volume, 475836.088500, mm^3
# Measure SubCortGray, SubCortGrayVol, Subcortical gray matter volume, 66911.000000, mm^3
# Measure TotalGray, TotalGrayVol, Total gray matter volume, 686541.617407, mm^3
# Measure SupraTentorial, SupraTentorialVol, Supratentorial volume, 1131346.705907, mm^3
# Measure SupraTentorialNotVent, SupraTentorialVolNotVent, Supratentorial volume, 1062303.705907, mm^3
# Measure SupraTentorialNotVentVox, SupraTentorialVolNotVentVox, Supratentorial volume voxel count, 1060851.000000, mm^3
# Measure Mask, MaskVol, Mask Volume, 1740098.000000, mm^3
# Measure BrainSegVol-to-eTIV, BrainSegVol-to-eTIV, Ratio of BrainSegVol to eTIV, 0.701763, unitless
# Measure MaskVol-to-eTIV, MaskVol-to-eTIV, Ratio of MaskVol to eTIV, 0.967408, unitless
# Measure lhSurfaceHoles, lhSurfaceHoles, Number of defect holes in lh surfaces prior to fixing, 70, unitless
# Measure rhSurfaceHoles, rhSurfaceHoles, Number of defect holes in rh surfaces prior to fixing, 59, unitless
# Measure SurfaceHoles, SurfaceHoles, Total number of defect holes in surfaces prior to fixing, 129, unitless
# Measure EstimatedTotalIntraCranialVol, eTIV, Estimated Total Intracranial Volume, 1798722.304401, mm^3
# SegVolFile mri/aseg.mgz
# SegVolFileTimeStamp  2017/01/19 21:37:44
# ColorTable /space/freesurfer/build/pub-releases/v6.0.0/freesurfer/ASegStatsLUT.txt
# ColorTableTimeStamp 2017/01/18 17:00:02
# InVolFile  mri/norm.mgz
# InVolFileTimeStamp  2017/01/19 04:08:57
# InVolFrame 0
# PVVolFile  mri/norm.mgz
# PVVolFileTimeStamp  2017/01/19 04:08:57
# Excluding Cortical Gray and White Matter
# ExcludeSegId 0 2 3 41 42
# VoxelVolume_mm3 1
# TableCol  1 ColHeader Index
# TableCol  1 FieldName Index
# TableCol  1 Units     NA
# TableCol  2 ColHeader SegId
# TableCol  2 FieldName Segmentation Id
# TableCol  2 Units     NA
# TableCol  3 ColHeader NVoxels
# TableCol  3 FieldName Number of Voxels
# TableCol  3 Units     unitless
# TableCol  4 ColHeader Volume_mm3
# TableCol  4 FieldName Volume
# TableCol  4 Units     mm^3
# TableCol  5 ColHeader StructName
# TableCol  5 FieldName Structure Name
# TableCol  5 Units     NA
# TableCol  6 ColHeader normMean
# TableCol  6 FieldName Intensity normMean
# TableCol  6 Units     MR
# TableCol  7 ColHeader normStdDev
# TableCol  7 FieldName Itensity normStdDev
# TableCol  7 Units     MR
# TableCol  8 ColHeader normMin
# TableCol  8 FieldName Intensity normMin
# TableCol  8 Units     MR
# TableCol  9 ColHeader normMax
# TableCol  9 FieldName Intensity normMax
# TableCol  9 Units     MR
# TableCol 10 ColHeader normRange
# TableCol 10 FieldName Intensity normRange
# TableCol 10 Units     MR
# NRows 45
# NTableCols 10
# ColHeaders  Index SegId NVoxels Volume_mm3 StructName normMean normStdDev normMin normMax normRange
  1   4     33163    33215.1  Left-Lateral-Ventricle            12.6416    10.9375     0.0000    77.0000    77.0000
  2   5      1200     1221.1  Left-Inf-Lat-Vent                 26.6925    14.4286     0.0000    75.0000    75.0000
  3   7     12677    13179.5  Left-Cerebellum-White-Matter      76.4266     8.8658    13.0000   106.0000    93.0000
  4   8     51530    51612.4  Left-Cerebellum-Cortex            49.6198    11.7537     0.0000   100.0000   100.0000
  5  10      7568     7259.4  Left-Thalamus-Proper              74.9564    13.4454     2.0000   126.0000   124.0000
  6  11      5505     5379.5  Left-Caudate                      64.2171    11.3418    30.0000   106.0000    76.0000
  7  12      7815     7535.4  Left-Putamen                      68.3104    10.7348    11.0000   104.0000    93.0000
-
-
-

4.2. aparc.stats

The statistical output from the cortical parcellation, called lh.aparc.stats and rh.aparc.stats, is a regular text file and will contain the thickness of specific structures. For example, you can obtain information such as, how big is left superior temporal gyrus and its average thickness from this file.

cd $SUBJECTS_DIR/004/stats
less lh.aparc.stats

This file takes the same format as the aseg.stats. The measures at the top show the number of vertices in the cortex (NumVert) and the surface area of the cortex (SurfArea). This part of the file also tells us that the lh.aparc.annot is being used as the annotation file (AnnotationFile ../label/lh.aparc.annot).
The next section of this file defines the column headers, field name, and units for the rest of the table. We can expect to see the Structure Name, Number of Vertices, Surface Area, Gray Matter Volume, Average Thickness, Thickness StDev, Integrated Rectified Mean Curvature, Integrated Rectified Gaussian Curvature, Folding Index and Intrinsic Curvature Index for each entry in the table.
The remainder of the table shows this information for all the structures that are labeled in the aparc. (Again 'q' will exit 'less').

# Table of FreeSurfer cortical parcellation anatomical statistics
#
# CreationTime 2017/01/20-02:14:03-GMT
# generating_program mris_anatomical_stats
# cvs_version $Id: mris_anatomical_stats.c,v 1.79 2016/03/14 15:15:34 greve Exp $
# mrisurf.c-cvs_version $Id: mrisurf.c,v 1.781.2.6 2016/12/27 16:47:14 zkaufman Exp $
# cmdline mris_anatomical_stats -th3 -mgz -cortex ../label/lh.cortex.label -f ../stats/lh.aparc.stats -b -a ../label/lh.aparc.annot -c ../label/aparc.annot.ctab 004 lh white
# sysname  Linux
# hostname compute-0-39
# machine  x86_64
# user     zkaufman
#
# SUBJECTS_DIR /autofs/cluster/freesurfer/subjects/test/buckner_data/stable6
# anatomy_type surface
# subjectname 004
# hemi lh
# AnnotationFile ../label/lh.aparc.annot
# AnnotationFileTimeStamp 2017/01/19 20:15:12
# Measure Cortex, NumVert, Number of Vertices, 143669, unitless
# Measure Cortex, WhiteSurfArea, White Surface Total Area, 97596.1, mm^2
# Measure Cortex, MeanThickness, Mean Thickness, 2.34308, mm
# Measure BrainSeg, BrainSegVol, Brain Segmentation Volume, 1262276.000000, mm^3
# Measure BrainSegNotVent, BrainSegVolNotVent, Brain Segmentation Volume Without Ventricles, 1187271.000000, mm^3
# Measure BrainSegNotVentSurf, BrainSegVolNotVentSurf, Brain Segmentation Volume Without Ventricles from Surf, 1186951.705907, mm^3
# Measure Cortex, CortexVol Total cortical gray matter volume, 517934.617407, mm^3
# Measure SupraTentorial, SupraTentorialVol, Supratentorial volume, 1131346.705907, mm^3
# Measure SupraTentorialNotVent, SupraTentorialVolNotVent, Supratentorial volume, 1062303.705907, mm^3
# Measure EstimatedTotalIntraCranialVol, eTIV, Estimated Total Intracranial Volume, 1798722.304401, mm^3
# NTableCols 10
# TableCol  1 ColHeader StructName
# TableCol  1 FieldName Structure Name
# TableCol  1 Units     NA
# TableCol  2 ColHeader NumVert
# TableCol  2 FieldName Number of Vertices
# TableCol  2 Units     unitless
# TableCol  3 ColHeader SurfArea
# TableCol  3 FieldName Surface Area
# TableCol  3 Units     mm^2
# TableCol  4 ColHeader GrayVol
# TableCol  4 FieldName Gray Matter Volume
# TableCol  4 Units     mm^3
# TableCol  5 ColHeader ThickAvg
# TableCol  5 FieldName Average Thickness
# TableCol  5 Units     mm
# TableCol  6 ColHeader ThickStd
# TableCol  6 FieldName Thickness StdDev
# TableCol  6 Units     mm
# TableCol  7 ColHeader MeanCurv
# TableCol  7 FieldName Integrated Rectified Mean Curvature
# TableCol  7 Units     mm^-1
# TableCol  8 ColHeader GausCurv
# TableCol  8 FieldName Integrated Rectified Gaussian Curvature
# TableCol  8 Units     mm^-2
# TableCol  9 ColHeader  FoldInd
# TableCol  9 FieldName  Folding Index
# TableCol  9 Units      unitless
# TableCol 10 ColHeader CurvInd
# TableCol 10 FieldName Intrinsic Curvature Index
# TableCol 10 Units     unitless
# ColHeaders StructName NumVert SurfArea GrayVol ThickAvg ThickStd MeanCurv GausCurv FoldInd CurvInd
bankssts                                 1549   1071   2450  2.312 0.392     0.117     0.027       15     1.7
caudalanteriorcingulate                  1313    872   2385  2.418 0.765     0.138     0.034       28     1.6
caudalmiddlefrontal                      3199   2130   5942  2.510 0.511     0.123     0.031       36     4.1
cuneus                                   2562   1649   3157  1.821 0.381     0.144     0.039       40     3.8
entorhinal                                563    426   1731  3.091 0.584     0.121     0.034        5     0.7
-
-
-


5. Group stats files

This section will run you through using the stats directory of the subjects to perform group stats of certain structures that may be of interest to your study. The following commands will help you combine the data of the subjects you are analyzing into one table that will be easily read into a spreadsheet program. We have considered 6 subjects as examples (004, 021, 040, 067, 080, 092) in the following sections. Set your SUBJECTS_DIR to the path where you have your subjects to be analyzed.

export SUBJECTS_DIR=$TUTORIAL_DATA/buckner_data/tutorial_subjs/group_analysis_tutorial
cd $SUBJECTS_DIR

5.1. Table of segmentation volumes

This section explains how to create a table of segmentation volumes using the 6 subjects mentioned above.

asegstats2table --subjects 004 021 040 067 080 092 \
  --segno 11 17 18 \
  --tablefile aseg.vol.table

The input for the --segno flag (11, 17, and 18) correspond to the segmentation label of left caudate, left hippocampus, and left amygdala, respectively. (You can create a table with all of the labels, not just these three, by omitting the --segno part.) Click here if you would like to view the list of labels and their corresponding ID numbers again. The file aseg.vol.table is your output - a text file consisting of the subjects mentioned in the command above and the values for the structures requested along with the measures in the header. The information in this text file is formatted so it can be easily imported into a spreadsheet program (often used as input for many statistical analysis programs). If you do the ls command, you should see that the text file aseg.vol.table has been created. To see what the file looks like, do:

less aseg.vol.table

(press 'q' to exit). To see what the file looks like, you can open it with gedit or any other text editing or spreadsheet application:

gedit aseg.vol.table

Note: Mac users should run

open -e aseg.vol.table

In the table, the first cell is volume indicating that the measure is a volume in mm3 for all of the cells to the right. The subject IDs can be found below volume (seen as 4, 21, 40, 67, 80, 92). You'll notice that in the examples we've considered here for asegstats2table, each subject is a 3 digit number (004, 021 etc).

5.2. Table of segmentation mean intensities

The purpose of this section is to demonstrate how you can change what measure you collect for your spreadsheet from volume to mean intensity using the asegstats2table command.

asegstats2table \
  --subjects 004 021 040 067 080 092 \
  --segno 11 17 18 \
  --meas mean \
  --tablefile aseg.mean-intensity.table

You can load the table into a spreadsheet as explained in the previous section or view aseg.mean-intensity.table with a text editor, like gedit.

5.3. Table of white matter parcellation volumes

The purpose of this section is to show how you can change which segmentation atlas you get stats from (and thus which structures):

asegstats2table \
  --subjects 004 021 040 067 080 092 \
  --segno 3007 3021 3022 4022 \
  --stats wmparc.stats \
  --tablefile wmparc.vol.table

This prints out stats on the white matter parcellation.

5.4. Table of the surface area of each cortical parcellation in the Desikan atlas

This section demonstrates how to create a table of the surface area of each cortical parcellation in the Desikan atlas (surface area is the default measure).

aparcstats2table --hemi lh \
  --subjects 004 021 040 067 080 092 \
  --tablefile lh.aparc.area.table

Feel free to take a look at those results.

5.5. Table of the average thickness of each cortical parcellation in the Destrieux atlas

The purpose of this section is to show how to change the summary measure (in this case, to thickness) and the parcellation atlas (to Destrieux's atlas).

aparcstats2table --hemi lh \
  --subjects 004 021 040 067 080 092 \
  --meas thickness \
  --parc aparc.a2009s \
  --tablefile lh.aparc.a2009.thickness.table

You can now load the resulting table into a spreadsheet. Remember, for more information on individual flags or how to use these commands, you can run:

aparcstats2table --help
asegstats2table --help


Back to list of all tutorials Back to course page