Phase-Sensitive SSFP Region-Growing Reconstruction

Brian Hargreaves


Balanced SSFP sequences provide images that, theoretically have very well refocused signal. Thus, the signal should be purely real, and alternating in sign for different resonant frequency bands. Please see Hargreaves et al, MRM June 2003 for a full description.

Phase in the image can result from the use of surface coils, timing mismatches between gradients and acquisition, or the 3D slab profile used. In these cases, a region-growing phase correction can be used after Fourier Image Reconstruction. Following the phase correction, voxels can be separated into water (negative real part) and fat (positive real part).

Region-Growing Phase Correction

Rather than use a low-frequency field map scheme, we take advantage of the fact that both fat and water voxels will usually have high signal. The image is broken up into small cells, 4x4x4 or so voxels each (or larger). The average phase of each cell is calculated, by finding the best fit line through a complex scatter of all points AND the origin. This technique leaves a 180-degree ambiguity in the detected phase, which is then resolved by keeping the phase added to neighboring cells similar.

Matlab Code Included

For now, I have included matlab functions for the region-growing phase correction. There is a primitive 3D viewer for image data, and a sample data set to test these. Note that the sample dataset is rather large, 38 MB. Please send me any comments on what worked and did not -- I will try to maintain this software. Here are some Matlab functions of interest:

Matlab Download/Example Instructions

  1. Save the tar file, psssfp.tar.gz to your computer. To extract the files, execute "tar -xzvf psssfp.tar.gz" from the directory where you have saved the file.
  2. Save the file samplepsssfp.mat somewhere.

  3. For a very simple design, enter the following Matlab commands:

    load samplepsssfp
    [im,ph] = rgphcorr(dat,4,1);

C Code

I have not written much of a guide, but you are welcome to try using the following C-code, which is pretty well commented, and will do the same thing as the above Matlab code. Please see the files/readme.txt file for a description of the other files. You must compile the C code (such as sample.c) using a gcc or other compiler.


Please report comments/bugs with this code to Brian Hargreaves.
Released Sept 6, 2004