Skip to content

Releases: InsightSoftwareConsortium/ITK

ITK 5.0 Alpha 1

ITK 5.0 Alpha 1 Pre-release
Pre-release

Choose a tag to compare

@thewtex thewtex released this 17 Apr 04:06

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 itk

For 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 itk

For 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...
Read more

ITK 4.13.0

Choose a tag to compare

@thewtex thewtex released this 11 Feb 19:05

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

  1. Introduction
  2. New Features
  3. ITK Changelog
  4. ITK Sphinx Examples Changelog
  5. 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, RegionOfInterestFilter for VectorImage's, FloatingPointExceptions, CorrelationMetricv4, DemonsMetricv4, JointHistogramMIMetricv4, ITKIOMesh.
  • Enable __call__() function in Python for itkTemplate objects 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 short pixel type is now supported in ITK Python packages.
  • Bruker IO wrapping
  • New Remote Modules

  • 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 itkTestDriver and itkTestingComparisonImageFilter to compare image size, origin, spacing, and direction
    • Add `itk_module_examples()...
Read more

ITK 4.12.2

Choose a tag to compare

@thewtex thewtex released this 12 Sep 17:14
v4.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