corrct


Namecorrct JSON
Version 0.9.1 PyPI version JSON
download
home_pagehttps://github.com/cicwi/PyCorrectedEmissionCT
SummaryPhysically corrected projectors for X-ray induced emission CT.
upload_time2024-03-20 02:24:48
maintainerNone
docs_urlNone
authorNicola VIGANÒ
requires_python>=3.9
licenseBSD license
keywords corrct xrf-ct xrd-ct self-attenuation attenuation correction
VCS
bugtrack_url
requirements numpy scipy matplotlib tqdm scikit-image PyWavelets
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PyCorrectedEmissionCT (corrct)

[![Python package](https://github.com/cicwi/PyCorrectedEmissionCT/actions/workflows/pythonpackage.yml/badge.svg)](https://github.com/cicwi/PyCorrectedEmissionCT/actions/workflows/pythonpackage.yml)
![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/cicwi/PyCorrectedEmissionCT)
![License](https://img.shields.io/github/license/cicwi/PyCorrectedEmissionCT)
[![DOI](https://zenodo.org/badge/218092017.svg)](https://zenodo.org/badge/latestdoi/218092017)

Physically corrected projectors for X-ray induced emission CT.
PyCorrectedEmissionCT is usually abbreviated to its python module name: `corrct` (either pronounced "corr-C-T" or "correct").

This package provides the following functionality:

* Support for **attenuation correction** of the forward-projection and back-projection.
* Various solvers (reconstruction algorithms):
  - Simultaneous Iterative Reconstruction Technique (**SIRT**).
  - Maximum Likelihood Estimation Maximisation (**MLEM**).
  - Simultaneous Algebraic Reconstruction Technique (**SART**).
  - Primal-dual optimization from Chambolle-Pock (Primal-Dual Hybrid Gradient - **PDHG**), 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.
    * Multi-channel (collaborative) regularization terms, like: **TNV** (Total Nuclear Variation).
  - Filtered Back-Projection (**FBP**), and its data-dependent filter learning variant
(**[PyMR-FBP](https://github.com/dmpelt/pymrfbp)**).
* Two projector backends, based on: [astra-toolbox](https://github.com/astra-toolbox/astra-toolbox) and
[scikit-image](https://github.com/scikit-image/scikit-image).
* Guided **regularization parameter selection**, through cross-validation and elbow method.
* Projection **alignment** routines.

It contains the code used for the following paper, which also provides a
mathematical description of the attenuation correction 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](https://doi.org/10.1088/1361-6501/aa9d54)

Other useful information:

* Free software: BSD 3-Clause license
* Documentation: [https://cicwi.github.io/PyCorrectedEmissionCT/](https://cicwi.github.io/PyCorrectedEmissionCT/)

## Getting Started

It takes a few steps to setup PyCorrectedEmissionCT on your
machine. We recommend installing
[Anaconda package manager](https://www.anaconda.com/download/) for
Python 3.

### Installing with conda

Simply install with:
```
conda install -c n-vigano corrct
```

If you want fast tomographic projectors using the astra-toolbox:
```
conda install -c astra-toolbox astra-toolbox
```

### Installing from PyPI

Simply install with:
```
pip install corrct
```

If you are on jupyter, and don't have the rights to install packages
system-wide (e.g. on jupyter-slurm at ESRF), then you can install with:
```
! pip install --user 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Ò** - *Main developer*
* **Jerome LESAINT** - *Contributor*
* **Patrick HARRISON** - *Contributor*

See also the list of [contributors](https://github.com/cicwi/PyCorrectedEmissionCT/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](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](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

[Unreleased]: https://www.github.com/cicwi/corrct/compare/v0.9.1...develop

## 0.9.1 - 2024-03-20
### Added
- Overall improvements to `ProjectionGeometry` in the module `models`:
  - Initial support for cone-beam geometry, including Parker weights for FDK
  - Support for detector tilts
  - Better support for detector VU shifts (respecting axes orientation)
- Function to fit scale and bias of an image against data (possibly in a different space)
- Wavelet-Fourier method for the destriping of sinograms
- Ghost Imaging / Structured Illumination:
  - Resolution estimation
  - Mask binning support
- Linear attenuation coefficient computation for a given material
### Fixed
- Bug introduced with scikit-image 0.22
- Alignment and solvers tests

## 0.9.0 - 2023-12-24
### Added
- QR decomposition for structured illumination
- Background computation function from projection edges
- Basic alignment routines:
  - Simple pre-alignment methods, for projection alignment
  - Stack shift tracking, for correcting image drifts
- Experimental astra-toolbox backend support (direct FP and BP)
- Basic phase contrast support:
  - Computing and plotting delta-over-beta
  - Computing TIE and CTF phase propagation functions
- MLEM solver (thanks to J. Lesaint #20)
### Fixed
- Multi-platform pip conda package building
- Type hinting fixes
- Full-field transmission flat-fielding

## 0.8.1 - 2023-05-16
### Added
- Power spectrum calculation function.
### Fixed
- Pypi package creation.

## 0.8.0 - 2023-04-06
### Added
- Ghost imaging support (structured illumination):
  - Theoretical mask generation (incl. MURA, Half-Gaussian, Bernoulli)
  - Dedicated projector (CPU based).
### Fixed
- Circular mask initialization

## 0.7.2 - 2023-02-17
### Added
- Default VolumeGeometry creation from volume.
- Tapering border size support in volume mask.
- 1D gradient based regularizer shortcut.
- Isotropic undecimented wavelet regularizer support.
### Fixed
- Fluorescence line selection case sensitive bug.
- Verbose feedback in parabolic fitting for parameter tuning.

## 0.7.1 - 2022-10-31
### Added
- More documentation / tutorial content.
- Energy conversion functions (keV to m, and vice versa).
- Tapering for truncated volumes in FSC computation.
### Fixed
- Typo that preventing using `ProjectionGeometry` from `models`.
- Shape dimensions (XYZ vs ZXY) interpretation in `VolumeGeometry` and other functions.
- Cross-validation data term initialization in solvers.
- Tapering to circular masks.

## 0.7.0 - 2022-10-11
### Added
- Wide API refactoring: renamed various modules, and moved processing routines to sub-package.
- Initial draft of tutorial. More documentation on the way.
- Line intersection computation.
- Plotting of FRCs.
- Tests: initial support for projectors.
### Fixed
- Typo in function name.
- Simplified examples 01 and 02.
- FRC/FSC axes selection.

## 0.6.0 - 2022-09-08
### Added
- Multi-channel (collaborative) regularization (including TNV - Total Nuclear Variation).
- Support for custom (external, user defined) projection backends.
- Dedicated FBP filters module.
- Parallelization of guided regularization functions.
- A lot of work towards full type hinting usage.
### Fixed
- Potential memory leak in astra-toolbox projector backend.
- Gradient and laplacian implementations for arbitrary directions.
- Output and consistency from tests for solver classes.
- Residual norm computation in the weighted least squares data term.
- Dimension mismatch in projector, when using only one angle.
- Back-projection normalization in scikit-image projector backend.

## 0.5.1 - 2022-06-23
### Added
- Better support for FBP:
  - Dedicated solver class.
  - Support for 3D geometries.
  - Use of scikit-image's filters, with `rfft`.
  - Support for various padding modes (constant, edge, etc).
- Support for various padding modes in gradient, Laplacian and convolution operators.
- Support for Lorentzian and sech^2 beam shapes.
- Computation of Center-of-Mass for volume.
### Fixed
- Border behavior in convolution operator.
- Sanitized projector's angle input.
- Denoising / deconvolution method.
- Models: handling of astra-toolbox's 2D rotation direction.

## 0.5.0 - 2022-04-14
### Added
- New module called `models`:
  - VolumeGeometry: description of the volume.
  - ProjectionGeometry: description / manipulation of the projection geometry.
  - Support for unmatched pixel-voxel size, cone beam geometry, uneven volume shape.
  - Arbitrary geometry, including tilted detector.
- Convolution operator and deconvolution support.
- Support for rotating projection stack.
- Support for computing cross-correlation curves.
- Computation of PSF for pencil beam scanning with gaussian beam.
- Support for computing attenuation maps outside the corrected projector.
### Fixed
- Pixel weights, when having small outliers.
- Volume mask generation
- Dimension bug in azimuthal integration.
- Inconsistency between astra-toolbox and scikit-image backends.

## 0.4.2 - 2022-01-14
### Added
- Support for XRF line handling (Siegbahn).
- Support for log-scaling of data weigths.
- More type hinting and docstrings.
### Fixed
- 3D volume support (especially in astra-toolbox backend).
- Attenuation correction in 3D volumes.
- Handling of multi-detector in attenuation corrected projector (non-symmetric).
- Handling of multi-detector in SART.
- Wavelet scaling in regularizers.
- Installation instructions.
- Flat-fielding function.
- Updated examples to latest solvers changes.

## 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.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/cicwi/PyCorrectedEmissionCT",
    "name": "corrct",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "corrct, xrf-ct, xrd-ct, self-attenuation, attenuation correction",
    "author": "Nicola VIGAN\u00d2",
    "author_email": "N.R.Vigano@cwi.nl",
    "download_url": "https://files.pythonhosted.org/packages/9a/49/e869e1a207ca6078646e0c0a36f41fce3b23321a454afd31475f464ffa2c/corrct-0.9.1.tar.gz",
    "platform": null,
    "description": "# PyCorrectedEmissionCT (corrct)\n\n[![Python package](https://github.com/cicwi/PyCorrectedEmissionCT/actions/workflows/pythonpackage.yml/badge.svg)](https://github.com/cicwi/PyCorrectedEmissionCT/actions/workflows/pythonpackage.yml)\n![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/cicwi/PyCorrectedEmissionCT)\n![License](https://img.shields.io/github/license/cicwi/PyCorrectedEmissionCT)\n[![DOI](https://zenodo.org/badge/218092017.svg)](https://zenodo.org/badge/latestdoi/218092017)\n\nPhysically corrected projectors for X-ray induced emission CT.\nPyCorrectedEmissionCT is usually abbreviated to its python module name: `corrct` (either pronounced \"corr-C-T\" or \"correct\").\n\nThis package provides the following functionality:\n\n* Support for **attenuation correction** of the forward-projection and back-projection.\n* Various solvers (reconstruction algorithms):\n  - Simultaneous Iterative Reconstruction Technique (**SIRT**).\n  - Maximum Likelihood Estimation Maximisation (**MLEM**).\n  - Simultaneous Algebraic Reconstruction Technique (**SART**).\n  - Primal-dual optimization from Chambolle-Pock (Primal-Dual Hybrid Gradient - **PDHG**), with:\n    * Various data fitting terms, including **Gaussian and Poisson noise** modelling.\n    * Various optional regularization terms, including: **TV-min**, l1-min, laplacian, and **wavelet** l1-min.\n    * Multi-channel (collaborative) regularization terms, like: **TNV** (Total Nuclear Variation).\n  - Filtered Back-Projection (**FBP**), and its data-dependent filter learning variant\n(**[PyMR-FBP](https://github.com/dmpelt/pymrfbp)**).\n* Two projector backends, based on: [astra-toolbox](https://github.com/astra-toolbox/astra-toolbox) and\n[scikit-image](https://github.com/scikit-image/scikit-image).\n* Guided **regularization parameter selection**, through cross-validation and elbow method.\n* Projection **alignment** routines.\n\nIt contains the code used for the following paper, which also provides a\nmathematical description of the attenuation correction concepts and algorithms used here:\n\n* N. Vigan\u00f2 and V. A. Sol\u00e9, \"Physically corrected forward operators for\ninduced emission tomography: a simulation study,\" Meas. Sci. Technol., no.\nAdvanced X-Ray Tomography, pp. 1\u201326, Nov. 2017.  \n[https://doi.org/10.1088/1361-6501/aa9d54](https://doi.org/10.1088/1361-6501/aa9d54)\n\nOther useful information:\n\n* Free software: BSD 3-Clause license\n* Documentation: [https://cicwi.github.io/PyCorrectedEmissionCT/](https://cicwi.github.io/PyCorrectedEmissionCT/)\n\n## Getting Started\n\nIt takes a few steps to setup PyCorrectedEmissionCT on your\nmachine. We recommend installing\n[Anaconda package manager](https://www.anaconda.com/download/) for\nPython 3.\n\n### Installing with conda\n\nSimply install with:\n```\nconda install -c n-vigano corrct\n```\n\nIf you want fast tomographic projectors using the astra-toolbox:\n```\nconda install -c astra-toolbox astra-toolbox\n```\n\n### Installing from PyPI\n\nSimply install with:\n```\npip install corrct\n```\n\nIf you are on jupyter, and don't have the rights to install packages\nsystem-wide (e.g. on jupyter-slurm at ESRF), then you can install with:\n```\n! pip install --user corrct\n```\n\n### Installing from source\n\nTo install PyCorrectedEmissionCT, simply clone this GitHub\nproject. Go to the cloned directory and run PIP installer:\n```\ngit clone https://github.com/cicwi/PyCorrectedEmissionCT.git corrct\ncd corrct\npip install -e .\n```\n\n### Running the examples\n\nTo learn more about the functionality of the package check out our\nexamples folder.\n\n## Authors and contributors\n\n* **Nicola VIGAN\u00d2** - *Main developer*\n* **Jerome LESAINT** - *Contributor*\n* **Patrick HARRISON** - *Contributor*\n\nSee also the list of [contributors](https://github.com/cicwi/PyCorrectedEmissionCT/contributors) who participated in this project.\n\n## How to contribute\n\nContributions are always welcome. Please submit pull requests against the `master` branch.\n\nIf you have any issues, questions, or remarks, then please open an issue on GitHub.\n\n## License\n\nThis project is licensed under the BSD license - see the [LICENSE.md](LICENSE.md) file for details.\n\n# Changelog\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n[Unreleased]: https://www.github.com/cicwi/corrct/compare/v0.9.1...develop\n\n## 0.9.1 - 2024-03-20\n### Added\n- Overall improvements to `ProjectionGeometry` in the module `models`:\n  - Initial support for cone-beam geometry, including Parker weights for FDK\n  - Support for detector tilts\n  - Better support for detector VU shifts (respecting axes orientation)\n- Function to fit scale and bias of an image against data (possibly in a different space)\n- Wavelet-Fourier method for the destriping of sinograms\n- Ghost Imaging / Structured Illumination:\n  - Resolution estimation\n  - Mask binning support\n- Linear attenuation coefficient computation for a given material\n### Fixed\n- Bug introduced with scikit-image 0.22\n- Alignment and solvers tests\n\n## 0.9.0 - 2023-12-24\n### Added\n- QR decomposition for structured illumination\n- Background computation function from projection edges\n- Basic alignment routines:\n  - Simple pre-alignment methods, for projection alignment\n  - Stack shift tracking, for correcting image drifts\n- Experimental astra-toolbox backend support (direct FP and BP)\n- Basic phase contrast support:\n  - Computing and plotting delta-over-beta\n  - Computing TIE and CTF phase propagation functions\n- MLEM solver (thanks to J. Lesaint #20)\n### Fixed\n- Multi-platform pip conda package building\n- Type hinting fixes\n- Full-field transmission flat-fielding\n\n## 0.8.1 - 2023-05-16\n### Added\n- Power spectrum calculation function.\n### Fixed\n- Pypi package creation.\n\n## 0.8.0 - 2023-04-06\n### Added\n- Ghost imaging support (structured illumination):\n  - Theoretical mask generation (incl. MURA, Half-Gaussian, Bernoulli)\n  - Dedicated projector (CPU based).\n### Fixed\n- Circular mask initialization\n\n## 0.7.2 - 2023-02-17\n### Added\n- Default VolumeGeometry creation from volume.\n- Tapering border size support in volume mask.\n- 1D gradient based regularizer shortcut.\n- Isotropic undecimented wavelet regularizer support.\n### Fixed\n- Fluorescence line selection case sensitive bug.\n- Verbose feedback in parabolic fitting for parameter tuning.\n\n## 0.7.1 - 2022-10-31\n### Added\n- More documentation / tutorial content.\n- Energy conversion functions (keV to m, and vice versa).\n- Tapering for truncated volumes in FSC computation.\n### Fixed\n- Typo that preventing using `ProjectionGeometry` from `models`.\n- Shape dimensions (XYZ vs ZXY) interpretation in `VolumeGeometry` and other functions.\n- Cross-validation data term initialization in solvers.\n- Tapering to circular masks.\n\n## 0.7.0 - 2022-10-11\n### Added\n- Wide API refactoring: renamed various modules, and moved processing routines to sub-package.\n- Initial draft of tutorial. More documentation on the way.\n- Line intersection computation.\n- Plotting of FRCs.\n- Tests: initial support for projectors.\n### Fixed\n- Typo in function name.\n- Simplified examples 01 and 02.\n- FRC/FSC axes selection.\n\n## 0.6.0 - 2022-09-08\n### Added\n- Multi-channel (collaborative) regularization (including TNV - Total Nuclear Variation).\n- Support for custom (external, user defined) projection backends.\n- Dedicated FBP filters module.\n- Parallelization of guided regularization functions.\n- A lot of work towards full type hinting usage.\n### Fixed\n- Potential memory leak in astra-toolbox projector backend.\n- Gradient and laplacian implementations for arbitrary directions.\n- Output and consistency from tests for solver classes.\n- Residual norm computation in the weighted least squares data term.\n- Dimension mismatch in projector, when using only one angle.\n- Back-projection normalization in scikit-image projector backend.\n\n## 0.5.1 - 2022-06-23\n### Added\n- Better support for FBP:\n  - Dedicated solver class.\n  - Support for 3D geometries.\n  - Use of scikit-image's filters, with `rfft`.\n  - Support for various padding modes (constant, edge, etc).\n- Support for various padding modes in gradient, Laplacian and convolution operators.\n- Support for Lorentzian and sech^2 beam shapes.\n- Computation of Center-of-Mass for volume.\n### Fixed\n- Border behavior in convolution operator.\n- Sanitized projector's angle input.\n- Denoising / deconvolution method.\n- Models: handling of astra-toolbox's 2D rotation direction.\n\n## 0.5.0 - 2022-04-14\n### Added\n- New module called `models`:\n  - VolumeGeometry: description of the volume.\n  - ProjectionGeometry: description / manipulation of the projection geometry.\n  - Support for unmatched pixel-voxel size, cone beam geometry, uneven volume shape.\n  - Arbitrary geometry, including tilted detector.\n- Convolution operator and deconvolution support.\n- Support for rotating projection stack.\n- Support for computing cross-correlation curves.\n- Computation of PSF for pencil beam scanning with gaussian beam.\n- Support for computing attenuation maps outside the corrected projector.\n### Fixed\n- Pixel weights, when having small outliers.\n- Volume mask generation\n- Dimension bug in azimuthal integration.\n- Inconsistency between astra-toolbox and scikit-image backends.\n\n## 0.4.2 - 2022-01-14\n### Added\n- Support for XRF line handling (Siegbahn).\n- Support for log-scaling of data weigths.\n- More type hinting and docstrings.\n### Fixed\n- 3D volume support (especially in astra-toolbox backend).\n- Attenuation correction in 3D volumes.\n- Handling of multi-detector in attenuation corrected projector (non-symmetric).\n- Handling of multi-detector in SART.\n- Wavelet scaling in regularizers.\n- Installation instructions.\n- Flat-fielding function.\n- Updated examples to latest solvers changes.\n\n## 0.4.1 - 2021-12-06\n### Added\n- Uncertainty propagation functions, for weighted minimizations.\n- Unpreconditioned l1-minimization (standard behavior).\n### Fixed\n- Double application of weights in SIRT weighted least squares.\n- Use PDHG preconditioning by default.\n- Wavelet approximation minimization by default.\n\n## 0.4.0 - 2021-11-29\n### Added\n- Moved data terms and regularizers to dedicated module.\n- Conditional minimization of low pass (approximation) portion of wavelet decomposition.\n- Cross-validation and L-curve methods for selecting regularization parameters.\n- Support for different regularization weights across reconstruction volume.\n- Improved corrected projector performance.\n- Restructured and expanded test phantom creation.\n- Basic multi-threading support for CPU operations.\n- Initial type hinting.\n- FRC/FSC and azimuthal integration support.\n- Automatic image denoising (with cross-validation).\n### Fixed\n- Size of transformed volumes in dwt.\n- Deprecation warnings from recent numpy versions.\n- Warning in scikit-image projector backend.\n- Copy of x0 and data terms in solvers.\n- Angle consistency among different projectors.\n- ProjectorMatrix when using precondioned PDHG solver.\n\n## 0.3.2 - 2021-04-15\n### Added\n- scikit-image backend, as preferred in 2D non-GPU reconstructions.\n- Renamed AttenuationProjector into ProjectorAttenuationXRF.\n- Support for test/cross-validation sets in solvers.\n- Residual calculation with different data-fidelity terms.\n- Projection matrix based projector.\n### Fixed\n- PyWavelets interface change.\n- Background usage in the data terms.\n- Examples on the different data-fidelity terms.\n- Github workflows to use pip instead of conda.\n\n## 0.3.1 - 2020-10-20\n### Added\n- FFT operator, and FFT regularizer.\n- l2-gradient (smooth) regularizer.\n- Support for multiple regularizers.\n### Fixed\n- Norm l2b (deadzone) is also weighted now.\n- Weighted least-squares implementation.\n- Crop inverse DWT output when necessary.\n- Changelog of 0.3.0\n\n## 0.3.0 - 2020-09-23\n### Added\n- Data fidelity classes:\n  - Use as norms for regularizers.\n  - New classes: Huber norm, l12, l2b (l2 with deadzone), l1b (l1 with deadzone).\n  - Residual computation.\n  - Background bias support.\n- Regularization:\n  - New classes: smoothness based on gradient, Huber TV, decimated wavelets, Huber wavelet, median filter.\n  - Constraint classes (lower and upper limits) based on regularization.\n  - Simplified and unified code.\n- Solvers:\n  - SIRT now supports various l2 norm data terms.\n  - CP and SIRT report better information on regularization.\n  - Use of data term to compute residual correctly.\n- More flexibility and options to image denoiser.\n- New module for easing development of tests and examples.\n### Fixed\n- Python hard crash when CUDA not available.\n- Examples to comply with recent changes.\n- Axes passing to wavelet transform.\n- Stationary wavelet weights calculation.\n\n## 0.2.4 - 2020-06-01\n### Added\n- Operator form (based on scipy.linalg.LinearOperator) for regularizers and projectors\n- Data fidelity function classes, including weighted least-squares\n- More test coverage\n- Support for non GPU reconstructions (in 2D)\n- Multi-dimensional volume mask creation\n### Fixed\n- SIRT regularization\n- Windows conda package build, and Python 3.8 target\n- Laplacian regularizer norm\n- Wavelet regularizer normalization\n\n## 0.2.3 - 2020-05-05\n### Added\n- On-demand padding for Wavelet regularizer\n- Projection intensity rescaling for different angles in base projector\n- Support for 3D absorption maps (but not thouroughly tested, yet)\n- Data-term residual computation to all solvers\n- Some tests to solvers and regularizers\n- Automated testing and linting on github workflows\n- Support for ASTRA's super-sampling of pixels and voxels\n- Implemented scipy's sparse LinearOperator interface for the projectors\n- Utility min-log and simple flat-fielding functions for transmission data\n### Fixed\n- Copy-paste error, and detector data axis order in SART algorithm implementation\n- Weights for masks in SART algorithm\n- Error in unpreconditioned CP implementation\n- Applied linting changes, to improve the readability of the code\n\n## 0.2.2 - 2020-03-30\n### Added\n- Unpreconditioned Chambolle-Pock algorithm (as default)\n- Utility functions for sinogram padding and circular volume mask creation\n- FBP data-dependent filters from D. Pelt\n- Improved performance of backprojection in non-symmetric uncorrected\n### Fixed\n- Wavelet decomposition along one dimension\n- TV regularizer for dimensions larger than ndims\n- Documentation and links\n- Handling of matrices\n\n## 0.2.1 - 2020-02-25\n### Added\n- New regularizers: non-decimated wavelets and laplacian\n- Solvers: added projection masks, relaxation parameters, sirt regularizers\n- Uncorrected projector for 2D and 3D data\n### Fixed\n- sub-pixel attenuation correction\n\n## 0.2.0 - 2019-11-05\n### Added\n- Multi-detector reconstruction\n### Fixed\n- TV-min sign\n- Solvers' name visualization\n- Back-projection behavior with different inputs\n\n## 0.1.0 - 2019-10-29\n### Added\n- Initial release, with corrected forward and back-projections.\n- SIRT, SART, and Chambolle-Pock solvers.\n- TV-min and l1-norm based regularizers.\n",
    "bugtrack_url": null,
    "license": "BSD license",
    "summary": "Physically corrected projectors for X-ray induced emission CT.",
    "version": "0.9.1",
    "project_urls": {
        "Homepage": "https://github.com/cicwi/PyCorrectedEmissionCT"
    },
    "split_keywords": [
        "corrct",
        " xrf-ct",
        " xrd-ct",
        " self-attenuation",
        " attenuation correction"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e888471ce4f3a1cee8219efe059146a1c3b4353101d5d7463151b7c0b79c6888",
                "md5": "21af6dd2911ed0f7d70258e771505911",
                "sha256": "aaf29a4206bf47bacad2643dd40ef90b3e686aae08bab4713207b55d57229071"
            },
            "downloads": -1,
            "filename": "corrct-0.9.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "21af6dd2911ed0f7d70258e771505911",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 112430,
            "upload_time": "2024-03-20T02:24:44",
            "upload_time_iso_8601": "2024-03-20T02:24:44.778818Z",
            "url": "https://files.pythonhosted.org/packages/e8/88/471ce4f3a1cee8219efe059146a1c3b4353101d5d7463151b7c0b79c6888/corrct-0.9.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9a49e869e1a207ca6078646e0c0a36f41fce3b23321a454afd31475f464ffa2c",
                "md5": "36223d5611ff0c07f917bafd96bb9f32",
                "sha256": "5aec42d3869f0e22db06f68f8c3be489cca4b8cd67f11c4d98bd9ed045b05836"
            },
            "downloads": -1,
            "filename": "corrct-0.9.1.tar.gz",
            "has_sig": false,
            "md5_digest": "36223d5611ff0c07f917bafd96bb9f32",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 109255,
            "upload_time": "2024-03-20T02:24:48",
            "upload_time_iso_8601": "2024-03-20T02:24:48.144093Z",
            "url": "https://files.pythonhosted.org/packages/9a/49/e869e1a207ca6078646e0c0a36f41fce3b23321a454afd31475f464ffa2c/corrct-0.9.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-20 02:24:48",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cicwi",
    "github_project": "PyCorrectedEmissionCT",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.21"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": []
        },
        {
            "name": "matplotlib",
            "specs": []
        },
        {
            "name": "tqdm",
            "specs": []
        },
        {
            "name": "scikit-image",
            "specs": []
        },
        {
            "name": "PyWavelets",
            "specs": []
        }
    ],
    "lcname": "corrct"
}
        
Elapsed time: 0.86453s