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

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:

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

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 Deskian/Killiany atlas. There is also the option to use the Destrieux atlas parcellation, where the surface is parcellated into more anatomical regions than the Deskian/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. 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 (Look Up Table):

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.label (Brodmann area 45, part of Broca's area involved in language). Please run:

mri_label2label \
  --srcsubject fsaverage \
  --srclabel fsaverage/label/lh.BA45.label \
  --trgsubject 004 \
  --trglabel 004/label/lh.BA45.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.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.


To view the label on the surface, first load the 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.label. Hit 'OK'. The label loaded on the inflated surface will look like this:


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.

3.1. Creating a Single Label

In FS version 7.1.1 If you just need one label you can create a label instead of annotations. You can click “Path/Custom Fill” icon on the left panel, draw a closed path and use custom fill tool to draw a label. Just like in TkSurfer if you have used it before.

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 2011/04/27 22:18:58 nicks Exp $
# cmdline mri_segstats --seg mri/aseg.mgz --sum stats/aseg.stats --pv mri/norm.mgz --empty --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 --ctab /usr/local/freesurfer/stable5_1_0/ASegStatsLUT.txt --subject 004
# sysname  Linux
# hostname compute-0-36.local
# machine  x86_64
# user     khoa
# anatomy_type volume
# SUBJECTS_DIR /autofs/cluster/freesurfer/test/subjects/x86_64/buckner_data/group_study_fs5.1.0
# subjectname 004
# Measure lhCortex, lhCortexVol, Left hemisphere cortical gray matter volume, 243583.395631, mm^3
# Measure rhCortex, rhCortexVol, Right hemisphere cortical gray matter volume, 245552.725775, mm^3
# Measure Cortex, CortexVol, Total cortical gray matter volume, 489136.121407, mm^3
# Measure lhCorticalWhiteMatter, lhCorticalWhiteMatterVol, Left hemisphere cortical white matter volume, 257212.437500, mm^3
# Measure rhCorticalWhiteMatter, rhCorticalWhiteMatterVol, Right hemisphere cortical white matter volume, 254883.390625, mm^3
# Measure CorticalWhiteMatter, CorticalWhiteMatterVol, Total cortical white matter volume, 512095.828125, mm^3
# Measure SubCortGray, SubCortGrayVol, Subcortical gray matter volume, 180840.000000, mm^3
# Measure TotalGray, TotalGrayVol, Total gray matter volume, 669976.121407, mm^3
# Measure SupraTentorial, SupraTentorialVol, Supratentorial volume, 1181347.254146, mm^3
# Measure IntraCranialVol, ICV, Intracranial Volume, 1792908.998979, mm^3
# SegVolFile mri/aseg.mgz
# SegVolFileTimeStamp  2011/05/18 20:50:12
# ColorTable /usr/local/freesurfer/stable5_1_0/ASegStatsLUT.txt
# ColorTableTimeStamp 2011/05/14 14:56:11
# InVolFile  mri/norm.mgz
# InVolFileTimeStamp  2011/05/18 13:09:34
# InVolFrame 0
# PVVolFile  mri/norm.mgz
# PVVolFileTimeStamp  2011/05/18 13:09:34
# 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     31490    31490.0  Left-Lateral-Ventricle            13.5672    11.0434     0.0000    79.0000    79.0000
  2   5      1416     1416.0  Left-Inf-Lat-Vent                 32.9812    14.4618     4.0000    87.0000    83.0000
  3   7     13623    13623.0  Left-Cerebellum-White-Matter      88.0573     8.7477    41.0000   123.0000    82.0000
  4   8     46105    46105.0  Left-Cerebellum-Cortex            58.5936     9.9359    16.0000   100.0000    84.0000
  5  10      6951     6951.0  Left-Thalamus-Proper              83.1834    11.8098    16.0000   121.0000   105.0000
  6  11      5942     5942.0  Left-Caudate                      67.7429    12.2442    22.0000    99.0000    77.0000
  7  12      8828     8828.0  Left-Putamen                      74.2015    10.0100    21.0000   107.0000    86.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 2011/10/21-15:36:36-GMT
# generating_program mris_anatomical_stats
# cvs_version $Id: mris_anatomical_stats.c,v 1.72 2011/03/02 00:04:26 nicks Exp $
# mrisurf.c-cvs_version $Id: mrisurf.c,v 1.693.2.2 2011/04/27 19:21:05 nicks Exp $
# cmdline mris_anatomical_stats -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-36.local
# machine  x86_64
# user     khoa
# SUBJECTS_DIR /autofs/cluster/freesurfer/test/subjects/x86_64/buckner_data/group_study_fs5.1.0
# anatomy_type surface
# subjectname 004
# hemi lh
# AnnotationFile ../label/lh.aparc.annot
# AnnotationFileTimeStamp 2011/10/21 11:22:04
# Measure Cortex, NumVert, Number of Vertices, 139655, unitless
# Measure Cortex, WhiteSurfArea, White Surface Total Area, 94794.7, mm^2
# Measure Cortex, MeanThickness, Mean Thickness, 2.31382, mm
# 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                                 1519   1044   2415  2.257 0.498     0.137     0.046       19     2.9
caudalanteriorcingulate                  1296    855   2535  2.713 0.741     0.163     0.074       29     3.5
caudalmiddlefrontal                      3322   2216   6445  2.578 0.561     0.142     0.056       42     7.7
cuneus                                   2467   1593   2996  1.742 0.393     0.173     0.081       49     8.0
entorhinal                                558    408   1936  3.268 0.935     0.138     0.052        6     1.2

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

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

where 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

FsTutorial/AnatomicalROI (last edited 2021-01-19 18:44:05 by DevaniCordero)