ncigt-fil
Functions
EPI Ghost Ellimination via Spatial and Temporal Encoding (GESTE)

Functions

int geste_calibrate__all_slices (DATA_OBJ *combo, float *phase_list, GESTE_MEM *mem)
 
void geste_init (GESTE_MEM *mem_obj, DATA_OBJ *data_frame)
 
int geste_interleave_frames (DATA_OBJ *even_frame, DATA_OBJ *odd_frame, DATA_OBJ *combo, int mode, GESTE_MEM *mem)
 
void geste_quit (GESTE_MEM *mem_obj)
 
int geste_recon__all_slices (DATA_OBJ *data_frame, float *phase_list, DATA_OBJ *img, GESTE_MEM *mem, int polarity)
 
int pull_readout_data (int ndim, int *sz, COMPLEX *P, int indx_in, COMPLEX *Pfull, int indx_out)
 
int run_geste (DATA_OBJ *even_frame, DATA_OBJ *odd_frame, DATA_OBJ *raw_frame, float *phase_list, DATA_OBJ *img, GESTE_MEM *mem)
 

Detailed Description

This category of functions is designed to remove Nyquist ghosts from EPI images. It is a C-code implementation of the method described in [Q].

The strategy is to use temporal encoding in a series of EPI acquisitions, so that each line of k-space is acquired using readout gradients of alternating polarity over the course of the image series.

If one interleaves data from either all the positive or all the negative readouts in two frames that were acquired in this fashion, the gradient errors associated with each readout polarity will be consistent. This reduces Nyquist ghosts substantially. The authors of PLACE [R] showed that when these images are combined coherrently, the Nyquist ghosting can be further reduced due to ghost cancelation. These images result in lower temporal resolution, however, due to the need for data interleaving.

In GESTE, the Nyquist-ghost-free PLACE image is used to calibrate parallel imaging reconstruction coefficients. These coefficients are then used in the original data to reconstruct two images at each time frame: one associated with negative readout polarity gradients, and one associated with the positive readout polarity gradients. When these images are combined coherently, residual pMRI artifacts will cancel, yeilding images with superior ghost suppression while maintaining the original temporal resolution.

For an example on how to call the GESTE functions, consult the geste.c Matlab MEX file.

  1. Hoge WS, Tan H, and Kraft RA, "Robust Elimination of EPI Nyquist Ghosts via Spatial and Temporal Encoding." Magn Reson Med, 2010; 64(6):1781-1791. DOI

  2. "Correction for geometric distortion and N/2 ghosting in EPI by phase labeling for additional coordinate encoding (PLACE)." Qing-San Xiang and Frank Q. Ye. Magn Reson Med, 57(4):731-741, 2007. DOI

Function Documentation

int geste_calibrate__all_slices ( DATA_OBJ *  combo,
float *  phase_list,
GESTE_MEM *  mem 
)

Using data combined from two interleaved frames, calculate the GRAPPA reconstruction parameters for all slices.

Parameters
combothe calibration data frame. 4D, size: kx-ky-z-coil
phase_list(unused) a list of the sampled phase encode lines.
meman initialized GESTE object of scratch memory buffers
void geste_init ( GESTE_MEM *  mem_obj,
DATA_OBJ *  data_frame 
)

Initialize the memory buffers required by GESTE. For the data_frame, only the size of the supported data needs to be declared prior to calling the init function.

Parameters
mem_objGESTE object of sratch memory buffers
data_framea pointer to a 4D data object (sized kx-ky-slices-coil) to be processed by GESTE (for image size information)
int geste_interleave_frames ( DATA_OBJ *  even_frame,
DATA_OBJ *  odd_frame,
DATA_OBJ *  combo,
int  mode,
GESTE_MEM *  mem 
)

The first step of GESTE (comparable to PLACE):

  1. interleave input kspace of alternating readout polarity.
  2. phase align the interleaved images in the image domain,
  3. and then add the two frames
  4. if (mode==0), convert the output back in to k-space domain
Parameters
even_frameframe1: even lines are positive readout k-space
odd_frameframe2: odd lines are positive readout k-space
combocombined data
modeif mode=0: revert the output data back to k-space before returning
meman initialized memory object
void geste_quit ( GESTE_MEM *  mem_obj)

Clear and release the GESTE memory buffers.

An array of objects holding GRAPPA reconstruction paramemters can be cleared as well. If not needed, set mem_obj->nslices to '0' and mem_obj->gparm to 'NULL'.

Parameters
mem_objGESTE object of sratch memory buffers
int geste_recon__all_slices ( DATA_OBJ *  data_frame,
float *  phase_list,
DATA_OBJ *  img,
GESTE_MEM *  mem,
int  polarity 
)

GESTE reconstruction of EPI data frames using previously calculated GRAPPA parameters.

Parameters
data_frameThe raw input EPI data: ndim should equal '4', sized: kx-ky-z-coil type: double-complex ('dblc')
phase_list(UNUSED). List of phase encode locations
imgA preallocated data array to store the reconstructed image. sized: x-y-z-coil
memAn initialized memory buffer object
polaritydeclare whether first k-space line is positive (1, align to even lines) or negative (0, align to odd lines).
int pull_readout_data ( int  ndim,
int *  sz,
COMPLEX *  P,
int  indx_in,
COMPLEX *  Pfull,
int  indx_out 
)

This auxillary function is used to extract all readout data of the same polarity from an EPI data set.

P, and Pfull should be the same size, with dimensions ordered as: kx-ky-z-coil

It assumes that every other line of k-space is sampled at the same polarity.

Parameters
ndimnumber of dimensions in data set
szsize array, describing each dimension
Pthe source data
indx_inthe first index of source data to read
Pfullthe destination buffer
indx_outthe first index for the data destination
int run_geste ( DATA_OBJ *  even_frame,
DATA_OBJ *  odd_frame,
DATA_OBJ *  raw_frame,
float *  phase_list,
DATA_OBJ *  img,
GESTE_MEM *  mem 
)

An example GESTE reconstruction function, geared towards an fMRI application.

Send two raw images in, get one reconstructed image back.

Parameters
even_frameraw input EPI data frame. Even lines have positive readout data
odd_frameraw input EPI data frame. Odd lines have positive readout data
raw_frameraw input EPI data frame, the frame to reconstruct. Could/should be equal to either even_frame or odd_frame
phase_list(UNUSED). List of phase encode locations
imgreconstructed image, from raw_frame data
memmemory buffer object.