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.
- Cleanup progress support in solvers
- Cleanup of legacy API
- Modern multi-threading code
- Building documentation
- Moved to a src/ directory structure
- Moved to pyproject.toml instead of setup.cfg
- NumPy 2.0 compatibility
- 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
- Bug introduced with scikit-image 0.22
- Alignment and solvers tests
- 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)
- Multi-platform pip conda package building
- Type hinting fixes
- Full-field transmission flat-fielding
- Power spectrum calculation function.
- Pypi package creation.
- Ghost imaging support (structured illumination):
- Theoretical mask generation (incl. MURA, Half-Gaussian, Bernoulli)
- Dedicated projector (CPU based).
- Circular mask initialization
- Default VolumeGeometry creation from volume.
- Tapering border size support in volume mask.
- 1D gradient based regularizer shortcut.
- Isotropic undecimented wavelet regularizer support.
- Fluorescence line selection case sensitive bug.
- Verbose feedback in parabolic fitting for parameter tuning.
- More documentation / tutorial content.
- Energy conversion functions (keV to m, and vice versa).
- Tapering for truncated volumes in FSC computation.
- 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.
- 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.
- Typo in function name.
- Simplified examples 01 and 02.
- FRC/FSC axes selection.
- 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.
- 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.
- 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.
- Border behavior in convolution operator.
- Sanitized projector's angle input.
- Denoising / deconvolution method.
- Models: handling of astra-toolbox's 2D rotation direction.
- 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.
- Pixel weights, when having small outliers.
- Volume mask generation
- Dimension bug in azimuthal integration.
- Inconsistency between astra-toolbox and scikit-image backends.
- Support for XRF line handling (Siegbahn).
- Support for log-scaling of data weigths.
- More type hinting and docstrings.
- 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.
- Uncertainty propagation functions, for weighted minimizations.
- Unpreconditioned l1-minimization (standard behavior).
- Double application of weights in SIRT weighted least squares.
- Use PDHG preconditioning by default.
- Wavelet approximation minimization by default.
- 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).
- 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.
- 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.
- PyWavelets interface change.
- Background usage in the data terms.
- Examples on the different data-fidelity terms.
- Github workflows to use pip instead of conda.
- FFT operator, and FFT regularizer.
- l2-gradient (smooth) regularizer.
- Support for multiple regularizers.
- Norm l2b (deadzone) is also weighted now.
- Weighted least-squares implementation.
- Crop inverse DWT output when necessary.
- Changelog of 0.3.0
- 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.
- Python hard crash when CUDA not available.
- Examples to comply with recent changes.
- Axes passing to wavelet transform.
- Stationary wavelet weights calculation.
- 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
- SIRT regularization
- Windows conda package build, and Python 3.8 target
- Laplacian regularizer norm
- Wavelet regularizer normalization
- 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
- 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
- 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
- Wavelet decomposition along one dimension
- TV regularizer for dimensions larger than ndims
- Documentation and links
- Handling of matrices
- New regularizers: non-decimated wavelets and laplacian
- Solvers: added projection masks, relaxation parameters, sirt regularizers
- Uncorrected projector for 2D and 3D data
- sub-pixel attenuation correction
- Multi-detector reconstruction
- TV-min sign
- Solvers' name visualization
- Back-projection behavior with different inputs
- Initial release, with corrected forward and back-projections.
- SIRT, SART, and Chambolle-Pock solvers.
- TV-min and l1-norm based regularizers.