Releases: SuperElastix/elastix
5.2.0
Release notes
By downloading elastix
you accept the conditions written here.
If you use this software, please check the README (section Authors) on how to cite our work.
elastix 5.2.0
was released in July 2024. All binaries were created using ITK 5.4.0
.
download | description | compiler | CMake version |
---|---|---|---|
elastix-5.2.0-manual.pdf | The manual | ||
elastix-5.2.0-win64.zip | Windows 64 bit binaries | Visual Studio 2022 MSVC 194033812 | CMake 3.24.2 |
elastix-5.2.0-linux.zip | Linux binaries (Ubuntu 22.04) | GNU 11.4.0 | CMake 3.24.2 |
elastix-5.2.0-mac.zip | MacOS 12 binaries | AppleClang LLVM 14.0.0 (clang-1400.0.29.202) | CMake 3.24.2 |
Note: when using the Windows binaries (elastix-5.2.0-win64.zip), you may need to install or update the appropriate Visual C++ redistributable on your machine (typically the one for X64). Visual C++ redistributables can be found at https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
Some download statistics can be found here.
Enhancements
850d469 Renamed "SubtractMean" parameter to "UseZeroAverageDisplacementConstraint", for metrics used for groupwise registration. ("SubtractMean" still supported for backward compatibility.)
8111c67 Added support for the "ComputeZYX" parameter to EulerStackTransform (for a 4D stack of 3D images).
76fa510 Added "UseMultiThreadingForSamplers" parameter for sampling (default "true").
a7ae46e Allowed the file name specified by the "InitialTransformParameterFileName" parameter in a transform parameter file to be relative to that transform parameter file.
05d2b40 Support "ShowProgressPercentage" parameter (false
by default).
c90f1c4 Added "-loglevel" command-line option to elastix and transformix exe (possible values: "off", "error", "warning", or "info")
Library specific enhancements
58e0a7b Both ElastixRegistrationMethod and TransformixFilter now convert their input images to the internal pixel type, specified by elastix/transformix parameters, "FixedInternalImagePixelType" and "MovingInternalImagePixelType" (which are "float" by default).
23ef432 Avoided irrelevant log messages saying "-fMask unspecified" or "-mMask unspecified".
9d76b86 Added support for ELASTIX_BUILD_EXECUTABLE
, allowing to switch off building the elastix and transformix executables, while still building the libraries.
c4ef707 Added GetLogLevel
and SetLogLevel
member functions to both itk::ElastixRegistrationMethod
and itk::TransformixFilter
, allowing the user to reduce the amount of logging from elastix and transformix, both to the log file and the console (standard output). Equivalent to the aforementioned new "-loglevel" command-line option.
5c450b6 elastix::ParameterObject::WriteParameterFile
now writes floating point numbers without rounding errors
71a4a9a Added SetTransformParameterFileName(string)
and GetTransformParameterFileName()
to itk::TransformixFilter
9e64269 Let itk::ElastixRegistrationMethod
write the transform maps from its InitialTransformParameterObject to the output directory.
48c6458 Added SetInitialTransformParameterObject(parameterObject)
to itk::ElastixRegistrationMethod
115d8e1 Added SetInitialTransform(transform)
to itk::ElastixRegistrationMethod
2393728, 9d9ec49 Added support for external ITK transforms as input to both elastix and transformix. An external ITK transform may be provided by the user, created by using ITK, outside of elastix. Such a transform may serve as input to elastix by ElastixRegistrationMethod::SetExternalInitialTransform
and itk::TransformixFilter::SetExternalTransform
.
Performance
Overall, an entire run of elastix was observed to be around 5 percent faster than with the previous elastix release (5.1.0), for common registration scenario's. ITK's ThreadPool is used extensively. Some details:
- The internal
ComputeImageExtremaFilter
has been made up to 6x as fast (pull request #1046), significantly improving the performance of metric components - Full Sampler and Grid Sampler have been made ~3x as fast, when the input image and the mask have the same domain (geometry)
3x as fast - Grid Sampler is made multithreaded
- Grid Sampler is using memory more efficiently (by doing
sampleVector.reserve
), making the sampling twice as fast (on the use case of sampling without mask) - Samplers have multithreading enabled by default. Affects Full, Random, RandomCoordinate, and RandomSamplerSparseMask samplers.
- Speed up full, grid, sparse mask samplers by using a local sampleVector variable. (May make sampling almost twice as fast.)
- Internal function calls of the form
mask->IsInsideInWorldSpace(point)
have become twice as fast, improving both metrics and samplers.
The CMake option ELASTIX_USE_OPENMP
was dropped, as elastix multi-threading is now fully based on standard C++ threads, and making use of ITK's ThreadPool
.
Bug Fixes
e3cafc5 Fixed support of specifying the number of threads in the thread pool ("-threads" N command-line argument).
d1e52fc Fixed a small memory leak in ParabolicErodeDilateImageFilter, affecting the use of "ErodeMask".
60d3712 Fixed support SumOfPairwiseCorrelationCoefficients metric for use cases without stack transform.
76ede5d Added missing ComputeZYX property to FixedParameters of Euler Transform for 3D, to ensure that ComputeZYX is properly stored and retrieved.
33c3873, 34bdc3b Fixed overrides of PowellOptimizer, FRPROptimizer. Relevant when using the "ConjugateGradientFRPR" optimizer.
bc1ddf0 Let ParabolicErodeDilateImageFilter::SplitRequestedRegion override ITK's ImageSource, affecting the use of "ErodeMask".
f5b9024 ImageFullSampler do mask updates single-threaded, to avoid race conditions.
a53d49d ComputeImageExtremaFilter SameGeometry function include Index, Spacing, and Direction, fixing issue #1023.
a57470b ParameterObject::WriteParameterFiles
now writes all maps, fixing issue #904.
c96f026 Fixed ElastixRegistrationMethod member functions GetNumberOfTransforms
, GetNthTransform
, and GetCombinationTransform
, issue #965.
d33a0d5 Fixed reference count in ConvertItkTransformBaseToSingleItkTransform, affecting the lifetime of objects returned by ElastixRegistrationMethod::ConvertToItkTransform
.
dc4ba50 ElastixRegistrationMethod no longer puts "NoInitialTransform" in the user specified parameter map, as it may still have an initial transform.
99902e5 Library now writes images to the output directory whenever this directory is specified. Before this commit, the library would not do so, even when the WriteResultImage parameter would be "true".
691c358 Added the maps from the InitialTransformParameterObject of an ElastixRegistrationMethod to the output TransformParameterObject.
73a0d3a When there are two or more "TransformConfigurations", the sequence of transforms is entirely specified by those configurations, and not by transform parameter files.
55a42c0 Set NumberOfResolutions = 3 by default, in MovingImagePyramid, just like in FixedImagePyramid, fixing issue #858.
4b0cbaa Fixed OpenCL InterpolatorCopier for BSplineInterpolatorFloat.
Under the hood
Upgraded from C++14 to C++17, and modernized the code using language and library features that were introduced by C++17.
Upgraded from ITK 5.3.0 to ITK 5.4.0.
Added 54 GoogleTest unit tests (total: 153 GoogleTest unit tests).
Contributors
This release has commits by: Niels Dekker, Konstantinos Ntatsis, Marius Staring, and Matt McCormick. Stefan Klein was also very much involved with this release.
Full Changelog A list of all commits for this release: 5.1.0...5.2.0
elastix 5.1.0
Release notes
By downloading elastix
you accept the conditions written here.
elastix 5.1.0
was released in January 2023. All binaries were created using ITK 5.3.0
.
download | description | compiler | CMake version |
---|---|---|---|
elastix-5.1.0-manual.pdf | The manual | ||
elastix-5.1.0-win64.zip | Windows 64 bit binaries | Visual Studio 2019 MSVC 19.29.30147.0 | CMake 3.18.3 |
elastix-5.1.0-linux.zip | Linux binaries (Ubuntu 20.04) | GNU 9.4.0 | CMake 3.18.3 |
elastix-5.1.0-mac.zip | MacOS 11 binaries | AppleClang 13.0.0.13000029 | CMake 3.18.3 |
Some download statistics can be found here.
Enhancements
ITK transform file formats: HDF5 and TFM
A new (optional) parameter, "ITKTransformOutputFileNameExtension"
, is supported by elastix input parameter maps and files, which allows specifying an ITK file format for transformation output files file: either "h5"
for HDF5 or "tfm"
for ITK Legacy TFM. Another new optional parameter, "WriteITKCompositeTransform"
allows requesting the generation of an ITK CompositeTransform file, when its value is "true"
.
ITK transform files may also be used as input TransformParameter file to both elastix and transformix by specifying the Transform parameter value "File"
and adding the new parameter "TransformFileName"
, for example:
(Transform "File")
(TransformFileName "ITK-HDF5-Transform.h5")
Supported ITK Transform types: Translation, Affine, Euler (2D and 3D), Similarity (2D and 3D), and BSpline.
Other input parameter support enhancements
The new (optional) parameter "ResultImageName"
allows specifying the basename of the file names of transformation result images, addressing issue #672 submitted by Sebastian van der Voort (@Svdvoort)
The "AutomaticScalesEstimation"
parameter is now also supported by AffineLogStackTransform and EulerStackTransform, addressing issue #260
Format adjustments to elastix output transform parameter files
The transform output files generated by elastix now use a lossless text string representation for 32-bit and 64-bit floating points values, instead of 10 decimals precision. So for example, the 64-bit floating point representation of one third was written to text as "0.3333333333"
by elastix 5.0.1, while is now (elastix 5.1.0) written as "0.3333333333333333"
. On the other hand, elastix 5.1.0 no longer writes unnecessary trailing zero’s for floating point numbers. For example, it writes a floating point value of one simply as "1"
, not "1.0000000000"
. Addresses issue #383
The parameters in the generated transform parameter files are now ordered alphabetically, in order be consistent with the parameter map objects produced by the elastix library. Within a generated transform file, the parameters are no longer grouped. (elastix 5.0.1 did group, for example, image specific, transformation specific, and resampler specific parameters).
Added 32-bit floating point ("float") pixel type to 4-D image support: pull request #418
Added git revision information to command-line output, addressing issue #671 submitted by Sebastian van der Voort (@Svdvoort)
Library specific extensions (ITKElastix/SimpleITK interface)
Added DisableOutput() to itk::ElastixRegistrationMethod
and itk::TransformixFilter
(especially to ease writing multi-threading applications)
Added GetCombinationTransform(), GetNumberOfTransforms(), GetNthTransform(n), ConvertToItkTransform(transform) to itk::ElastixRegistrationMethod
, and added SetCombinationTransform(transform) to itk::TransformixFilter
, allowing to retrieve and use transform objects through the library interface.
Added ComputeSpatialJacobianDeterminantImage() and ComputeSpatialJacobianMatrixImage() to itk::TransformixFilter
, allowing to retrieve the Jacobian determinant and matrix images directly from the library interface.
Performance
Major performance improvement in the calculation of metrics, which does in some cases make a registration 40% or more faster. Pull request #556 and #558
Avoided unnecessary (unrequested) generation of an output image by itk::ElastixRegistrationMethod::GenerateData()
, addressing #370 submitted by @orange676
Under the hood
Upgraded from C++11 to C++14, and modernized the code using language and library features that were introduced by C++14.
Upgraded from ITK 5.1.1 to ITK 5.3.0.
Added 91 GoogleTest unit tests and 18 Python unit tests.
Contributors
This release has commits by (in alphabetic order): Niels Dekker (@N-Dekker), Stefan Klein (@stefanklein), Bradley Lowekamp (@blowekamp), Kasper Marstal (@kaspermarstal), Matt McCormick (@thewtex), Konstantinos Ntatsis (@ntatsisk), Eric at ORS (@EricAtORS), Marius Staring (@mstaring), Viktor van der Valk (@ViktorvdValk), Dženan Zukić (@dzenanz)
Full Changelog A list of all commits for this release: 5.0.1...5.1.0
elastix 5.0.1
Release notes
By downloading elastix
you accept the conditions written here.
elastix 5.0.1
was released in October 2020. All binaries were created using ITK 5.1.1
.
download | description | compiler | CMake version |
---|---|---|---|
elastix-5.0.1-manual.pdf | The manual | ||
elastix-5.0.1-win64.zip | Windows 64 bit binaries | MSVS 2019 | CMake 3.18.3 |
elastix-5.0.1-linux.tar.bz2 | Linux binaries | GCC 9.3.0 | CMake 3.16.3 |
elastix-5.0.1-mac.zip | MacOS binaries | Clang 4.2.1 LLVM 11.0.3 | CMake 3.18.1 |
Some download statistics can be found here.
Enhancements
-
elastix
has migrated from ITK version 5.0.1 to ITK version 5.1.1.elastix
does not build anymore with earlier versions of ITK. This new ITK version fixes an important issue regarding the use of mask images during registration, InsightSoftwareConsortium/ITK#1950 reported by Theo van Walsum (@tvanwalsum, Erasmus MC, Rotterdam) at Google Groups - elastix-imageregistration - Issues with mask in el 5.0.0 when mask extent is smaller then image extent. -
The minimum required CMake version was increased from CMake 2.8 to CMake 3.10.2 (which is also required for ITK 5.1.1).
-
Various coding style improvements, including improved const correctness of
ELASTIX::RegisterImages
, and a few issues found by Visual Studio Code Analysis and Clang Tidy.
Contributors
This release has commits by (in alphabetic order): Andras Lasso, Andrey Saenko, Colin Sullender, Kasper Marstal, Marius Staring, Matt McCormick, Niels Dekker, Stefan Klein
elastix 5.0.0
Release notes
By downloading elastix
you accept the conditions written here.
elastix 5.0.0
was released 21-10-2019. All binaries were created using ITK 5.0.1
.
download | description | compiler | CMake version |
---|---|---|---|
elastix-5.0.0-manual.pdf | The manual | ||
elastix-5.0.0-win64.zip | Windows 64 bit binaries | MSVS 2017 | CMake 3.15.4 |
elastix-5.0.0-linux.tar.bz2 | Linux 64 bit binaries | gcc 7.4.0 | CMake 3.10.2 |
elastix-5.0.0-mac.tar.gz | Apple Mac 64 bit binaries | Clang 4.2.1 LLVM 10.0.1 | CMake 3.15.4 |
Some download statistics can be found here.
Enhancements
-
elastix
has migrated to the recent ITK version 5.0.1! ITK5 is a major new release featuring among others a move to GitHub, switching to C++11, thread pools, and a new spatial object implementation. These modifications have quite some impact onelastix
, and we decided to adopt them. In order to do so, quite a number of modifications were directly integrated and contributed to the ITK. Long story short,elastix 5.0.0
can now be build with the latest release of ITK (v5.0.1), using the CMake flagITK_LEGACY_REMOVE ON
.elastix
does not build anymore with earlier versions of ITK. -
We have migrated to the new
SpatialObject
implementation of ITK. This was quite involved, as the masks used inelastix
are actually spatial objects, and are used throughout. -
We have started to use new C++11 language features, such as the use of
nullptr
, switched to using new Standard C++ Library functions, using theoverride
keyword, and removal of theregister
keyword and dynamic exception specifications. This also means that we have dropped support for compilers that do not support these new features. -
We have added the command line option
--extended-version
that additionally gives version information about the toolchain that we use. -
We started using GoogleTest for unit testing, complementary to the existing elastix registration tests.
New classes and methods
- A number of new optimization methods were introduced:
AdaGrad
,AdaptiveStochasticLBFGS
,AdaptiveStochasticVarianceReducedGradient
(experimental),PreconditionedGradientDescent
andPreconditionedStochasticGradientDescent
. They can be selected via:These optimizers were (mostly) developed in the context of the PhD thesis of Yuchuan Qiao, and published via Klein et al., Preconditioned Stochastic Gradient Descent Optimisation for Monomodal Image Registration, 2011, Qiao et al, A Stochastic Quasi-Newton Method for Non-rigid Image Registration, 2015, Qiao et al., Fast Automatic Step Size Estimation for Gradient Descent Optimization of Image Registration, 2016 and Qiao et al., An efficient preconditioner for stochastic gradient descent optimization of image registration, 2019.(Optimizer "PreconditionedStochasticGradientDescent")
Bug fixes
-
We fixed an overflow issue in the samplers, that occurred in case of really large images.
-
'elastix 4.9.0' suffered from a performance regression, which was targeted down to the ITK library. The timer that we used (an
itk::ResourceProbe
) had some serious overhead introduced in ITK 4.9. We fixed it in the ITK directly. -
We fixed a bug in the library interface (
TransformixFilter
): it was not propagating direction information.
Contributors
This release has commits by (in alphabetic order): Floris Berendsen, Niels Dekker, Stefan Klein, Kasper Marstal, Matt McCormick, Csaba Pinter, Denis P. Shamonin, Marius Staring, Harmen Stoppels
elastix 4.9.0
Release notes
By downloading elastix
you accept the conditions written here.
elastix 4.9.0
was released 20-03-2018. All binaries were created using ITK 4.13.0
.
download | description | compiler | CMake version |
---|---|---|---|
elastix-4.9.0-manual.pdf | The manual | ||
elastix-4.9.0-win64.zip | Windows 64 bit binaries | MSVS 2015 | CMake 3.7.1 |
elastix-4.9.0-linux.tar.bz2 | Linux 64 bit binaries | gcc 5.4.0 | CMake 3.5.1 |
Some download statistics can be found here.
Enhancements
-
The library interface of
elastix
has been completely redesigned! It now consists of an ITK filter that can be used in ITK pipelines together with other filters. The new library interface is currently used in SimpleElastix. You can read more about the design in the SimpleElastix paper. Transformix got a corresponding ITK filter. Support for a user-supplied initial transform was added by Bartolomejka. -
CUDA support was removed from
elastix
.
The OpenCL implementation that was included in the previous release is much more mature and supports much more use cases. -
For the OpenCL accelerations it is now possible to select the GPU in the parameter file.
This can be done using the option(OpenCLDeviceID "<x>")
-
Multi-threading was added to the displacement distribution code, which is part of the ASGD optimizer.
-
We added an option to compute the exact metric value every few iterations, which is nice for evaluation purposes.
-
The testing framework was made independent of external libraries. Travis CI and AppVeyor were added as Continuous Integration services. Thank you Andrey Fedorov!
New classes and/or methods
-
There is a new and faster implementation of the B-spline transform.
This transform can be selected using:(Transform "RecursiveBSplineTransform")
This transform gives exactly the same results as the original B-spline transform, but is at least twice as fast. It is the new recommended nonrigid transformation.
Preliminary results were published via Huizinga et al., Fast Multidimensional B-spline Interpolation Using Template Metaprogramming, 2014. -
A number of classes for PCA-based groupwise image registration.
Metrics includePCAMetric
,PCAMetric2
andSumOfPairwiseCorrelationCoefficientsMetric
, while transformation models includeTranslationStackTransform
,EulerStackTransform
,AffineLogTransform
andAffineLogStackTransform
.
This work was published via Huizinga et al., PCA-based groupwise image registration for quantitative MRI, 2016 -
Geoffrey D. Hugo and his group contributed an implementation of the mass-preserving Mean Square Difference metric. The metric can be selected using:
(Metric "SumSquaredTissueVolumeDifference")
This work was published earlier via Gorbunova et al., Mass preserving image registration for lung CT, 2012 and Yin et al., Mass preserving nonrigid registration of CT lung images using cubic B-spline, 2009.
Bugs
-
There was a remnant of the old elxTimer classes still in the library interface code. This was removed.
-
There were some fixes in the xout logging library, related to memory leaks when instantiating multiple
elastix
libraries. -
A memory leak due to a smart pointer cycle was fixed by Coert Metz.
-
Certain B-spline kernels used for interpolation had a small implementation mistake.
-
Steve Robbins performed a long list of cleanups, addressing Valgrind errors, testing and dashboard setup, library definition, and installation. Thank you Steve!