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.
1.0.0rc2 - 2024-11-13
Added
Cleanup progress support in solvers
Cleanup of legacy API
Modern multi-threading code
Fixed
Building documentation
1.0.0rc1 - 2024-10-03
Added
Moved to a src/ directory structure
Moved to pyproject.toml instead of setup.cfg
Fixed
NumPy 2.0 compatibility
0.9.1 - 2024-03-20
Added
Overall improvements to
ProjectionGeometry
in the modulemodels
: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
frommodels
.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.