Skip to content

5.2.0

Latest
Compare
Choose a tag to compare
@N-Dekker N-Dekker released this 18 Jul 14:10
· 126 commits to main since this release

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