Source code for pytomography.projectors.shared.motion_correction_system_matrix

from __future__ import annotations
from collections.abc import Sequence
from pytomography.projectors import SystemMatrix
from pytomography.transforms import Transform
from ..system_matrix import ExtendedSystemMatrix

[docs]class MotionSystemMatrix(ExtendedSystemMatrix): def __init__( self, system_matrices: Sequence[SystemMatrix], motion_transforms: Sequence[Transform] ) -> None: r"""System matrix that supports motion correction. Maps to an extended image space :math:`\mathcal{V}^{*}` where projections have shape ``[N_gates,...]`` where ``...`` is the regular projeciton size. As such, this transform only supports objects with a batch size of 1. The forward transform is given by :math:`H_n M_n` and back projection is given by :math:`\sum_n M_n^{T} H_n^{T}` where :math:`n` corresponds to the nth motion transform, :math:`H_n` corresponds to the nth system matrix, and :math:`M_n` corresponds to the nth motion transform. Typical motion transforms map to a reference gate, e.g. :math:`M_n = M_{r \to n}` and :math:`M_n^{T} = M_{n \to r}` where :math:`r` is the reference gate. Args: system_matrices (Sequence[SystemMatrix]): List of system matrices corresponding to each gate :math:`n`. Different system matrices may be required in SPECT imaging for example, if different attenuation maps are used for each phase. motion_transforms (Sequence[Transform]): Motion transform corresponding to phase :math:`n`. """ super(MotionSystemMatrix, self).__init__( system_matrices=system_matrices, obj2obj_transforms = motion_transforms )