Releases: InsightSoftwareConsortium/ITK
Release list
ITK 5.0 Alpha 1
ITK 5.0 Alpha 1 is ready for testing!
ITK 5.0 brings dramatic improvements to ITK's API and performance. At the same time, there are minimal changes that break backwards compatibility.
This the first in a series of alpha releases to enable the community to test and improve these major changes.
In this first alpha release, we highlight ITK's adoption of and requirement for the C++11 standard. Prior to this release, a subset of C++11 functionality was utilized, when available, through backports and macros. ITKv5 deprecates or removes these macros (e.g. ITK_NULLPTR, ITK_DELETED_FUNCTION, ITK_NOEXCEPT, ITK_CONSTEXPR) and directly uses C++11 keywords such as delete, constexpr, nullptr, override, noexcept. The keywords auto and using as well as range-based loops are also now used heavily throughout ITK.
ITKv5 includes some API changes. Even though we tried to minimize backward compatibility issues, there will be a few (see below for important changes). These changes were discussed by the community on the ITK Discourse forum [1][2][3][4]. This ITK alpha release is purposefully created with the goal of helping developers to test their current software with this new ITK version, update their code if necessary, and report problems they encountered during this process.
ITK now requires CMake 3.9.5 for configuration and a compiler that supports C++11. This means that Visual Studio 2015 or later is required for Windows development with the Microsoft toolchain.
Important changes in style have also been integrated in ITK to match the C++11 best practices. This includes replacing typedef calls with the using keyword, the usage of the keyword auto when appropriate, and moving the macro ITK_DISALLOW_COPY_AND_ASSIGN from the private class section to the public class section. The ITK Software Guide has been updated to match these changes.
As shown below, toolkit has adopted the application of the using keyword for type aliases, which many developers find easier to read and understand.
template< typename TInputImage, typename TOutputImage >
class ITK_TEMPLATE_EXPORT BoxImageFilter:
public ImageToImageFilter< TInputImage, TOutputImage >
{
public:
ITK_DISALLOW_COPY_AND_ASSIGN(BoxImageFilter);
/⋆⋆ Standard class type alias. ⋆/
using Self = BoxImageFilter;
using Superclass = ImageToImageFilter< TInputImage, TOutputImage >;
[...]
protected:
BoxImageFilter();
~BoxImageFilter() {}
void GenerateInputRequestedRegion() override;
void PrintSelf(std::ostream & os, Indent indent) const override;
private:
RadiusType m_Radius;
};
} // end namespace itkFor more information on style changes, see the Coding Style Guide found in the ITK Software Guide.
To test the 5.0 Alpha 1 Python packages, run
python -m pip install --upgrade pip
python -m pip install --upgrade --pre itkFor a full list of the new features and changes in API, please review the log below. The community has been busy -- there have been 319 commits, 97,794 insertions, 152,791 deletions since 4.13.0 was released in December!
Please discuss your experiences on Discourse. The API is expected to change across alpha releases as we improve the library based on our experiences.
Changes from v4.13.0 to v5.0 Alpha1
------------------------------------------------
Bradley Lowekamp (49):
ENH: Adding more swap methods
BUG: Respect Visibility Preset for initial template visibility
COMP: Use explicit equality for boolean evaluation of real number
BUG: Keep the SetSeed# methods in IsolatedConnectedImageFilter
ENH: Use direct for loops for implementing image transformations
COMP: Use anonymous namespace for internal linkage
ENH: Mark 2 template parameter ModulusTransform to be removed
COMP: Remove legacy marking on definition of SetSeed methods
STYLE: Use itk::v3 nested namespace for Rigid3DTransform
BUG: Preserve option to use a "label value" mask and boolean mask
ENH: update C+11 headers and try compile for headers
ENH: Remove duplicated CMake module from upstream CMake
COMP: Explicitly include the fixed width integer header before usage
COMP: Update SimpleITKFilters for dependency issues
BUG: The CXX language must be enable to check compiler variables
PERF: Support move semantics for ITK smart pointers
ENH: Remove usage of SmartPointerForward reference
ENH: Remove unneeded internal smart pointer type
COMP: Require MSVC VS14 2015 for C++11 compatibility
ENH: Use C++11 template alias for Image::Rebind
STYLE: Use copy-swap idiom for SmartPointer
ENH: Use std::unique_ptr over itk::AutoPointer
DOC: Document additional MaskValue variable
BUG: remove unused cmake CXX try compile file
BUG: Remove un-configured and unused CMake configure define
BUG: Improve Doxygen extraction with blank line
ENH: Remove TEMPLATED_FRIEND macro and try compile
ENH: Replace optional tr1 type_traits with c++11 standard
ENH: Assume c++11, remove configure defines for optional TR1 features
BUG: Add missing extensions to ImageIO
ENH: Only use std::atomic implementation for AtomicInt class
ENH: Add direct SmartPointer conversions to match raw Pointers
PERF: Use emplace when inserting into map for ProcessObject
ENH: Create virtual interface for the MultiTheader
ENH: Trying out the ThreadPool as a separate MultiThreader
BUG: Fix uninitialized cross structuring element buffer
BUG: Disable ThreadPools by default
COMP: Add forward declaration of ExceptionObject in Macro.h
COMP: Add forward declaration of ExceptionObject in Macro.h
ENH: Use gtest_discover_tests if available
DOC: Watershed filters is not stream-able
COMP: Use nullptr over 0 for null pointer
STYLE: Use SmartPointer direct conversion constructors
Revert "BUG: Disable ThreadPools by default"
BUG: Actually disable ThreadPools by default
COMP: Suppress warning on CircleCI about itkIndex out of bounds
ENH: Update CircleCI external data cache
ENH: Address incorrect types with neighborhood iterator base class
COMP: Make MirrorPadImageFilter::DelayBase a conventional parameter
Bryce A Besler (1):
ENH: Move DiscreteGaussianDerivativeImageFilter from Review to ITKImageFeature
Dženan Zukić (27):
ENH: updating SphinxExamples and pointing to GitHub
COMP: Get rid of warning about registry key
STYLE: minor fixes
BUG: duplicator crashes if buffered region is smaller than largest region
STYLE: reducing code duplication and cleaning up method documentation
ENH: adding itkReviewPrintTest to tests. It existed but was not invoked.
COMP: turn FEM off by default, as it takes a long time to build
COMP: fixing compiler warnings
ENH: making ITKBioCell and ITKNeuralNetworks remote modules
COMP: fixing configure error
COMP: long paths are not yet supported by all the tools in the build chain
COMP: using ITK_DELETED_FUNCTION, and more consistent override specifier
ENH: simplify code and properly support long long type
COMP: fix compile warning
STYLE: avoid redirect for repository address in DVMeshNoise
ENH: update remote modules to require CMake 3.9.5
BUG: fixing crash in test
ENH: Remove ITKFEMRegistration from default configuration
ENH: Fixing error and improving examples' test
ENH: Use MultiThreaderBase
STYLE: reducing duplication and removing commented code in DistanceMap tests
STYLE: fixing typo
BUG: more reliably detect Windows+DLLs case
ENH: enable thread pool by default
ENH: adding exponential decay option to MirrorPadImageFilter
BUG: Set/GetGlobalDefaultNumberOfThreads was forgotten in legacy #ifdef
BUG: fixing Windows+DLL ThreadPool sporadic destructor hanging
Francois Budin (17):
BUG: Update ITK test files SHA and debug ContentLinkSynchronization.sh
ENH: Bump ITK version to 5.0.0.
ENH: lifting path length limitation on Windows 10 version 1607+
BUG: Remove bad guards stopping inclusion of necessary hxx file
BUG: Remove extern "C" call to include <cstring>
BUG: Initializes CMAKE_DEBUG_POSTFIX to be empty
BUG: Initializes CMAKE_DEBUG_POSTFIX to be empty
DOC: Remove CMake comments mentioning CMake 3.4
DOC: ITK_CONSTEXPR* and ITK_HAS_CXX11_R...
ITK 4.13.0
The Insight Segmentation and Registration Toolkit (ITK), is an open-source, cross-platform library for multidimensional image analysis. On behalf of the Insight Toolkit community, we are proud to announce that ITK 4.13.0 has been released!
Links to the Sourceforge.net tarballs can be found on the download page:
Outline
- Introduction
- New Features
- ITK Changelog
- ITK Sphinx Examples Changelog
- ITK Software Guide Changelog
Introduction
Developed by an international community, ITK collects best-of-breed algorithms for registering, segmenting, analyzing, and quantifying n-dimensional imaging data. The high-quality library facilitates reproducible research, provides a software resource for teaching image analysis, and offers a platform for commercial product development.
Here are a few selected highlights for this release:
- ITK is on PyPI: install ITK's Python wrapping with:
pip install itk - IsotropicWavelets remote module: isotropic and steerable wavelets in the frequency domain
- Improvement of the Image IO, including full 64 bit pixel support
- ITK Python interface improvements: use ITK in a procedural way
- Improved image and transform IO factory registration
- ITK's thread pool refactored for improved performance
- Improved ITK test driver to compare images spacing, origin, size and direction
This release brings multiple exciting new developments for ITK's Python wrapping.
Binary Python Packages
Binary Python wheels are available for Linux, macOS, and Windows, for Python 2.7 and the recent Python 3.X. The wheels have been published on PyPI, the Python package index. These binary wheels are built to be compatible with Python distributions from Python.org, system package managers like apt and Homebrew, and Anaconda. (official announcement here). This means that it has never been easier to install and start using ITK: one simple pip install itk command, and a few seconds later it is possible to start interactively processing images.
External Module Python Packages
Furthermore, Python packages for externally developed ITK modules can now be automatically generated and uploaded to PyPI. The module Python package is created by free GitHub continuous integration services. Like the main ITK packages, these packages embed documentation from Doxygen comments into Python docstrings. See https://blog.kitware.com/python-packages-for-itk-modules for details on how to get started. A number of novel ITK module Python packages have already been created this way, including
- itk-bonemorphometry
- itk-polartransform
- itk-texturefeatures
- itk-anisotropicdiffusionlbr
- itk-ultrasound
- itk-morphologicalcontourinterpolation
- itk-cuberille
- itk-ringartifact
IsotropicWavelets Remote Module
A Python package is available for a powerful new remote module, IsotropicWavelets. This module implements a multiresolution (MRA) analysis framework using isotropic and steerable wavelets in the frequency domain. This framework provides the backbone for state of the art filters for denoising, feature detection or phase analysis in N-dimensions. Since it is wrapped in Python, it is as easy to use as ITK: Install the module with pip install itk-isotropicwavelets. Write a Python script or start an interactive Python environment, and call import itk. All the functionality of IsotropicWavelets will be available.
Procedural Filter Interface for Rapid Prototyping
ITK v4.13.0 also incorporates an API improvement throughout the entire toolkit to facilitate rapid prototyping: ITK Python filters are now callables, so ITK can be used in a procedural way. It is possible to run filters without the need to declare a filter object first, and without the need to explicitly call ‘Update()’ on a pipeline.
itk.imwrite(itk.MedianImageFilter(itk.imread(‘my_image.png’), Radius=4), ‘my_output.png’)
This one-liner will read an image, filter it with the MedianImageFilter with a radius of 4 voxels, and save the result in a different file.
Image IO Improvement, including Full 64 bit Pixel Support
Several improvements have been made in the Image IO in this major release: 64 bit images are now consistently supported by all Image IOs. Additionally, MINC image IO is now enabled by default, Bruker IO improved and enabled by default, and DICOM support via DCMTK was greatly improved (and supported on MS Windows). See below “Improved Factory Registration” for the last improvement of Image IO in this release.
GoogleTest for Writing Tests
An ITK module can be tested with GoogleTest library, using the CMake funtion CreateGoogleTestDriver(), in addition to the classic ITKTestDriver. This function will add the GTest dependency to your test. GoogleTest makes it easy to write a lot of different tests to verify that your code works. Examples of tests using this framework can be found in ITK in Modules/Filtering/ImageGrid/test/itkSliceImageFilterTest.cxx, /Modules/Filtering/ImageIntensity/test/itkArithmeticOpsFunctorsTest.cxx, and several other files.
Improved Factory Registration
Each module (including remote modules) can list the factories and formats they support. This information is used to automatically register all formats supported by modules loaded during configuration. When loading ITK with the CMake command find_package() and loading a limited number of ITK components, it is now possible to load all modules corresponding to a factory, e.g. ImageIO, TransformIO. To load all components of a factory, add the component ITK<factory> in the list of requested components. Here is an example that finds ITK with the ITKCommon module and all the available image and transform IO modules:
find_package(ITK COMPONENTS ITKCommon ITKImageIO ITKTransformIO REQUIRED)
ITK's Thread Pool Refactored for Improved Performance
ITK's thread pool has been refactored for improved performance. To test the thread pool, set the environment variable:
ITK_USE_THREADPOOL=1;
Or, call the static method
itk::MultiThreader::SetGlobalDefaultUseThreadPool(true);
at the start of your application. The thread pool is still experimental, and its implementation and interface will be improved and modified in the near future.
Improved ITK test driver to compare images spacing, origin, size and direction
In part to support improved testing and support for DICOM image metadata, the ITK test driver now checks image spacing, origin, and direction when making baseline image comparisons. If your project uses the ITK test driver, new image baselines with correct metadata information may be required. Alternatively, pass the --ignoreInputInformation flag to the test driver.
Congratulations to the 26 contributors to this release. We would especially like to recognize the new contributors: Laura Pascal, Beatriz Paniagua, Rene-Paul Debroize, Edwin Bennink, David Kügler, Adrien Bailly, and Steve Pieper.
The next feature release, scheduled for June 2018, will be ITK 5.0. This release will introduce thread pools by default with an optional Intel Threading Building Blocks (TBB) backend, require C++11 compiler support, and require a newer version of CMake.
New Features
- Wrapping Improvements
- Binary Python packages are now available for Linux, macOS, and Windows. Install with:
pip install --upgrade pip
pip install itk
- ITK modules developed on GitHub can generate their own Python package with freely available continuous integration services.
- https://blog.kitware.com/python-packages-for-itk-modules
- Example module Python packages now pip installable from PyPI:
itk-bonemorphometry,itk-polartransform,itk-texturefeatures,itk-anisotropicdiffusionlbr,itk-ultrasound,itk-morphologicalcontourinterpolation,itk-cuberille,itk-isotropicwavelets,itk-ringartifact
- Add wrapping for several classes:
MultiResolutionIterationEvent,RegionOfInterestFilterforVectorImage's,FloatingPointExceptions,CorrelationMetricv4,DemonsMetricv4,JointHistogramMIMetricv4,ITKIOMesh. - Enable
__call__()function in Python foritkTemplateobjects to make ITK more Pythonic. A developer can run instantiate, run a filter, and get the output, in one single command. - Python docstrings are generated from the C++ doxygen documentation and directly integrated in the Python modules.
- The
unsigned shortpixel type is now supported in ITK Python packages. - Bruker IO wrapping
-
New Remote Modules
- SimpleITKFilters
- The filters in this module may be wrappers of composites ITK filters, adapters of existing ITK filters or alternative implementations designed for SimpleITK's requirements.
- http://github.com/SimpleITK/ITKSimpleITKFilters
- TextureFeatures
- Filters to estimate texture feature maps from N-dimensional grayscale images.
- http://hdl.handle.net/10380/3574
- IsotropicWavelets
- An ITK-based implementation of steerable isotropic wavelet transforms for multiscale phase analysis.
- http://hdl.handle.net/10380/3558
- SimpleITKFilters
-
Core Improvements
- GoogleTest available for testing in ITK
- Support VCPKG, Microsoft's vcpkg C++ package management system for Visual Studio
- Refactor ITK's ThreadPool implementation for performance
- Addition of type long long and unsigned long long for images
- Add options to
itkTestDriveranditkTestingComparisonImageFilterto compare image size, origin, spacing, and direction - Add `itk_module_examples()...
ITK 4.12.2
On behalf of the Insight Segmentation and Registration Toolkit (ITK) Community, we are happy to announce the release of ITK 4.12.2! ITK is an open-source, cross-platform library for multidimensional image analysis.
Release files can be downloaded from http://itk.org/ITK/resources/software.html
This is a patch release that fixes critical issues, regressions, documentation, and compiler support. This release includes better compatibility when building an application that includes additional NIFTI libraries and also fixes for GPGPU build support. Contributions from the 3D Slicer community improve packaging on macOS.
The release also includes an update to the ITK Software Guide that includes the coding style guide among other updates and additions.
The next feature release, 4.13.0, is scheduled for mid-December.
Enjoy ITK!
ITK changes from v4.12.1 to v4.12.2:
Edwin Bennink (1):
BUG: Fixed cylinder bbox, fixed and enhanced IsInside func
Floris Berendsen (1):
COMP: add symbol name mangling for niftilib in ITK
Jean-Christophe Fillion-Robin (2):
COMP: Update MINC to set MACOSX_RPATH property based on CMAKE_MACOSX_RPATH
COMP: Update KWsys to set MACOSX_RPATH property based on CMAKE_MACOSX_RPATH
Matthew McCormick (6):
BUG: Correct GPUMeanImageFilter Superclass
BUG: Remove debug code from GPUMeanImageFilter
BUG: Do not use static_cast, SmartPointer in GPUImage::GetGPUDataManager
BUG: Remove debug code in itkGPUImage.hxx
COMP: Fix AnisotropicDiffusionLBR example build
ENH: Bump CMakeLists.txt version to 4.12.2
Niels Dekker (1):
COMP: Fixed <nifti1_io.h> leak into user code
ITK Software Guide changes:
Jon Haitz Legarreta Gorroño (8):
DOC: Add and reference Coding Style appendix.
DOC: Fix typo in Registration chapter files headers.
STYLE: Replace tabs with white spaces.
DOC: Fix typos in the SW guide LaTeX files.
ENH: Add the link to the SW Guide PDF compilation version.
DOC: Add missing wrap types to Wrapping section.
STYLE: Rework the folder structure and rename files.
ENH: Remove \ifitkFullVersion artifact switch.
Matt McCormick (2):
DOC: Add instructions on how to install the stable Python packages
ENH: Bump ITK ExternalProject version to 4.12.2