Skip to main content

Physically corrected projectors for X-ray induced emission CT.

Project description

PyCorrectedEmissionCT

Python package GitHub tag (latest by date) License DOI

Physically corrected projectors for X-ray induced emission CT.

This package provides the following functionality:

  • Support for correction of the forward-projection and back-projection.
  • Includes the following solvers (reconstruction algorithms):
    • Simultaneous Iterative Reconstruction Technique (SIRT).
    • Simultaneous Algebraic Reconstruction Technique (SART).
    • Primal-dual optimization from Chambolle-Pock, with:
      • Various data fitting terms, including Gaussian and Poisson noise modelling.
      • Various optional regularization terms, including: TV-min, l1-min, laplacian, and wavelet l1-min.

It contains the code used for the following paper, which also provides a mathematical description of the concepts and algorithms used here:

  • N. Viganò and V. A. Solé, "Physically corrected forward operators for induced emission tomography: a simulation study," Meas. Sci. Technol., no. Advanced X-Ray Tomography, pp. 1–26, Nov. 2017.
    https://doi.org/10.1088/1361-6501/aa9d54

Other useful information:

Getting Started

It takes a few steps to setup PyCorrectedEmissionCT on your machine. We recommend installing Anaconda package manager for Python 3.

Installing with conda

Simply install with:

conda install -c n-vigano corrct

Installing from source

To install PyCorrectedEmissionCT, simply clone this GitHub project. Go to the cloned directory and run PIP installer:

git clone https://github.com/cicwi/PyCorrectedEmissionCT.git corrct
cd corrct
pip install -e .

Running the examples

To learn more about the functionality of the package check out our examples folder.

Authors and contributors

  • Nicola VIGANÒ - Initial work

See also the list of contributors who participated in this project.

How to contribute

Contributions are always welcome. Please submit pull requests against the master branch.

If you have any issues, questions, or remarks, then please open an issue on GitHub.

License

This project is licensed under the BSD license - see the LICENSE.md file for details.

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.4.1 - 2021-12-06

Added

  • Uncertainty propagation functions, for weighted minimizations.
  • Unpreconditioned l1-minimization (standard behavior).

Fixed

  • Double application of weights in SIRT weighted least squares.
  • Use PDHG preconditioning by default.
  • Wavelet approximation minimization by default.

0.4.0 - 2021-11-29

Added

  • Moved data terms and regularizers to dedicated module.
  • Conditional minimization of low pass (approximation) portion of wavelet decomposition.
  • Cross-validation and L-curve methods for selecting regularization parameters.
  • Support for different regularization weights across reconstruction volume.
  • Improved corrected projector performance.
  • Restructured and expanded test phantom creation.
  • Basic multi-threading support for CPU operations.
  • Initial type hinting.
  • FRC/FSC and azimuthal integration support.
  • Automatic image denoising (with cross-validation).

Fixed

  • Size of transformed volumes in dwt.
  • Deprecation warnings from recent numpy versions.
  • Warning in scikit-image projector backend.
  • Copy of x0 and data terms in solvers.
  • Angle consistency among different projectors.
  • ProjectorMatrix when using precondioned PDHG solver.

0.3.2 - 2021-04-15

Added

  • scikit-image backend, as preferred in 2D non-GPU reconstructions.
  • Renamed AttenuationProjector into ProjectorAttenuationXRF.
  • Support for test/cross-validation sets in solvers.
  • Residual calculation with different data-fidelity terms.
  • Projection matrix based projector.

Fixed

  • PyWavelets interface change.
  • Background usage in the data terms.
  • Examples on the different data-fidelity terms.
  • Github workflows to use pip instead of conda.

0.3.1 - 2020-10-20

Added

  • FFT operator, and FFT regularizer.
  • l2-gradient (smooth) regularizer.
  • Support for multiple regularizers.

Fixed

  • Norm l2b (deadzone) is also weighted now.
  • Weighted least-squares implementation.
  • Crop inverse DWT output when necessary.
  • Changelog of 0.3.0

0.3.0 - 2020-09-23

Added

  • Data fidelity classes:
    • Use as norms for regularizers.
    • New classes: Huber norm, l12, l2b (l2 with deadzone), l1b (l1 with deadzone).
    • Residual computation.
    • Background bias support.
  • Regularization:
    • New classes: smoothness based on gradient, Huber TV, decimated wavelets, Huber wavelet, median filter.
    • Constraint classes (lower and upper limits) based on regularization.
    • Simplified and unified code.
  • Solvers:
    • SIRT now supports various l2 norm data terms.
    • CP and SIRT report better information on regularization.
    • Use of data term to compute residual correctly.
  • More flexibility and options to image denoiser.
  • New module for easing development of tests and examples.

Fixed

  • Python hard crash when CUDA not available.
  • Examples to comply with recent changes.
  • Axes passing to wavelet transform.
  • Stationary wavelet weights calculation.

0.2.4 - 2020-06-01

Added

  • Operator form (based on scipy.linalg.LinearOperator) for regularizers and projectors
  • Data fidelity function classes, including weighted least-squares
  • More test coverage
  • Support for non GPU reconstructions (in 2D)
  • Multi-dimensional volume mask creation

Fixed

  • SIRT regularization
  • Windows conda package build, and Python 3.8 target
  • Laplacian regularizer norm
  • Wavelet regularizer normalization

0.2.3 - 2020-05-05

Added

  • On-demand padding for Wavelet regularizer
  • Projection intensity rescaling for different angles in base projector
  • Support for 3D absorption maps (but not thouroughly tested, yet)
  • Data-term residual computation to all solvers
  • Some tests to solvers and regularizers
  • Automated testing and linting on github workflows
  • Support for ASTRA's super-sampling of pixels and voxels
  • Implemented scipy's sparse LinearOperator interface for the projectors
  • Utility min-log and simple flat-fielding functions for transmission data

Fixed

  • Copy-paste error, and detector data axis order in SART algorithm implementation
  • Weights for masks in SART algorithm
  • Error in unpreconditioned CP implementation
  • Applied linting changes, to improve the readability of the code

0.2.2 - 2020-03-30

Added

  • Unpreconditioned Chambolle-Pock algorithm (as default)
  • Utility functions for sinogram padding and circular volume mask creation
  • FBP data-dependent filters from D. Pelt
  • Improved performance of backprojection in non-symmetric uncorrected

Fixed

  • Wavelet decomposition along one dimension
  • TV regularizer for dimensions larger than ndims
  • Documentation and links
  • Handling of matrices

0.2.1 - 2020-02-25

Added

  • New regularizers: non-decimated wavelets and laplacian
  • Solvers: added projection masks, relaxation parameters, sirt regularizers
  • Uncorrected projector for 2D and 3D data

Fixed

  • sub-pixel attenuation correction

0.2.0 - 2019-11-05

Added

  • Multi-detector reconstruction

Fixed

  • TV-min sign
  • Solvers' name visualization
  • Back-projection behavior with different inputs

0.1.0 - 2019-10-29

Added

  • Initial release, with corrected forward and back-projections.
  • SIRT, SART, and Chambolle-Pock solvers.
  • TV-min and l1-norm based regularizers.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

corrct-0.4.1.tar.gz (44.8 kB view hashes)

Uploaded Source

Built Distribution

corrct-0.4.1-py3-none-any.whl (47.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page