ODIN image reconstruction framework (odinreco)

This page describes the usage and design guidelines of the module The reconstruction framework (odinreco). For a description how to execute the reconstruction, please refer to Automatic image reconstruction for ODIN sequences.

The reconstruction process

Here, image reconstruction refers to converting MR raw data to an image. It is achieved by the following processing strategy: Each single acquisition (ADC) is fed separately into the reconstruction pipeline. The pipeline consists of a chain of steps(functors) which are executed subsequently in order to process the input data with the reconstructed image as the final output. ADCs are processed simultaneously in different threads allowing acceleration of reconstruction on multi-processor systems. It is the responsibility of the steps to synchronize properly if they possess global (static) data.

Setting up a reconstruction pipeline

A reconstruction pipeline is described by a string. This string consists of single tokens representing a step which can be any of those described in Steps(functors) of the reconstruction framework (odinreco). These steps are chained together using the pipe operator (|). Only steps with a compatible input and output interface may be chained together. A step may accept additional arguments enclosed in parenthesis after the step label. In addition, a step may have command-line options to fine-tune its behaviour. Please refer to the manual at (Steps(functors) of the reconstruction framework (odinreco)) for the input/output interface, arguments and options of each step.

As an example, a simple 2D/3D reconstruction would look like this:

kspace | filter(Gauss) | fft | offset | slicecoll | image | store(result)

This would collect k-space data (kspace), apply a Gaussian filter (filter), perform an FFT if done (fft) and shift the image (offset). Finally, after collecting slices and repetitions (slicecoll | image), it would store the data in files starting with the prefix 'result'.


Some steps need data produced by another step in another branch of the pipeline (e.g. phasemap, fieldmap). To pass this data around, a thread-safe blackboard system is used to post data and retrieve it later. In particular, the 'post' step (RecoPost) can used to post data and the function RecoController::inquire_data() can be used to retrieve this data in another step.

Reconstruction Options

Each step can have a number of options (i.e. parameters) to customize its behavior. For instance, the step for zero filling accepts the zero-padded sizes of the destination grid as its arguments. For a list of available options of each step, please refer to Steps(functors) of the reconstruction framework (odinreco). Options can be set in different ways. With ascending priority, these are: