pytomography.transforms.SPECT.attenuation#

Module Contents#

Classes#

SPECTAttenuationTransform

obj2obj transform used to model the effects of attenuation in SPECT. This transform accepts either an attenuation_map (which must be aligned with the SPECT projection data) or a filepath consisting of folder containing CT DICOM files all pertaining to the same scan

Functions#

get_prob_of_detection_matrix(attenuation_map, dx)

Converts an attenuation map of \(\text{cm}^{-1}\) to a probability of photon detection matrix (scanner at +x). Note that this requires the attenuation map to be at the energy of photons being emitted.

pytomography.transforms.SPECT.attenuation.get_prob_of_detection_matrix(attenuation_map, dx)[source]#

Converts an attenuation map of \(\text{cm}^{-1}\) to a probability of photon detection matrix (scanner at +x). Note that this requires the attenuation map to be at the energy of photons being emitted.

Parameters:
  • attenuation_map (torch.tensor) – Tensor of size [batch_size, Lx, Ly, Lz] corresponding to the attenuation coefficient in :math:`{text{cm}^{-1}}

  • dx (float) – Axial plane pixel spacing.

Returns:

Tensor of size [batch_size, Lx, Ly, Lz] corresponding to probability of photon being detected at detector at +x axis.

Return type:

torch.tensor

class pytomography.transforms.SPECT.attenuation.SPECTAttenuationTransform(attenuation_map=None, filepath=None, mode='constant')[source]#

Bases: pytomography.transforms.Transform

obj2obj transform used to model the effects of attenuation in SPECT. This transform accepts either an attenuation_map (which must be aligned with the SPECT projection data) or a filepath consisting of folder containing CT DICOM files all pertaining to the same scan

Parameters:
  • attenuation_map (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

  • filepath (Sequence[str]) – Folder location of CT scan; all .dcm files must correspond to different slices of the same scan.

  • mode (str) – Mode used for extrapolation of CT beyond edges when aligning DICOM SPECT/CT data. Defaults to ‘constant’, which means the image is padded with zeros.

configure(object_meta, proj_meta)[source]#

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

Parameters:
Return type:

None

forward(object_i, ang_idx)[source]#

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 projection 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)[source]#

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 projection 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