# FSL Maths Commands

The information below comes from “fslmaths –help”.  I put it here to make it easier to find for people like me, who tend to believe that everything can be found through Google.

Usage: fslmaths [-dt <datatype>] <first_input> [operations and inputs] <output> [-odt <datatype>]

Datatype information:

-dt sets the datatype used internally for calculations (default float for all except double images)

-odt sets the output datatype (default as original image)

Possible datatypes are: char short int float double

Additionally “-dt input” will set the internal datatype to that of the original image

Binary operations (image-image or image-number):

(inputs can be either an image or a number)

-sub   : subtract following input from current image

-mul   : multiply current image by following input

-div   : divide current image by following input

-rem   : modulus remainder – divide current image by following input and take remainder

-mas   : use (following image>0) to mask current image

-thr   : use following number to threshold current image (zero anything below the number)

-thrp  : use following percentage (0-100) of ROBUST RANGE to threshold current image (zero anything below the number)

-thrP  : use following percentage (0-100) of ROBUST RANGE of non-zero voxels and threshold below

-uthr  : use following number to upper-threshold current image (zero anything above the number)

-uthrp : use following percentage (0-100) of ROBUST RANGE to upper-threshold current image (zero anything above the number)

-uthrP : use following percentage (0-100) of ROBUST RANGE of non-zero voxels and threshold above

-max   : take maximum of following input and current image

-min   : take minimum of following input and current image

-seed  : seed random number generator with following number

Basic unary operations (algebraic operation on an image):

-exp   : exponential

-log   : natural logarithm

-sqr   : square

-sqrt  : square root

-recip : reciprocal (1/current image)

-abs   : absolute value

-bin   : use (current image>0) to binarise

-index : replace each nonzero voxel with a unique (subject to wrapping) index number

-grid <value> <spacing> : add a 3D grid of intensity <value> with grid spacing <spacing>

-edge  : edge strength

-tfce <H> <E> <connectivity>: enhance with TFCE, e.g. -tfce 2 0.5 6 (maybe change 6 to 26 for skeletons)

-tfceS <H> <E> <connectivity> <X> <Y> <Z> <tfce_thresh>: show support area for voxel (X,Y,Z)

-nan   : replace NaNs (improper numbers) with 0

-nanm  : make NaN (improper number) mask with 1 for NaN voxels, 0 otherwise

-rand  : add uniform noise (range 0:1)

-randn : add Gaussian noise (mean=0 sigma=1)

-inm <mean> :  (-i i ip.c) intensity normalisation (per 3D volume mean)

-ing <mean> :  (-I i ip.c) intensity normalisation, global 4D mean)

Matrix operations:

-tensor_decomp : convert a 4D (6-timepoint )tensor image into L1,2,3,FA,MD,MO,V1,2,3 (remaining image in pipeline is FA)

Kernel operations (set BEFORE filtering operation):

-kernel 3D : 3x3x3 box centered on target voxel (set as default kernel)

-kernel 2D : 3x3x1 box centered on target voxel

-kernel box    <size>     : all voxels in a box of width <size> centered on target voxel

-kernel boxv   <size>     : <size>x<size>x<size> box centered on target voxel, CAUTION: size should be an odd number

-kernel gauss  <sigma>    : gaussian kernel (sigma in mm, not voxels)

-kernel sphere <size>     : all voxels in a sphere of radius <size> mm centered on target voxel

-kernel file   <filename> : use external file as kernel

Spatial Filtering operations: N.B. all options apart from -s use the kernel _previously_ specified by –kernel

-dilM    : Mean Dilation of zero voxels  (using non-zero voxels in kernel)

-dilD    : Modal Dilation of zero voxels (using non-zero voxels in kernel)

-dilF    : Maximum filtering of all voxels

-ero     : Erode by zeroing non-zero voxels when zero voxels found in kernel

-eroF    : Minimum filtering of all voxels

-fmedian : Median Filtering

-fmean   : Mean filtering, kernel weighted (conventionally used with gauss kernel)

-fmeanu  : Mean filtering, kernel weighted, un-normalised (gives edge effects)

-s <sigma> : create a gauss kernel of sigma mm and perform mean filtering

-subsamp2  : downsamples image by a factor of 2 (keeping new voxels centred on old)

-subsamp2offc  : downsamples image by a factor of 2 (non-centred)

Dimensionality reduction operations:

(the “T” can be replaced by X, Y or Z to collapse across a different dimension)

-Tmean   : mean across time

-Tstd    : standard deviation across time

-Tmax    : max across time

-Tmaxn   : time index of max across time

-Tmin    : min across time

-Tmedian : median across time

-Tperc <percentage> : nth percentile (0-100) of FULL RANGE across time

-Tar1    : temporal AR(1) coefficient (use -odt float and probably demean first)

Basic statistical operations:

-pval    : Nonparametric uncorrected P-value, assuming timepoints are the permutations; first timepoint is actual (unpermuted) stats image

-pval0   : Same as -pval, but treat zeros as missing data

-cpval   : Same as -pval, but gives FWE corrected P-values

-ztop    : Convert Z-stat to (uncorrected) P

-ptoz    : Convert (uncorrected) P to Z

Multi-argument operations:

-roi <xmin> <xsize> <ymin> <ysize> <zmin> <zsize> <tmin> <tsize> : zero outside roi (using voxel coordinates)

-bptf  <hp_sigma> <lp_sigma> : (-t in ip.c) Bandpass temporal filtering; nonlinear highpass and Gaussian linear lowpass (with sigmas in volumes, not seconds); set either sigma<0 to skip that filter

-roc <AROC-thresh> <outfile> [4Dnoiseonly] <truth> : take (normally binary) truth and test current image in ROC analysis against truth. <AROC-thresh> is usually 0.05 and is limit of Area-under-ROC measure FP axis. <outfile> is a text file of the ROC curve (triplets of values: FP TP threshold). If the truth image contains negative voxels these get excluded from all calculations. If <AROC-thresh> is positive then the [4Dnoiseonly] option needs to be set, and the FP rate is determined from this noise-only data, and is set to be the fraction of timepoints where any FP (anywhere) is seen, as found in the noise-only 4d-dataset. This is then controlling the FWE rate. If <AROC-thresh> is negative the FP rate is calculated from the zero-value parts of the <truth> image, this time averaging voxelwise FP rate over all timepoints. In both cases the TP rate is the average fraction of truth=positive voxels correctly found.

Combining 4D and 3D images:

If you apply a Binary operation (one that takes the current image and a new image together), when one is 3D and the other is 4D,

the 3D image is cloned temporally to match the temporal dimensions of the 4D image.

e.g. fslmaths input_volume -add input_volume2 output_volume

fslmaths input_volume -add 2.5 -mul input_volume2 output_volume

fslmaths 4D_input_volume -Tmean -mul -1 -add 4D_input_volume demeaned_4D_input_volume

## 7 thoughts on “FSL Maths Commands”

1. giorgioarcara

A big “thanks” for sharing

2. ann

it’s just copy pasted script help.. what’s the point of putting it on your blog? just to increase the number of entries to your website? weak..

1. mandymejia

Actually no, I just thought it was something that should be easily google-able. A lot of my blog posts are about providing resources and knowledge that is otherwise hard to find. I am a university professor and do not get any professional credit for blogging, so I don’t really care about how many visitors I have, other than as an indicator of how useful the information is.

1. Tony

Hey, I agree with Mandy and these info should be easily accessible through internet, even for those who don’t install FSL. It’s a good way to document the use of related tools. Also people who don’t use FSL may find it useful when searching for suitable tools to do certain analyses.

2. Jonathan

I often run into this post because I have the tendency to Google for help. It’s too bad that FSL doesn’t make their documentation more Google friendly. The information on their website is: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/Fslutils, which doesn’t give any details on dilation or creation of masks. Perhaps Prof. Mejia should have mentioned that the information came from typing “fslmaths –help”, although people can now find that information in the comments :-).

1. mandymejia

Great idea, thanks! I added a line at the top to put the information more in context.

3. Francesco

Thank you by a master student from Pisa! 🙂