Skip to content

Releases: SuperElastix/elastix

5.2.0

18 Jul 14:10
Compare
Choose a tag to compare

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

12 Jan 15:08
Compare
Choose a tag to compare

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

05 Oct 16:01
Compare
Choose a tag to compare

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

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

28 Oct 14:45
Compare
Choose a tag to compare

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 on elastix, 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 flag ITK_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 in elastix 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 the override keyword, and removal of the register 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

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

20 Mar 08:36
6e03163
Compare
Choose a tag to compare

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

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!