ncigt-fil
|
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) |
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.
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
"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
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.
combo | the calibration data frame. 4D, size: kx-ky-z-coil |
phase_list | (unused) a list of the sampled phase encode lines. |
mem | an 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.
mem_obj | GESTE object of sratch memory buffers |
data_frame | a 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):
even_frame | frame1: even lines are positive readout k-space |
odd_frame | frame2: odd lines are positive readout k-space |
combo | combined data |
mode | if mode=0: revert the output data back to k-space before returning |
mem | an 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'.
mem_obj | GESTE 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.
data_frame | The 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 |
img | A preallocated data array to store the reconstructed image. sized: x-y-z-coil |
mem | An initialized memory buffer object |
polarity | declare 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.
ndim | number of dimensions in data set |
sz | size array, describing each dimension |
P | the source data |
indx_in | the first index of source data to read |
Pfull | the destination buffer |
indx_out | the 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.
even_frame | raw input EPI data frame. Even lines have positive readout data |
odd_frame | raw input EPI data frame. Odd lines have positive readout data |
raw_frame | raw 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 |
img | reconstructed image, from raw_frame data |
mem | memory buffer object. |