The mapping between the proton density and the recorded signal is linear in MRI and can be described in the continuous case as an integral equation and in the discrete case as a matrix vector multiplication.
Depending on the imaging scenario, the MRI system matrix can have various different forms. It may encode a Cartesian, or a spiral trajectory. It may take offresonance into account, and it may also encode the sensitivity of the receive coil.
MRIReco implements various MRI imaging operators. In all cases, the operators have a dedicated Julia type that acts as a matrix. The operator
E thus can be applied to a vector
x by calling
E*x. Similarly, the adjoint can be applied by
adjoint(E)*x. We note at this point that the adjoint operation is lazy in Julia and thus the matrix
adjoint(E) is never explicitly arranged.
MRIReco currently implements the following operators:
FFTOp: A multidimensional FFT operator
NFFTOp: A multidimensional operator for non-equidistant FFTs
FieldmapNFFTOp: An operator that takes complex correction terms into account
SensitivityMapOp: An operator for building a SENSE reconstruction. Has to be combined with one of the former encoding operators
SamplingOp: An operator that describes the (sub)sampling of full trajectories. The operator is used for Compressed Sensing reconstruction
WaveletOp: A multidimensional operator for applying Wavelet transformations
Each of these operators can be build by calling the corresponding constructor. Alternatively one can use the
EncodingOp constructor that allows for high-level construction of the imaging operator.