RadonKA.jl
A simple yet sufficiently fast Radon and adjoint Radon (backproject) transform implementation using KernelAbstractions.jl.
Quick Overview
- [x] For 2D and 3D arrays
- [x] parallel
radon
andbackproject
(?RadonParallelCircle
) - [x] attenuated
radon
andbackproject
(see the parameterμ
) - [x] arbitrary 2D geometries where starting and endpoint of each ray can be specified (fan beam could be a special case if this) (
?RadonFlexibleCircle
) - [x] It is restricted to the incircle of radius
N ÷ 2 - 1
if the array has size(N, N, N_z)
- [x] based on KernelAbstractions.jl
- [x] tested on
CPU()
andCUDABackend
- [x] registered adjoint rules for both
radon
andbackproject
- [x] high performance however not ultra high performance
- [x] simple API
Installation
Requires Julia 1.9
julia> ]add RadonKA
Simple use
using RadonKA, ImageShow, ImageIO, TestImages
img = Float32.(testimage("resolution_test_512"))
angles = range(0f0, 2f0π, 500)[begin:end-1]
# 0.196049 seconds (145 allocations: 1009.938 KiB)
@time sinogram = radon(img, angles);
# 0.268649 seconds (147 allocations: 1.015 MiB)
@time backproject = RadonKA.backproject(sinogram, angles);
simshow(sinogram)
simshow(backproject)
Examples
See either the documentation. Otherwise, this example shows the main features, including CUDA support. There is one tutorial about Gradient Descent optimization. Another one covers how the Radon transform is used in Volumetric Additive Manufacturing.
Development
File an issue on GitHub if you encounter any problems.
Citation
This package was created as part of scientific work. Please consider citing it :)
@misc{wechsler2024wave,
title={Wave optical model for tomographic volumetric additive manufacturing},
author={Felix Wechsler and Carlo Gigli and Jorge Madrid-Wolff and Christophe Moser},
year={2024},
eprint={2402.06283},
archivePrefix={arXiv},
primaryClass={physics.optics}
}