Detailed ITK 4.5 Release Features

This past month, ITK 4.5.0 was released! Below is the introduction, new documentation, and new features sections of the release notes.

Introduction

The 4.5 release is a major milestone that marks the hard work of many outstanding community members. Among the major contributions in this release are registrations computed with 32-bit floats, a new edition of the Software Guide, the first release of the wiki examples tarball, and the first release of the Sphinx examples tarballs. Links to the Sourceforge.net tarballs can be found on the download page.

New Documentation

New edition of the ITK Software Guide: For the first time since version 2.4, a new edition of the ITK Software Guide is available. The guide is a book that has been a close companion to numerous medical imaging graduate students. In addition to numerous updates, the resource now has a community contribution mechanism that mirrors the contribution process for the ITK repository. Improvements are welcome to this living document. The new edition is available in PDF form and downloadable.

ITK Wiki examples tarball: A buildable archive of the outstanding examples is available to download, build against the current release, and use for purposes of learning.

ITK Sphinx examples downloads: Examples available online are stored in Git version control but rendered in HTML, PDF, and EPUB output formats with the Sphinx documentation system. They have CTest unit tests, inline Doxygen class descriptions and links to full Doxygen class documentation, nightly generated Gitstats, an index, quick search, and a contribution mechanism that mirrors ITK or the Software Guide.

ITK repository examples links in Doxygen HTML documentation: A downloadable archive of the Doxygen generated HTML documentation is available as usual, but examples from the ITK repository Examples/directory are also indexed in the description of every Doxygen class.

New Features

  • ITKv4 registrations can now be run in either 64-bit double or 32-bit float modes. Both double and float transform types are also now supported by metrics, optimizers, and IO readers/writers.
  • SpacingValueType — Previously ITK only supported representing physical space as type double. This patch introduces a typedef to encapsulate the concept of space precision to more clearly document the intended characteristics of the types. This is the first step toward allowing compile time selection using single precision types for characterizing physical space (origin, spacing, direction cosines). There is a CMake configuration option, ITK_USE_FLOAT_SPACE_PRECISION, to allow building the entire toolbox in single precision mode. It is currently intended to facilitate future performance testing. NOTE: Use of ITK_USE_FLOAT_SPACE_PRECISION causes many regression test failures. It is not intended for production use at this time.
  • Support for “float” type as physical units type in the Registration framework — This makes float type displacement fields possible, as well as faster, less memory intensive registrations.
  • Many performance improvements in Registration — significant performance improvements made for ImageRegistration. See patch sets prefixed by PERF.
    • False sharing across threads identified and removed.
    • Unnecessary mutex lock identified and removed. For one common case on real sized data, this resulted in a 70X speed increase.
  • Two new Remote modules:
    • MGHIO — Partial support for reading/writing image files from FreeSurfer (Not a complete implementation, but simple label maps and intensity images can be read/written).
    • SmoothingRecursiveYvvGaussianFilter — From Insight Journal submission
  • The SCIFIO remote module has also seen nice updates.
  • IO module libraries will now be built as shared libraries with BUILD_SHARED_LIBS ON
  • MRCImageIO moved out of the Review Module
  • BinShrinkImageFilter added — From Insight Journal submission
  • WrapITK Python wrapping now supporting GCC 4.8
  • JPEG format now writes out spacing in physical units
  • MINC ImageIO improvements:
    • Correct handling of missing or damaged minc file.
    • MINCTransformAdapter class to use MINC style transformations stored in .xfm files by implementing native minc general_transform functions. This means that thin-plate spline non-linear transformations are accessible and that the calculation of inverse transformation can be completed in a way that is consistent with minc tools.
    • Ability to store any linear transformation based on MatrixOffsetTransformBase<double,3,3> in minc style .xfm file (using TransformFileWriter).
    • OtsuThresholding classes made more consistent with other libraries.
      • Now the output of the threshold value may be different from previous releases (bug fix).
  • Synchronized with “teem” library 1.11.1, providing NRRD functionalities.
  • FlatStructuringElement new option to use a parametric radius in Ball() method.
  • LevelSetsv4 now has a penalty term for overlap between level sets.
  • Can now read Philips 4D multi-frame DICOM files.
  • CMake variable ITK_BUILD_ALL_MODULES was replaced with ITK_BUILD_DEFAULT_MODULES (same behavior, more appropriate name).
  • Remote Modules were simplified by removing the CMake configuration variable Fetch_ {RemoteModuleName} and making it so that only Module_{RemoteModuleName} is required.
  • New CTest label “RUNS_LONG” to make it possible to exclude long running tests with “ctest -LE RUNS_LONG.”
  • Deprecate ITK_USE_REVIEW CMake variable in favor of Module_ITKReview.
  • Better support for system installed GDCM.
  • Preliminary support for Visual Studio 12 (2013).
  • Preliminary support for OSX 10.9 – Maverick.
  • Support for building ITK against a DCMTK 3.6.0 installed on Ubuntu using apt-get.
  • Improved support for C++11.
  • More consistent coding style across the toolkit.
  • Lots of important bug fixes, including 73 issues reported by Coverity static analysis.

Questions or comments are always welcome!