Undersampling#
Data undersampling or subsampling is a common technique in MRI to reduce the amount of data acquired or in other words to accelerate the acquisition process. This is achieved by reducing the number of k-space lines acquired. The missing k-space lines are then estimated using different techniques.
The forward model of accelerated MRI is given by \(y = P F x + n\), where \(y\) is the acquired data, \(x\) is the image, \(F\) is the FFT operator, \(P\) is the undersampling operator and \(n\) is the noise from the acquisition process.
\(P\) can either applied prospectively or retrospectively. In prospective undersampling, the k-space is undersampled in the scanner, during the acquisition process. In retrospective undersampling, the k-space is undersampled after the acquisition process, meaning that we acquire fully sampled k-space and then we apply the undersampling operator to the acquired data.
ATOMMIC
can handle both prospective and retrospective undersampling via the mask_args
of the
train_ds
, validation_ds
and test_ds
functions. The mask_args
is a dictionary that contains
the following keys:
type
:The type of the undersampling mask. It can be one of the following
Equispaced1DMaskFunc
,Equispaced2DMaskFunc
,Gaussian1DMaskFunc
,Gaussian2DMaskFunc
,Poisson2DMaskFunc
,Random1DMaskFunc
, ornone
(no undersampling).
accelerations
:The acceleration factors to be used. It can be a list of integers or a single integer. If it is a list of integers, then the undersampling mask is randomly selected from the list. If it is a single integer, then the undersampling mask is randomly selected from the list of acceleration factors that are less than or equal to the given integer. For example, if
accelerations
is[4, 8, 12]
, then the undersampling mask is randomly selected from[4, 8, 12]
. Ifaccelerations
is4
, then the undersampling mask is selected as4
.
center_fractions
:The center fractions to be used. It can be a list of floats or a single float. If it is a list of floats, then the undersampling mask is randomly selected from the list. If it is a single float, then the undersampling mask is randomly selected from the list of center fractions that are less than or equal to the given float. For example, if
center_fractions
is[0.08, 0.04, 0.02]
, then the undersampling mask is randomly selected from[0.08, 0.04, 0.02]
. Ifcenter_fractions
is0.08
, then the undersampling mask is selected as0.08
.Note
The term
center fraction
is basically used to define the number of k-space lines that are acquired in1D
undersampling. In case of2D
undersampling, the center fraction refers for example to Full-Width-at-Half-Maximum (FWHM) in case of Gaussian undersampling or the radius of the circle in case of Poisson-Disk undersampling. It is kept ascenter fraction
for consistency reasons, but it is not necessarily the fraction of the center of the k-space that is acquired. Should be renamed in the future.
shift_mask
:Whether to shift the undersampling mask or not. If
True
, then the undersampling mask is shifted by a random amount. IfFalse
, then the undersampling mask is not shifted. It is useful when data are shifted to the center of the image.
use_seed
:Whether to use a seed for the random number generator or not. For example, it should be se to
True
in validation, but it should be set toFalse
in training.
Here is an overview example on the CC359 dataset, with the
available undersampling options in ATOMMIC
. The top row presents the undersampled images as the coil-combined
Root-Sum-of-Squares (rss()
) and the bottom row presents the
undersampling masks.
PF
refers to Partial Fourier, while the last column presents the default mask in the CC359
dataset.
Prospective Undersampling#
In prospective undersampling, the type
in mask_args
should be set to none
, data are then assumed to be
undersampled in the scanner. This is useful for performing inference on undersampled data with a pre-trained model.
Retrospective Undersampling#
The following example shows how to do retrospective undersampling in ATOMMIC
:
train_ds:
type: random1d
accelerations: [4, 8]
center_fractions: [0.08, 0.04]
shift_mask: false
use_seed: false
validation_ds:
type: random1d
accelerations: [4, 8]
center_fractions: [0.08, 0.04]
shift_mask: false
use_seed: true
test_ds:
type: none
shift_mask: false
use_seed: false
type
can also be set to none
in train_ds
and validation_ds
in retrospective undersampling if you want
to load pre-computed undersampling masks. In that case, you need to set the mask_path
in the train_ds
and
validation_ds
to the path of the undersampling masks. Otherwise, mask_path
should be set to none
.