bartorch.nlop.CoilSense

Contents

bartorch.nlop.CoilSense#

bartorch.nlop.CoilSense(encoding, image_shape=None, coil_shape=None)#

An image times unknown coils, through any linear encoding.

The recipe rather than BART’s particular model: whatever linear operator maps coil images to data – a wave encoding, a field-corrected one, a subspace one, one of your own – put in front of it a product of two unknowns. That is the whole of what makes an encoding nonlinear, and with the algebra in place it is one line:

chain(Multiply(image_shape, coil_shape), encoding.to_nonlinear())

Unlike NonlinearSense there is no Sobolev weighting on the coils: what is fitted is the sensitivities themselves. Regularise them by chaining a smoothing operator onto the coil input, or use NonlinearSense, which carries BART’s.

Parameters:
  • encoding (LinearOperator) – From coil images to data. Its domain is the coil-image shape.

  • image_shape (tuple of int, optional) – Where the image lives; by default the encoding’s domain with one coil.

  • coil_shape (tuple of int, optional) – Where the sensitivities live; by default the encoding’s domain.

Returns:

Two inputs, the image and the coils, and one output, the data.

Return type:

NonlinearOperator

Examples

>>> E = linop.Sampling(pattern, shape) @ linop.FFT(shape, axes=(-1, -2))
>>> F = CoilSense(E)
>>> F.ishapes
((1, 128, 128), (8, 128, 128))