linop.NUFFT

linop.NUFFT#

class bartorch.linop.NUFFT#

Bases: LinearOperator

Non-uniform FFT from images to samples along a trajectory.

Parameters:
  • traj (tensor) – Trajectory (*encoding, shots, samples, ndim) in grid units, kx, ky or kx, ky, kz, as bartorch.tools.traj() produces. A kz that is zero everywhere makes the transform two-dimensional. The encoding axes are whatever the samples vary along besides the shots – frames, echoes, cardiac phases – in any number.

  • image_shape (tuple of int) – Image shape (*batches, *encoding, [z,] y, x): two spatial axes for a two-dimensional trajectory and three for a three-dimensional one. The batches – coils, slices, anything transformed alike – are whatever leads the encoding axes, and each is transformed on its own.

  • kspace_shape (tuple of int, default=None) – Sample shape; by default (*batches, *encoding, shots, samples).

  • weights (tensor, default=None) – Diagonal in k-space, broadcast over (*encoding, shots, samples), applied on the forward pass and conjugated on the adjoint.

  • basis (tensor, default=None) – Temporal subspace basis (coeffs, frames) over the last encoding axis, which is coeffs long in the image and frames long in k-space. The weights and the basis belong to the operator because its Toeplitz normal is built over both.

  • toeplitz (bool, default=True) – Apply the normal in closed form rather than as the forward and adjoint applications: a convolution with a point spread function.

  • oversampling (float, default=0.0) – Grid oversampling and kernel width; zero keeps the defaults.

  • width (float, default=0.0) – Grid oversampling and kernel width; zero keeps the defaults.

Examples

>>> A = NUFFT(traj, image_shape=(8, 128, 128))
>>> A.adjoint(kspace).shape
torch.Size([8, 128, 128])

Also has the methods and properties of LinearOperator.

Examples using NUFFT#

Trajectories and transforms

Trajectories and transforms