pytomography.algorithms.statistical_iterative
#
This module contains classes that implement statistical iterative reconstruction algorithms.
Module Contents#
Classes#
Parent class for all statistical iterative algorithms. All child classes must implement the |
|
Implementation of the ordered subset expectation algorithm using the one-step-late method to include prior information: \(\hat{f}^{n,m+1} = \left[\frac{1}{H_m^T 1 + \beta \frac{\partial V}{\partial \hat{f}}|_{\hat{f}=\hat{f}^{n,m}}} H_m^T \left(\frac{g_m}{H_m\hat{f}^{n,m}+s}\right)\right] \hat{f}^{n,m}\). |
|
Implementation of the block-sequential-regularized (BSREM) reconstruction algorithm: \(\hat{f}^{n,m+1} = \hat{f}^{n,m} + \alpha_n D \left[H_m^T \left(\frac{g_m}{H_m \hat{f}^{n,m} + s} -1 \right) - \beta \nabla_{f^{n,m}} V \right]\). The implementation of this algorithm corresponds to Modified BSREM-II with \(U=\infty\), \(t=0\), and \(\epsilon=0\) (see https://ieeexplore.ieee.org/document/1207396). There is one difference in this implementation: rather than using FBP to get an initial estimate (as is done in the paper), a single iteration of OSEM is used; this initialization is required here due to the requirement for global scaling (see discussion on page 620 of paper). |
|
Implementation of the ordered subset expectation maximum algorithm \(\hat{f}^{n,m+1} = \left[\frac{1}{H_m^T 1} H_m^T \left(\frac{g_m}{H_m\hat{f}^{n,m}+s}\right)\right] \hat{f}^{n,m}\). |
|
Implementation of the KEM reconstruction algorithm given by \(\hat{\alpha}^{n,m+1} = \left[\frac{1}{K^T H_m^T 1} K^T H_m^T \left(\frac{g_m}{H_m K \hat{\alpha}^{n,m}+s}\right)\right] \hat{\alpha}^{n,m}\) and where the final predicted object is \(\hat{f}^{n,m} = K \hat{\alpha}^{n,m}\). |
- class pytomography.algorithms.statistical_iterative.StatisticalIterative(projections, system_matrix, object_initial=None, scatter=0, prior=None)[source]#
Parent class for all statistical iterative algorithms. All child classes must implement the
__call__
method to perform reconstruction.- Parameters:
projections (torch.Tensor) – photopeak window projection data \(g\) to be reconstructed
system_matrix (SystemMatrix) – system matrix that models the imaging system. In particular, corresponds to \(H\) in \(g=Hf\).
object_initial (torch.tensor[batch_size, Lx, Ly, Lz]) – the initial object guess \(f^{0,0}\). If None, then initial guess consists of all 1s. Defaults to None.
scatter (torch.Tensor) – estimate of scatter contribution \(s\). Defaults to 0.
prior (Prior, optional) – the Bayesian prior; used to compute \(\beta \frac{\partial V}{\partial f}\). If
None
, then this term is 0. Defaults to None.
- get_subset_splits(n_subsets)[source]#
Returns a list of subsets (where each subset contains indicies corresponding to different angles). For example, if the projections consisted of 6 total angles, then
get_subsets_splits(2)
would return[[0,2,4],[1,3,5]]
.- Parameters:
n_subsets (int) – number of subsets used in OSEM
- Returns:
list of index arrays for each subset
- Return type:
list
- abstract __call__(n_iters, n_subsets, callbacks=None)[source]#
Abstract method for performing reconstruction: must be implemented by subclasses.
- Parameters:
n_iters (int) – Number of iterations
n_subsets (int) – Number of subsets
callbacks (Callback, optional) – Callbacks to be evaluated after each subiteration. Defaults to None.
- Return type:
None
- class pytomography.algorithms.statistical_iterative.OSEMOSL(projections, system_matrix, object_initial=None, scatter=0, prior=None)[source]#
Bases:
StatisticalIterative
Implementation of the ordered subset expectation algorithm using the one-step-late method to include prior information: \(\hat{f}^{n,m+1} = \left[\frac{1}{H_m^T 1 + \beta \frac{\partial V}{\partial \hat{f}}|_{\hat{f}=\hat{f}^{n,m}}} H_m^T \left(\frac{g_m}{H_m\hat{f}^{n,m}+s}\right)\right] \hat{f}^{n,m}\).
- Parameters:
proj (torch.Tensor) – projection data \(g\) to be reconstructed
system_matrix (SystemMatrix) – System matrix \(H\) used in \(g=Hf\).
object_initial (torch.tensor[batch_size, Lx, Ly, Lz]) – represents the initial object guess \(f^{0,0}\) for the algorithm in object space
scatter (torch.Tensor) – estimate of scatter contribution \(s\).
prior (Prior, optional) – the Bayesian prior; computes \(\beta \frac{\partial V}{\partial f}\). If
None
, then this term is 0. Defaults to None.projections (torch.tensor) –
- _set_recon_name(n_iters, n_subsets)[source]#
Set the unique identifier for the type of reconstruction performed. Useful when saving reconstructions to DICOM files
- Parameters:
n_iters (int) – Number of iterations
n_subsets (int) – Number of subsets
- __call__(n_iters, n_subsets, callback=None)[source]#
Performs the reconstruction using
n_iters
iterations andn_subsets
subsets.- Parameters:
n_iters (int) – Number of iterations
n_subsets (int) – Number of subsets
callback (Callback, optional) – Callback function to be evaluated after each subiteration. Defaults to None.
- Returns:
reconstructed object
- Return type:
torch.tensor[batch_size, Lx, Ly, Lz]
- class pytomography.algorithms.statistical_iterative.BSREM(projections, system_matrix, object_initial=None, scatter=0, prior=None, relaxation_function=lambda x: ..., scaling_matrix_type='subind_norm')[source]#
Bases:
StatisticalIterative
Implementation of the block-sequential-regularized (BSREM) reconstruction algorithm: \(\hat{f}^{n,m+1} = \hat{f}^{n,m} + \alpha_n D \left[H_m^T \left(\frac{g_m}{H_m \hat{f}^{n,m} + s} -1 \right) - \beta \nabla_{f^{n,m}} V \right]\). The implementation of this algorithm corresponds to Modified BSREM-II with \(U=\infty\), \(t=0\), and \(\epsilon=0\) (see https://ieeexplore.ieee.org/document/1207396). There is one difference in this implementation: rather than using FBP to get an initial estimate (as is done in the paper), a single iteration of OSEM is used; this initialization is required here due to the requirement for global scaling (see discussion on page 620 of paper).
- Parameters:
proj (torch.Tensor) – projection data \(g\) to be reconstructed
object_initial (torch.tensor[batch_size, Lx, Ly, Lz]) – represents the initial object guess \(f^{0,0}\) for the algorithm in object space
system_matrix (SystemMatrix) – System matrix \(H\) used in \(g=Hf\).
scatter (torch.Tensor) – estimate of scatter contribution \(s\).
prior (Prior, optional) – the Bayesian prior; computes \(\beta \frac{\partial V}{\partial f}\). If
None
, then this term is 0. Defaults to None.relaxation_function (Callable, optional) – Sequence \(\alpha_n\) used for relaxation. Defaults to \(\alpha_n=1/(n+1)\).
scaling_matrix_type (str, optional) – The form of the scaling matrix \(D\) used. If
subind_norm
(sub-iteration independent + normalized), then \(D=\left(S_m/M \cdot H^T 1 \right)^{-1}\). Ifsubdep_norm
(sub-iteration dependent + normalized) then \(D = \left(H_m^T 1\right)^{-1}\). See section III.D in the paper above for a discussion on this.projections (torch.tensor) –
- _set_recon_name(n_iters, n_subsets)[source]#
Set the unique identifier for the type of reconstruction performed. Useful for saving to DICOM files
- Parameters:
n_iters (int) – Number of iterations
n_subsets (int) – Number of subsets
- __call__(n_iters, n_subsets, callback=None)[source]#
Performs the reconstruction using
n_iters
iterations andn_subsets
subsets.- Parameters:
n_iters (int) – Number of iterations
n_subsets (int) – Number of subsets
callback (Callback, optional) – Callback function to be called after each subiteration. Defaults to None.
- Returns:
reconstructed object
- Return type:
torch.tensor[batch_size, Lx, Ly, Lz]
- class pytomography.algorithms.statistical_iterative.OSEM(projections, system_matrix, object_initial=None, scatter=0)[source]#
Bases:
OSEMOSL
Implementation of the ordered subset expectation maximum algorithm \(\hat{f}^{n,m+1} = \left[\frac{1}{H_m^T 1} H_m^T \left(\frac{g_m}{H_m\hat{f}^{n,m}+s}\right)\right] \hat{f}^{n,m}\).
- Parameters:
proj (torch.Tensor) – projection data \(g\) to be reconstructed
object_initial (torch.tensor[batch_size, Lx, Ly, Lz]) – represents the initial object guess \(f^{0,0}\) for the algorithm in object space
system_matrix (SystemMatrix) – System matrix \(H\) used in \(g=Hf\).
scatter (torch.Tensor) – estimate of scatter contribution \(s\).
projections (torch.tensor) –
- class pytomography.algorithms.statistical_iterative.KEM(projections, system_matrix, kem_transform, object_initial=None, scatter=0)[source]#
Bases:
OSEM
Implementation of the KEM reconstruction algorithm given by \(\hat{\alpha}^{n,m+1} = \left[\frac{1}{K^T H_m^T 1} K^T H_m^T \left(\frac{g_m}{H_m K \hat{\alpha}^{n,m}+s}\right)\right] \hat{\alpha}^{n,m}\) and where the final predicted object is \(\hat{f}^{n,m} = K \hat{\alpha}^{n,m}\).
- Parameters:
proj (torch.Tensor) – projection data \(g\) to be reconstructed
system_matrix (SystemMatrix) – System matrix \(H\) used in \(g=Hf\).
kem_transform (KEMTransform) – The transform corresponding to the matrix \(K\).
object_initial (torch.tensor[batch_size, Lx, Ly, Lz]) – represents the initial object guess \(f^{0,0}\) for the algorithm in object space
scatter (torch.Tensor) – estimate of scatter contribution \(s\).
projections (torch.tensor) –
- __call__(n_iters, n_subsets, callback=None)[source]#
Performs the reconstruction using
n_iters
iterations andn_subsets
subsets.- Parameters:
n_iters (int) – Number of iterations
n_subsets (int) – Number of subsets
callback (Callback, optional) – Callback function to be called after each subiteration. Defaults to None.
- Returns:
reconstructed object
- Return type:
torch.tensor[batch_size, Lx, Ly, Lz]