Software version described:


mri_annotation2label - Inputs an annotation file and produces corresponding label files.


mri_annotation2label [Flagged arguments]


Required Flagged Arguments

--subject <subjid>

source subject

--hemi <lh or rh>

hemisphere (with surface)

Optional Arguments

--label <int>

extract only a single label


output will be base-XXX.label

--outdir dir

output will be dir/

--seg segfile

output will be segmentation 'volume'

--ctab colortable

colortable like FreeSurferColorLUT.txt

--border borderfile

output will be a binary overlay of the parc borders

--annotation annotation

selects input annotation file, as found in SUBJECTS_DIR/labels. Default is 'aparc'


specify SUBJECTS_DIR on the command line

--surface surfacename

name of surface, default is 'white' if omitted. This selects the surface file that the program will read in order to create RAS coordinates for each vertex listed in a label file. Argument can also be --surf

--stat statfile

surface overlay file (curv or volume format)

--lobes <lobesfile>

create an annotation based on cortical lobes. Note that the precentral and postcentral labels are not included as part of the 'frontal' or 'parietal' lobes. The lobar annotation is saved to <lobesfile>.

--lobesStrict <lobesfile>

use a slightly stricter lobe definition that adds the precentral to the 'frontal' and includes the postcentral with the 'parietal' lobe. The lobar annotation is saved to <lobesfile>.

--lobesStrictPHCG <lobesfile>

use stricter lobe definition, and adds an additional lobe called parahippocampalgyrus which includes parahippocampal, entorhinal, temporalpole, and fusiform. The lobar annotation is saved to <lobesfile>.


The main purpose of this program is to convert an annotation file into multiple label files or into a segmentation 'volume'. It can also create a border overlay. Optionally it can create output files that contain label information in other forms. (This program cannot export the annotation file's LUT to text format -- if you need to do that, for example to verify it, you could use mris_anatomical_stats.

Inputs are specified via subject, hemisphere, and optionally, if the defaults are not wanted, a base name for the annotation, and a specific surface to be used for the R,A,S coordinates that will be placed in the label files.

Details for 'seg' output file label numbers

The seg option causes the program to output a 'volume-encoded surface segmentation file'. This is simply the list of per-vertex label values (count = count of vertices), dumped into a file whose format looks like an FS volume file... which some other FS programs are equipped to load. (Ie: it is not actually volume data). See details below.

The label values stored in this situation may be recorded verbatim, or may be increased by an offset amount segbase. By default, these label values are intended to match the index for the label as found in $FREESURFER_HOME/FreeSurferColorLUT.txt; This requires that the annotation file base name be either aparc or aparc.a2005s, in order to invoke the following behavior: If aparc and hemi=lh, then segbase=1000, with segbase values for rh and for aparc.a2005s. This makes the index match that found in aparc+aseg.mgz. If the annotation is neither aparc nor aparc.a2005s, then segbase=0. This behavior can be overridden by manually specifying a segbase with --segbase.

(This doesn't sound like the complete story to me, because I don't see how the label values got into the annotation file with their segbase offsets removed in the first place. --GW).

Probably applies to obsolete version

The human-readable names that correspond to the annotation indices for aparc depend upon how the annotations were created. They are created with the program mris_ca_label, and the human readable names are in the file given as the argument to the -t flag. Unfortunately, this information is not maintained inside the annotation file, and it must be supplied to mri_annotation2label through the --table flag.


Example 1

mri_annotation2label --subject LW \
  --hemi rh \
  --labelbase ./labels/aparc-rh

This will get annotations from $SUBJECTS_DIR/LW/label/rh_aparc.annot and then create about 94 label files: aparc-rh-001.label, aparc-rh-002.label, ... Note that the directory 'labels' must already exist.

Example 2

mri_annotation2label --subject LW \
  --hemi rh
  --outdir ./labels

This will do the same thing as above except that the output files will have names of the form lh.S_occipital_anterior.label


If the name of the label base does not include a forward slash (ie, '/') then the program will attempt to put the label files in $SUBJECTS_DIR/subject/label. So, if you want the labels to go into the current directory, make sure to put a './' in front of the label base.


  1. Start tksurfer:
    • tksurfer -LW lh inflated read_annotations lh_aparc
    • When a point is clicked on, it prints out a lot of info, including something like:
      • annot = S_temporalis_sup (93, 3988701) (221, 220, 60)
      This indicates that annotion number 93 was hit. Save this point.
  2. Start another tksurfer and load the label:
    • tksurfer -LW lh inflated [edit label field and hit the 'Read' button]
    • Verify that label pattern looks like the annotation as seen in the tksurfer window from step 1.
  3. Load label into tkmedit
    • tkmedit LW T1 [Load the label]
    • [Goto the point saved from step 1]

See Also

mris_label2annot, LabelsClutsAnnotationFiles

Reporting Bugs

Report bugs to < >