Contents
- Introduction
- Guide
- FAQ
GUI and command line software
A GUI interface exists for applying FUGUE to unwarp images as part of the FEAT preprocessing options. We strongly recommend using the pre-stats part of FEAT to do all such processing (note that it is not necessary to have fMRI data for this - even single volumes can be processed in FEAT by selecting pre-stats only). See the detailed documentation on FEAT and documentation on using PRELUDE/FUGUE for preparing fieldmaps for FEAT. The rest of this document gives a brief description of the individual command line programs available in the FUGUE component of FSL - used for unwarping geometric distortion in EPI images. For each of the programs described here, a full list of available options can be obtained by running the command with the -h option.
Note that for all programs the options follow the normal convention that "single minus" options are separated by a space from their arguments (if any) whilst "double minus" options are separated by an equals sign and no space. For example,
prelude -c data --unwrap=result
or
prelude --complex=data -u result
Phase Unwrapping
See separate section on PRELUDE for phase unwrapping. Note that if you need to run phase unwrapping for fieldmap unwarping, then PRELUDE is run before FUGUE.
FUGUE
fugue (FMRIB's Utility for Geometrically Unwarping EPIs) performs unwarping of an EPI image based on fieldmap data. The input required consists of the EPI image, the fieldmap (as an unwrapped phase map or a scaled fieldmap in rad/s) and appropriate image sequence parameters for the EPI and fieldmap acquisitions: the dwell time for EPI (also known as the echo spacing); and the echo time difference (called asym time herein). The main forms of usage are:
fugue -i epi -p unwrappedphase --dwell=dwelltime --asym=asymtime -s 0.5 -u result
- fieldmap specified by a 4D file unwrappedphase containing two unwrapped phase images - from different echo times - plus the dwell time and echo time difference (asym time)
fugue -i epi --dwell=dwelltime --loadfmap=fieldmap -u result
- uses a previously calculated fieldmap
Note the option -s 0.5 is an example of how to specify the regularisation to apply to the fieldmap (2D Gaussian smoothing of sigma=0.5 in this case which is a reasonable default). There are many different forms of regularisation available which can be applied separately or together. These are:
-s sigma
- 2D Gaussian smoothing
--smooth3=sigma
- 3D Gaussian smoothing
-m
- 2D median filtering
--poly=n
- 3D Polynomial fitting of degree n
--fourier=n
- 3D Sinusoidal fitting of degree n
Some other uses are:
fugue -i undistortedimage -p unwrappedphase --dwell=dwelltime --asym=asymtime --nokspace -s 0.5 -w warpedimage applies the fieldmap as a forward warp, turning an undistorted image into a distorted one - useful for creating a registration target for the EPI from the undistorted absolute fieldmap image Additional options that are useful are:
--mask=maskname
- uses a user-defined mask (called maskname) instead of deriving it from the phasemaps or fieldmaps
--unwarpdir=dir
specifies the direction of the unwarping/warping - i.e. phase-encode direction - with dir being one of x,y,z,x-,y-,z- (default is y)
--phaseconj
- uses the phase conjugate correction method, rather than pixel shifts
--nokspace
- for forward warping (only) - uses an image-space method for forward warping
--icorr
- applies an intensity correction term when using the pixel shift method - often poorly conditioned for standard fieldmap acquisitions
PRELUDE
prelude ( Phase Region Expanding Labeller for Unwrapping Discrete Estimates ) performs 3D phase unwrapping of images. This is useful for fieldmap acquisitions, susceptibility weighted imaging (SWI), or other applications involving phase in MR (or non-MR) images. The input can either be a single complex image (NIfTI or Analyze), or a pair of real images giving the phase and absolute values separately. Also see Fslutils for more ways to manipulate complex image formats. If the images are 4D images, then each 3D volume is unwrapped separately, and the result saved as a 4D image of unwrapped phase images. The output in either case is a real, unwrapped phase image (in radians).
For higher resolution images (e.g. for Susceptibility Weighted Imaging) a mask should be used in order to reduce run-times since any areas that include noisy voxels will significantly increase the required run-time. The best way to generate a mask for a whole brain image is to run BET to perform brain extraction on the absolute image.
The three main forms of usage are:
prelude -c data -u result
- uses a single complex input file
prelude -a data_abs -p data_phase -u result
- uses separate phase and absolute input files
prelude -a data_abs -p data_phase -u result -m mask
- uses separate phase and absolute input files with a mask
Additional options that are useful are:
-m mask
- uses the user-defined mask (e.g. a BET mask - especially for high resolution images)
-n num
- specifies the number of phase partitions the algorithm uses for initial labelling - a larger value is likely to be more robust but slower
-s
- unwrap in 2D, then stick slices together with appropriate offsets - this is less robust but fast - mainly used for very high-resolution images where optimising speed is an issue
--labelslices
- does labelling in 2D, but unwrapping in 3D - the default for high-res images
Making Fieldmap Images for FEAT
This section outlines some of the most common ways to construct the required fieldmap images for B0 unwarping in FEAT. Also see the documentation on FUGUE and FEAT for more information on fieldmapping and its use in FEAT pre-stats processing.
Fieldmap Data
Each scanner/site/sequence can give you different data. As the phase is of great importance in fieldmapping, but is normally not saved in other sequences, these images are often quite different from the standard images. The first step in practice is to find out what kind of fieldmap acquisition data you can get from the scanner, operator or reconstruction software. There are three main types:
- Complex data containing images at two different echo times
- Separate phase images for the two different echo times
- A single, real fieldmap image (showing the field inhomogeneity in each voxel)
If the images from the scanner are in ANALYZE or NIFTI form then you can determine their type, use fslinfo. If not, you must convert to either ANALYZE or NIFTI format before progressing. See the FSL FAQ for information about conversion.
When fslinfo is run it will display a datatype string or number (the value 32 represents a complex image). You can convert a complex image into its phase and magnitude components by using fslcomplex or, alternatively, leave it in this format. The number of images contained in each file is shown as the dim4 value.
To further check what sort of images you have, use slices to display the image and then see which of the following images it most closely resembles. Note that for complex images, slices will display two separate images - one phase and one magnitude. If you only have a single image (dim4=1) then it is possible that it has already been reconstructed fully into a fieldmap.
Typical complex images
A phase image (wrapped)
A phase image (unwrapped and masked)
A magnitude image
A real fieldmap image (masked)
Note that the fieldmap image contains structure and shows substantial inhomogeneities mainly in the inferior regions of the brain.
It is most common to have wrapped phase and magnitude images (case 2 below). If the images appear to have unwrapped phase then the the PRELUDE stage (step 3) should be skipped. However, if the range of values within the image is within 2 pi radians (6.28) then it is likely that there are wraps present (even if they are hard to find by eye) and so, in this case, PRELUDE should still be run.
Once you have determined the type, you need to do some or all of the following steps. As a guide (and this may vary in some cases) the steps that are required are:
For complex data you need to do steps 1a, 2a, 3, 4a and 5 For a pair of phase images you need to do steps 1b, 1c, 2b, 3, 4a and 5 For a single, real fieldmap you need to do steps 1b, 1c, 4b and 5
Processing Steps
Step 1 - Getting the magnitude image
(a) If you start with a complex Analyze or Nifti volume that contains the scans at two echo times then you need to do:
fslcomplex -realabs complex_acq fieldmap_mag
(b) If you have separate phase images or a single, fieldmap image, then you need to also get a magnitude image that is (i) undistorted and (ii) registered with this phase/fieldmap image. Usually the sequence used to acquire the phase or fieldmap image also contains data that can give you this magnitude image. Check with your scanner operator, physicists and/or analysis people as to how to reconstruct this image - often it just requires extraction from the original DICOM or vendor-specific format.
(c) Check that the magnitude image and the phase/fieldmap images have the same resolution. You can do this by looking at the dim and pixdim entries (only the first three of each) as reported by fslinfo.
If they are not the same then they must be resampled to be equal. In this case choose the one with the best resolution and use this as a reference image in flirt with the -applyxfm option to resample the other images. For example, if the magnitude image has a better resolution (smaller pixdims) then do the following:
flirt -in original_phase0 -ref fieldmap_mag -applyxfm -out orig_phase0
flirt -in original_phase1 -ref fieldmap_mag -applyxfm -out orig_phase1
Once this is done, check that the output images (e.g. orig_phase0) have the same dimensions and resolution as the reference (using fslinfo) and also check that they are aligned correctly by loading both the output and reference images into fslview and visually inspecting them.
Step 2 - Getting (wrapped) phase in radians
(a) If you have complex volumes then do:
fslcomplex -realphase complex_acq phase0_rad 0 1
fslcomplex -realphase complex_acq phase1_rad 1 1
These phase volumes will now be in radians. (b) If you have seperate phase volumes that are in integer format then do:
fslmaths orig_phase0 -mul 3.14159 -div 2048 phase0_rad -odt float
fslmaths orig_phase1 -mul 3.14159 -div 2048 phase1_rad -odt float
Note that the value of 2048 needs to be adjusted for each different site/scanner/sequence in order to be correct. The final range of the phase0_rad image should be approximately 0 to 6.28. If this is not the case then this scaling is wrong. If you have separate phase volumes are not in integer format, you must still check that the units are in radians, and if not scale them appropriately using fslmaths.
Step 3 - Unwrapping the phase images
Use PRELUDE to do the required phase unwrapping
prelude -a fieldmap_mag -p phase0_rad -o phase0_unwrapped_rad
prelude -a fieldmap_mag -p phase1_rad -o phase1_unwrapped_rad
Step 4 - Getting the fieldmap in rad/s
(a) For separate phase images do:
fslmaths phase1_unwrapped_rad -sub phase0_unwrapped_rad -mul 1000 -div TE fieldmap_rads -odt float where TE must be replaced with the appropriate difference in echo times (in units of milliseconds).
(b) If you have a single, real fieldmap then you must determine the units of this fieldmap (ask an operator/physicist) and rescale to radians per second if it is not already in these units. Common other units are (i) Hz (scale these by 6.28 to get rad/s) and (ii) Telsa (scale these by 2.68e8 to get rad/s).
Step 5 - Regularising the fieldmap
Fieldmaps can often be noisy or be contaminated around the edges of the brain. To correct for this you can regularise the fieldmap using fugue. Note that the "best" regularisation will depend on many factors in the acquisition and must be determined separately for each site/scanner/sequence. Look at the fieldmap (e.g. using fslview) to decide what is the best regularisation to use - which could also be to do no regularisation.
Some regularisation options are - Gaussian smoothing, despiking and median filtering. Examples of these (in order) are:
fugue --loadfmap=fieldmap_rads -s 1 --savefmap=fieldmap_rads
fugue --loadfmap=fieldmap_rads --despike --savefmap=fieldmap_rads
fugue --loadfmap=fieldmap_rads -m --savefmap=fieldmap_rads
Any combination of these regularisations can be performed. See the FUGUE help and documentation for more information aspects of regularisation.