# PyCorrectedEmissionCT (corrct)
[](https://github.com/cicwi/PyCorrectedEmissionCT/actions/workflows/pythonpackage.yml)


[](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[](https://github.com/cicwi/PyCorrectedEmissionCT/actions/workflows/pythonpackage.yml)\n\n\n[](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"
}