pytomography.projectors#

This module contains classes/functionality for operators that map between distinct vector spaces. One (very important) operator of this form is the system matrix \(H:\mathbb{U} \to \mathbb{V}\), which maps from object space \(\mathbb{U}\) to image space \(\mathbb{V}\)

Subpackages#

Submodules#

Package Contents#

Classes#

SystemMatrix

Abstract class for a general system matrix \(H:\mathbb{U} \to \mathbb{V}\) which takes in an object \(f \in \mathbb{U}\) and maps it to corresponding projections \(g \in \mathbb{V}\) that would be produced by the imaging system. A system matrix consists of sequences of object-to-object and proj-to-proj transforms that model various characteristics of the imaging system, such as attenuation and blurring. While the class implements the operator \(H:\mathbb{U} \to \mathbb{V}\) through the forward method, it also implements \(H^T:\mathbb{V} \to \mathbb{U}\) through the backward method, required during iterative reconstruction algorithms such as OSEM.

SPECTSystemMatrix

System matrix for SPECT imaging. By default, this applies to parallel hole collimators, but appropriate use of proj2proj_transforms can allow this system matrix to also model converging/diverging collimator configurations as well.

SPECTSystemMatrixMaskedSegments

SPECT system matrix where the object space is a vector of length \(N\) consisting of the mean activities for each masks in masks. This system matrix can be used in reconstruction algorithms to obtain maximum liklihood estimations for the average value of \(f\) inside each of the masks.

class pytomography.projectors.SystemMatrix(obj2obj_transforms, proj2proj_transforms, object_meta, proj_meta)[source]#

Abstract class for a general system matrix \(H:\mathbb{U} \to \mathbb{V}\) which takes in an object \(f \in \mathbb{U}\) and maps it to corresponding projections \(g \in \mathbb{V}\) that would be produced by the imaging system. A system matrix consists of sequences of object-to-object and proj-to-proj transforms that model various characteristics of the imaging system, such as attenuation and blurring. While the class implements the operator \(H:\mathbb{U} \to \mathbb{V}\) through the forward method, it also implements \(H^T:\mathbb{V} \to \mathbb{U}\) through the backward method, required during iterative reconstruction algorithms such as OSEM.

Parameters:
  • obj2obj_transforms (Sequence[Transform]) – Sequence of object mappings that occur before forward projection.

  • im2im_transforms (Sequence[Transform]) – Sequence of proj mappings that occur after forward projection.

  • object_meta (ObjectMeta) – Object metadata.

  • proj_meta (ProjMeta) – Projection metadata.

  • proj2proj_transforms (list[pytomography.transforms.Transform]) –

initialize_transforms()#

Initializes all transforms used to build the system matrix

abstract forward(object, **kwargs)#

Implements forward projection \(Hf\) on an object \(f\).

Parameters:
  • object (torch.tensor[batch_size, Lx, Ly, Lz]) – The object to be forward projected

  • angle_subset (list, optional) – Only uses a subset of angles (i.e. only certain values of \(j\) in formula above) when back projecting. Useful for ordered-subset reconstructions. Defaults to None, which assumes all angles are used.

Returns:

Forward projected proj where Ltheta is specified by self.proj_meta and angle_subset.

Return type:

torch.tensor[batch_size, Ltheta, Lx, Lz]

abstract backward(proj, angle_subset=None, return_norm_constant=False)#

Implements back projection \(H^T g\) on a set of projections \(g\).

Parameters:
  • proj (torch.Tensor) – proj which is to be back projected

  • angle_subset (list, optional) – Only uses a subset of angles (i.e. only certain values of \(j\) in formula above) when back projecting. Useful for ordered-subset reconstructions. Defaults to None, which assumes all angles are used.

  • return_norm_constant (bool) – Whether or not to return \(1/\sum_j H_{ij}\) along with back projection. Defaults to ‘False’.

Returns:

the object obtained from back projection.

Return type:

torch.tensor[batch_size, Lr, Lr, Lz]

class pytomography.projectors.SPECTSystemMatrix(obj2obj_transforms, proj2proj_transforms, object_meta, proj_meta, n_parallel=1)#

Bases: pytomography.projectors.system_matrix.SystemMatrix

System matrix for SPECT imaging. By default, this applies to parallel hole collimators, but appropriate use of proj2proj_transforms can allow this system matrix to also model converging/diverging collimator configurations as well.

Parameters:
  • obj2obj_transforms (Sequence[Transform]) – Sequence of object mappings that occur before forward projection.

  • proj2proj_transforms (Sequence[Transform]) – Sequence of proj mappings that occur after forward projection.

  • object_meta (SPECTObjectMeta) – SPECT Object metadata.

  • proj_meta (SPECTProjMeta) – SPECT projection metadata.

  • n_parallel (int) – Number of projections to use in parallel when applying transforms. More parallel events may speed up reconstruction time, but also increases GPU usage. Defaults to 1.

forward(object, angle_subset=None)#

Applies forward projection to object for a SPECT imaging system.

Parameters:
  • object (torch.tensor[batch_size, Lx, Ly, Lz]) – The object to be forward projected

  • angle_subset (list, optional) – Only uses a subset of angles (i.e. only certain values of \(j\) in formula above) when back projecting. Useful for ordered-subset reconstructions. Defaults to None, which assumes all angles are used.

Returns:

Forward projected projections where Ltheta is specified by self.proj_meta and angle_subset.

Return type:

torch.tensor[batch_size, Ltheta, Lx, Lz]

backward(proj, angle_subset=None, return_norm_constant=False)#

Applies back projection to proj for a SPECT imaging system.

Parameters:
  • proj (torch.tensor[batch_size, Ltheta, Lr, Lz]) – projections which are to be back projected

  • angle_subset (list, optional) – Only uses a subset of angles (i.e. only certain values of \(j\) in formula above) when back projecting. Useful for ordered-subset reconstructions. Defaults to None, which assumes all angles are used.

  • return_norm_constant (bool) – Whether or not to return \(1/\sum_j H_{ij}\) along with back projection. Defaults to ‘False’.

Returns:

the object obtained from back projection.

Return type:

torch.tensor[batch_size, Lr, Lr, Lz]

class pytomography.projectors.SPECTSystemMatrixMaskedSegments(obj2obj_transforms, proj2proj_transforms, object_meta, proj_meta, masks)#

Bases: SPECTSystemMatrix

SPECT system matrix where the object space is a vector of length \(N\) consisting of the mean activities for each masks in masks. This system matrix can be used in reconstruction algorithms to obtain maximum liklihood estimations for the average value of \(f\) inside each of the masks.

Parameters:
  • obj2obj_transforms (Sequence[Transform]) – Sequence of object mappings that occur before forward projection.

  • proj2proj_transforms (Sequence[Transform]) – Sequence of proj mappings that occur after forward projection.

  • object_meta (SPECTObjectMeta) – SPECT Object metadata.

  • proj_meta (SPECTProjMeta) – SPECT proj metadata.

  • masks (torch.Tensor) – Masks corresponding to each segmented region.

forward(activities, angle_subset=None)#

Implements forward projection \(HUa\) on a vector of activities \(a\) corresponding to self.masks.

Parameters:
  • activities (torch.tensor[batch_size, n_masks]) – Activities in each mask region.

  • angle_subset (list, optional) – Only uses a subset of angles (i.e. only certain values of \(j\) in formula above) when back projecting. Useful for ordered-subset reconstructions. Defaults to None, which assumes all angles are used.

Returns:

Forward projected projections where Ltheta is specified by self.proj_meta and angle_subset.

Return type:

torch.tensor[batch_size, Ltheta, Lx, Lz]

backward(proj, angle_subset=None, prior=None, normalize=False, return_norm_constant=False)#

Implements back projection \(U^T H^T g\) on projections \(g\), returning a vector of activities for each mask region.

Parameters:
  • proj (torch.tensor[batch_size, Ltheta, Lr, Lz]) – projections which are to be back projected

  • angle_subset (list, optional) – Only uses a subset of angles (i.e. only certain values of \(j\) in formula above) when back projecting. Useful for ordered-subset reconstructions. Defaults to None, which assumes all angles are used.

  • prior (Prior, optional) – If included, modifes normalizing factor to \(\frac{1}{\sum_j H_{ij} + P_i}\) where \(P_i\) is given by the prior. Used, for example, during in MAP OSEM. Defaults to None.

  • normalize (bool) – Whether or not to divide result by \(\sum_j H_{ij}\)

  • return_norm_constant (bool) – Whether or not to return \(1/\sum_j H_{ij}\) along with back projection. Defaults to ‘False’.

Returns:

the activities in each mask region.

Return type:

torch.tensor[batch_size, n_masks]