This package provides matched forward and back projectors for X-ray computed tomography that run multi-threaded on the CPU and on GPUs (CUDA, AMD, Apple) from the same code base.
Important
CTOperators.jl is in an early stage of development and not registered yet. Its interface may still change.
- Projectors for iterative reconstruction: geometry and workspace are set up once and reused by every forward and back projection; the back projection is the exact transpose of the forward projection.
- Two ray-driven projectors: Siddon's method (in the incremental form of Jacobs et al.), exact intersection lengths of rays and voxels, and Joseph's method, linear interpolation between the voxel centres. Footprint-based projectors are planned.
- Generic geometries: arbitrary rays given by start and end points, and per-view descriptions of cone-beam (flat or curved detector) and parallel-beam scanners with any trajectory: circular, helical, or a moving object. Geometries of Sinograms.jl work directly.
- One code base for CPU and GPU, written with KernelAbstractions.jl.
- Differentiable with respect to image and projection data (ChainRulesCore rules).
- Part of the JuliaImageRecon family: images are described by ImageGeoms.jl, reconstructions run with RegularizedLeastSquares.jl.
using CTOperators
image = ImageGeom(; dims=(128, 128, 128), deltas=(1.0, 1.0, 1.0))
geometry = helical_cone_beam(; angles=range(0, 4pi, 360), pitch=64, dso=256, dsd=512,
nu=256, nv=128, du=1.0, dv=1.0)
op = SiddonProjector(image, geometry) # Float32 on the CPU
x = rand(Float32, 128, 128, 128)
y = op * x # projections, size (256, 128, 360)
z = adjoint(op) * y # back projectionOn a GPU, create the projector with the GPU's array type, e.g. SiddonProjector(image, geometry; storage=CuArray), and pass data that lives on the GPU.
using Pkg
Pkg.add(url="https://github.com/JuliaImageRecon/CTOperators.jl")benchmark/ compares CTOperators.jl with parallelproj
and RadonKA.jl; see its README for how to run it and for
first results.
This project is part of the Julia community and follows the Julia community standards.