pytomography.transforms.SPECT — PyTomography 0.8.0 documentation

Skip to main content
`Ctrl`+`K`

# `pytomography.transforms.SPECT`

## Submodules

- `pytomography.transforms.SPECT.atteunation`
- `pytomography.transforms.SPECT.cutoff`
- `pytomography.transforms.SPECT.psf`

## Package Contents

### Classes

`SPECTAttenuationTransform` | obj2obj transform used to model the effects of attenuation in SPECT.
`SPECTPSFTransform` | obj2obj transform used to model the effects of PSF blurring in SPECT. The smoothing kernel used to apply PSF modeling uses a Gaussian kernel with width \(\sigma\) dependent on the distance of the point to the detector; that information is specified in the `PSFMeta` parameter.
`CutOffTransform` | im2im transformation used to set pixel values equal to zero at the first and last few z slices. This is often required when reconstructing DICOM data due to the finite field of view of the projection data, where additional axial slices are included on the top and bottom, with zero measured detection events. This transform is included in the system matrix, to model the sharp cutoff at the finite FOV.

class pytomography.transforms.SPECT.SPECTAttenuationTransform(CT)

  Bases: `pytomography.transforms.Transform`

  obj2obj transform used to model the effects of attenuation in SPECT.

  Parameters:

    CT (torch.tensor) – Tensor of size [batch_size, Lx, Ly, Lz] corresponding to the attenuation coefficient in \({\text{cm}^{-1}}\) at the photon energy corresponding to the particular scan

  forward(object_i, ang_idx)

    Forward projection \(A:\mathbb{U} \to \mathbb{U}\) of attenuation correction

    Parameters:

      - object_i (torch.tensor) – Tensor of size [batch_size, Lx, Ly, Lz] being projected along `axis=1`.

      - ang_idx (torch.Tensor) – The projection indices: used to find the corresponding angle in image space corresponding to each projection angle in `object_i`.

    Returns:

      Tensor of size [batch_size, Lx, Ly, Lz] such that projection of this tensor along the first axis corresponds to an attenuation corrected projection.

    Return type:

      torch.tensor

  backward(object_i, ang_idx, norm_constant=None)

    Back projection \(A^T:\mathbb{U} \to \mathbb{U}\) of attenuation correction. Since the matrix is diagonal, the implementation is the same as forward projection. The only difference is the optional normalization parameter.

    Parameters:

      - object_i (torch.tensor) – Tensor of size [batch_size, Lx, Ly, Lz] being projected along `axis=1`.

      - ang_idx (torch.Tensor) – The projection indices: used to find the corresponding angle in image space corresponding to each projection angle in `object_i`.

      - norm_constant (torch.tensor, optional) – A tensor used to normalize the output during back projection. Defaults to None.

    Returns:

      Tensor of size [batch_size, Lx, Ly, Lz] such that projection of this tensor along the first axis corresponds to an attenuation corrected projection.

    Return type:

      torch.tensor

class pytomography.transforms.SPECT.SPECTPSFTransform(psf_meta)

  Bases: `pytomography.transforms.Transform`

  obj2obj transform used to model the effects of PSF blurring in SPECT. The smoothing kernel used to apply PSF modeling uses a Gaussian kernel with width \(\sigma\) dependent on the distance of the point to the detector; that information is specified in the `PSFMeta` parameter.

  Parameters:

    psf_meta (PSFMeta) – Metadata corresponding to the parameters of PSF blurring

  configure(object_meta, image_meta)

    Function used to initalize the transform using corresponding object and image metadata

    Parameters:

      - object_meta (ObjectMeta) – Object metadata.

      - image_meta (ImageMeta) – Image metadata.

    Return type:

      None

  compute_kernel_size(radius, axis)

    Function used to compute the kernel size used for PSF blurring. In particular, uses the `min_sigmas` attribute of `PSFMeta` to determine what the kernel size should be such that the kernel encompasses at least `min_sigmas` at all points in the object.

    Returns:

      The corresponding kernel size used for PSF blurring.

    Return type:

      int

  get_sigma(radius)

    Uses PSF Meta data information to get blurring \(\sigma\) as a function of distance from detector.

    Parameters:

      radius (float) – The distance from the detector.

    Returns:

      An array of length Lx corresponding to blurring at each point along the 1st axis in object space

    Return type:

      array

  apply_psf(object, ang_idx)
  forward(object_i, ang_idx)

    Applies the PSF transform \(A:\mathbb{U} \to \mathbb{U}\) for the situation where an object is being detector by a detector at the \(+x\) axis.

    Parameters:

      - object_i (torch.tensor) – Tensor of size [batch_size, Lx, Ly, Lz] being projected along its first axis

      - ang_idx (int) – The projection indices: used to find the corresponding angle in image space corresponding to each projection angle in `object_i`.

    Returns:

      Tensor of size [batch_size, Lx, Ly, Lz] such that projection of this tensor along the first axis corresponds to n PSF corrected projection.

    Return type:

      torch.tensor

  backward(object_i, ang_idx, norm_constant=None)

    Applies the transpose of the PSF transform \(A^T:\mathbb{U} \to \mathbb{U}\) for the situation where an object is being detector by a detector at the \(+x\) axis. Since the PSF transform is a symmetric matrix, its implemtation is the same as the `forward` method.

    Parameters:

      - object_i (torch.tensor) – Tensor of size [batch_size, Lx, Ly, Lz] being projected along its first axis

      - ang_idx (int) – The projection indices: used to find the corresponding angle in image space corresponding to each projection angle in `object_i`.

      - norm_constant (torch.tensor, optional) – A tensor used to normalize the output during back projection. Defaults to None.

    Returns:

      Tensor of size [batch_size, Lx, Ly, Lz] such that projection of this tensor along the first axis corresponds to n PSF corrected projection.

    Return type:

      torch.tensor

class pytomography.transforms.SPECT.CutOffTransform(image)

  Bases: `pytomography.transforms.Transform`

  im2im transformation used to set pixel values equal to zero at the first and last few z slices. This is often required when reconstructing DICOM data due to the finite field of view of the projection data, where additional axial slices are included on the top and bottom, with zero measured detection events. This transform is included in the system matrix, to model the sharp cutoff at the finite FOV.

  Parameters:

    image (torch.tensor) – Measured image data.

  forward(image)

    Forward projection \(B:\mathbb{V} \to \mathbb{V}\) of the cutoff transform.

    Parameters:

      image (torch.Tensor) – Tensor of size [batch_size, Ltheta, Lr, Lz] which transform is appplied to

    Returns:

      Original image, but with certain z-slices equal to zero.

    Return type:

      torch.tensor

  backward(image, norm_constant=None)

    Back projection \(B^T:\mathbb{V} \to \mathbb{V}\) of the cutoff transform. Since this is a diagonal matrix, the implementation is the same as forward projection, but with the optional norm_constant argument.

    Parameters:

      - image (torch.Tensor) – Tensor of size [batch_size, Ltheta, Lr, Lz] which transform is appplied to

      - norm_constant (torch.Tensor | None, optional) – A tensor used to normalize the output during back projection. Defaults to None.

    Returns:

      Original image, but with certain z-slices equal to zero.

    Return type:

      torch.tensor