User Tools

Site Tools


mirecc:mireccanat:free_surfer

runFREE.sh Example script

Run freesurfer on the same raw image that was used for first (not the nifti file, but the .dcm used to make the nifti file).

  • freesurfer converts the image from dicom, to a coronally sliced .mgz file

the following code is a sample script that will run all stages of freesurfer segmentation:

#!/bin/bash 
 
#### add the paths to freesurfer if not already recognized and execute the set-up script #### 
#export FREESURFDIR=/usr/local/packages/freesurfer/ 
#. ${FREESURFDIR}/SetUpFreeSurfer.sh 
 
SUBJ=$1 
SERIES=$2 
RAWDIR=/path/to/raw/data/$SUBJ/series${SERIES} 
FREEOUT=/path/to/your/freesurfer/SUBJECTS_DIR 
 
## execute the variable, freesurfer requires this to be set, unless using absolute paths ### 
export SUBJECTS_DIR=$FREEOUT 
 
cd $SUBJECTS_DIR  
### creates the freesurfer data structure for your subject, converts the raw data to mgz, sets your subject name 
recon-all -i $RAWDIR/*${SUBJ}_${SERIES}_01_00001.dcm -s $SUBJ 
### runs all stages of freesurfer segmentation on your subject 
recon-all -all -s $SUBJ 

to actually run the above script:

 
bash -x runFREE SUBJ# SERIES# 
ex:bash -x runFREE 20080227_12345 300 

of course everything in the runFREE.sh script can be run from the command line as well.

Convert FreeSurfer Segmentation

once the freesurfer segmentation has completed, you need to convert the segmentations from freesurfer space back to the original space.

  • tkregister2 is used to get the conversion matrix
  • mri_label2vol is used to apply this matrix to the aseg.mgz segmentation label
    • by using this method there is no interpolation, and the segmentations retain their original volume labels

below is a sample script that will obtain the transformation matrix, apply it to the segmentation, then convert the segmentation to LAS orientation (remember first segmentation is in LAS). also, it includes the extraction of the individual regions of interest from the large aseg volume that contains all ROIs. then using a similar method as first, they are numbered 1 for L_side and 2 for R_side to make keeping track of them easier.

conveniently if you are directly comparing freesurfer and first segmentations they are labeled with the same values by default.
if you are extracting other regions that first does not segment, the label values can be seen in the '${SUBJECTS_DIR}/<subject name>/stats/aseg.stats' file

#!/bin/bash 
 
SUBJ=$1 
FREEDIR=~/path/to/freesurfer/data/$SUBJ/mri 
OUTDIR=~/path/to/put/resulting/ROI/files/$SUBJ 
 
mkdir -p $OUTDIR 
 
##create a registration matrix from coronal to original space 
tkregister2 --mov $FREEDIR/rawavg.mgz --targ $FREEDIR/aseg.mgz --regheader --reg $OUTDIR/register.dat --noedit 
##convert the aseg into original space 
mri_label2vol --seg $FREEDIR/aseg.mgz --temp $FREEDIR/rawavg.mgz --reg $OUTDIR/register.dat --o $OUTDIR/aseg.native.nii.gz 
 
##put the native space aseg into LAS 
fslwrapbxh $OUTDIR  #creates bxh headers 
bxhreorient --orientation=LAS $OUTDIR/aseg.native.bxh $OUTDIR/tmp.bxh  #converts to LAS orientation 
bxh2analyze -s --niigz $OUTDIR/tmp.bxh $OUTDIR/aseg.native.LAS  #converts to .nii.gz 
 
## by thresholding just above and below the label value, then dividing by the value you can extract a specific ROI and set its value to 1 
 
##create ROIs for Amyg 
fslmaths $OUTDIR/aseg.native.LAS -thr 17.99 -uthr 18.01 -div 18 $OUTDIR/tmp_L_Amyg_free 
fslmaths $OUTDIR/tmp_L_Amyg_free -div $OUTDIR/tmp_L_Amyg_free $OUTDIR/tmp_L_Amyg_free 
 
fslmaths $OUTDIR/aseg.native.LAS -thr 53.99 -uthr 54.01 -div 54 $OUTDIR/tmp_R_Amyg_free 
## then by multiplying the R ROI by 2, that changes its label value to 2 before adding L and R together 
fslmaths $OUTDIR/tmp_R_Amyg_free -div $OUTDIR/tmp_R_Amyg_free -mul 2 -add $OUTDIR/tmp_L_Amyg_free $OUTDIR/amyg_free 
 
##create ROIs for Hipp 
fslmaths $OUTDIR/aseg.native.LAS -thr 16.99 -uthr 17.01 -div 17 $OUTDIR/tmp_L_Hipp_free 
fslmaths $OUTDIR/tmp_L_Hipp_free -div $OUTDIR/tmp_L_Hipp_free $OUTDIR/tmp_L_Hipp_free 
 
fslmaths $OUTDIR/aseg.native.LAS -thr 52.99 -uthr 53.01 -div 53 $OUTDIR/tmp_R_Hipp_free 
fslmaths $OUTDIR/tmp_R_Hipp_free -div $OUTDIR/tmp_R_Hipp_free -mul 2 -add $OUTDIR/tmp_L_Hipp_free $OUTDIR/hipp_free 
 
##create ROIs for Accu 
fslmaths $OUTDIR/aseg.native.LAS -thr 25.99 -uthr 26.01 -div 26 $OUTDIR/tmp_L_Accu_free 
fslmaths $OUTDIR/tmp_L_Accu_free -div $OUTDIR/tmp_L_Accu_free $OUTDIR/tmp_L_Accu_free 
 
fslmaths $OUTDIR/aseg.native.LAS -thr 57.99 -uthr 58.01 -div 58 $OUTDIR/tmp_R_Accu_free 
fslmaths $OUTDIR/tmp_R_Accu_free -div $OUTDIR/tmp_R_Accu_free -mul 2 -add $OUTDIR/tmp_L_Accu_free $OUTDIR/accu_free 
 
##create ROIs for Caud 
fslmaths $OUTDIR/aseg.native.LAS -thr 10.99 -uthr 11.01 -div 11 $OUTDIR/tmp_L_Caud_free 
fslmaths $OUTDIR/tmp_L_Caud_free -div $OUTDIR/tmp_L_Caud_free $OUTDIR/tmp_L_Caud_free 
 
fslmaths $OUTDIR/aseg.native.LAS -thr 49.99 -uthr 50.01 -div 50 $OUTDIR/tmp_R_Caud_free 
fslmaths $OUTDIR/tmp_R_Caud_free -div $OUTDIR/tmp_R_Caud_free -mul 2 -add $OUTDIR/tmp_L_Caud_free $OUTDIR/caud_free 
 
## removes all temporary files from above 
rm $OUTDIR/tmp* 

by using fslstats -V, you can obtain the count of the voxels with the appropriate label.

  • this can be done from the command line, or included in the above script
touch $OUTDIR/free_vols.txt 
for input in amyg_free hipp_free accu_free caud_free; do 
echo "$OUTDIR/$input L" >> $OUTDIR/free_vols.txt 
fslstats $OUTDIR/$input -u 1.1 -V >> $OUTDIR/free_vols.txt 
echo "$OUTDIR/$input R" >> $OUTDIR/free_vols.txt 
fslstats $OUTDIR/$input -l 1.1 -V >> $OUTDIR/free_vols.txt 
done 
mirecc/mireccanat/free_surfer.txt · Last modified: 2014/08/04 16:03 (external edit)