Source code for nabu.reconstruction.reconstructor_cuda

import numpy as np
from .fbp import Backprojector
from .reconstructor import Reconstructor


[docs] class CudaReconstructor(Reconstructor): def __init__(self, shape, indices, axis="z", vol_type="sinograms", slices_roi=None, **backprojector_options): Reconstructor.__init__(self, shape, indices, axis=axis, vol_type=vol_type, slices_roi=slices_roi) self._init_backprojector(**backprojector_options) def _init_backprojector(self, **backprojector_options): self.backprojector = Backprojector( self.sinos_shape[1:], slice_roi=self.backprojector_roi, **backprojector_options )
[docs] def reconstruct(self, data, output=None): """ Reconstruct from sinograms or projections. """ self._check_data(data) B = self.backprojector if output is None: output = np.zeros(self.output_shape, "f") new_output = True else: assert output.shape == self.output_shape, str( "Expected output_shape = %s, got %s" % (str(self.output_shape), str(output.shape)) ) assert output.dtype == np.float32 new_output = False def reconstruct_fbp(data, output, i, i0): if self.vol_type == "sinograms": current_sino = data[i] else: current_sino = data[:, i, :] if new_output: output[i0] = B.fbp(current_sino) else: B.fbp(current_sino, output=output[i0]) for i0, i in enumerate(self._z_indices): reconstruct_fbp(data, output, i, i0) return output