ITK Release 4/Migration Plan/Release Notes/ITKv4 Final Release Notes
The final release of ITK 4.0 took place on December 20th 2011. This new release of ITK is the outcome of 18 months of refactoring efforts, generously sponsored by the National Library of Medicine (NLM), with funds provided by the American Recovery and Reinvestment Act (ARRA).
The main features of this new release include:
- Apache 2.0 License
- Removal of Patented directory
- Code Modularization
- New simplified layer “SimpleITK”
- New registration framework
- New level set framework
- Refactored FEM framework
- New support for video processing
- Including bridges to OpenCV and VXL
- Updated support for DICOM based on GDCM 2.0
- Improved support for large images (above 4Gb)
- Improved support file formats commonly used in microscopy.
A general code cleanup of the toolkit took place, based on focusing on supporting modern C++ compilers and removing code intended for obsolete ones.
The source tree of the toolkit was restructured into modules with limited dependencies among them. The main goals of the modularization are:
- Facilitating the management of further growth of the toolkit
- Improving the software quality by facilitating local computation of quantitative measures of quality, such as code coverage.
- Facilitating the addition of modules from community contributions
- Better insulation from third party libraries
- Improved management of optional components
- Packaging and redistributions of subsection of the toolkit
A simplified layer, SimpleITK, was built on top of ITK. This layer facilitates the use of ITK in rapid prototyping, education and interpreted languages. The main features of SimpleITK are:
- C++ library
- Provides a simplified, easy-to-use, procedural interface without templates
- Is distributed under an open source Apache 2.0 License
- Binary distributions for Python and Java
- Removal of C++ Templates from the API
The new registration framework was contributed by the PICSL Laboratory of the University of Pennsylvania. The new image framework, largely based on the features of the ANTS tool developed at PICSL, provides better support for
- Dense deformation fields (including a new transform that encapsulates a dense deformation field)
- Composite Transforms (grouping multiple transforms into a single one)
- Symmetric registration (where the Fixed and Moving images make unbiased contributions to the registration)
- Multi-Threaded metrics
- New Demons metric
- Point Set registration methods
- New Mutual Information metric
- Diffemorphic deformable registration
- Parameter estimation for transform parameter scaling
Level Sets Framework
A new Level Sets framework was contributed by the Megason Lab at Harvard Medical School. The main features of the new framework are
- Implicit level sets
- Flexible addition of level set Terms via a Term Container
- Support for large number of level sets running simultaneously
- Introduction of geometrical constraints
- Support for Dense Level Set Representation
- Support for Sparse Level Set Representation
- Whitaker Representation
- Shi Representation
- Malcolm Representation
- Region-based Level Sets
- Chan and Vese
The Finite Elements Methods framework was refactored by a group at the University of Iowa. This refactoring made the FEM framework more consistent with the rest of the toolkit. It also made possible to deploy a fully functional FEM infrastructure that can be used to solve actual mechanical and modeling problems. The code changes included: removal of incompatible smart pointers, improved encapsulation, removed IO functionalities from filters, added SpatialObject support for FEM, added IO support for FEM elements. These changes were accompanied by corresponding modifications in the FEM Deformable Registration framework.
Support for DICOM files was improved in the toolkit. In particular
- GDCM was upgraded to version 2.0
- Support to RT-Structs was added
The Statistics Framework that was refactored around 2007, has now been made the official framework. The main changes include
- Converting Calculators into Filters
- Samples are not DataObjects
- Better traits
- Better types, particularly for 64bits machines and large Samples
Many changes where across the toolkit to take advantage of modern C++ features.
- This involved also the elimination of further support for several old compilers, including: Borland 5.5, Visual Studio 6.0 and 7.0, Sun CC before version 5.9, SGI compilers, MetroWerks, GCC previous to 3.4, and the entire Cygwin platform.
- Support for 64 bits was improved across the toolkit, in particular for the Windows platform.
- The filename extensions of templated implementation files (.txx) was replaced with (.hxx) in order to be more consistent with standards of IDE tools.
The Software Development process for ITK was modernized by:
- Migrating from CVS to Git
- Adopting the code review tool Gerrit
- Developing a system, cdash@home, for distributed testing of patches
- Adopting a new process for dealing with data for testing
The Insight Journal was also adapted to take advantage of these new software tools. In particular, it is now possible to submit contributions to the Insight Journal by pointing to existing Git repositories in which the code contribution is continuously being developed. Several features were added for encouraging participation. In particular, support for quick comments and quick rating.
Doxygen documentation generation has been improved, including documentation of groups and modules, wiki example links, and diagrams. An important addition is the support for Crowd-sourcing fixes from the community by enabling them to edit the doxygen web pages directly, and from such edits create Gerrit patches that are directly submitted to developers for review and subsequent merge in to the code base.
Wrapping of the toolkit was improved at two different, but related levels. On one hand WrapITK was embraced as the standard method for wrapping the toolkit to be used from languages such as Python and Java. On the other hand, the SimpleITK layer, wrapped via SWIG, provided an alternative offering for using ITK from many languages.
The infrastructure to wrap ITK was updated to use WrapITK 3.0. Wrapping for Tcl was deprecated, and an effort wwas made on improving support for Python and Java.
Taking advantage of the fact that SimpleITK hid the C++ templates from its API, it is now very easy to use SWIG to wrap SimpleITK for many different languages. Current support is available for: Python, Tcl, Java, R and Lua.