ITK 4.13 Release Candidate 1 is ready for testing!

On behalf of the Insight Toolkit community, we are proud to announce that ITK 4.13 release candidate 1 has been tagged and is available for testing! Please take this opportunity to test the new features in the release candidate.

To obtain the source code, use the links:

A few selected highlights for this release:

  • ITK is on PyPI: Install ITK Python with: pip install itk
  • New external 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. It focuses on reusability, and highly decoupled modules for easy extension and implementation of new filters, and it contains a filter for multiresolution phase analysis,
  • ITK Python filters are now callables which allows the usage of ITK in a procedural way: It is possible to run filters without have to declare the filter object first, and without calling explicitly Update().
  • long long pixel type support has been added which allows support of 64 bits images on Windows.
  • Availability of GoogleTest for testing in ITK: a module can be tested with the GoogleTest as opposed to the classic ITKTestDriver.
  • Improved factory registration: Each module (even remote ones) lists the factories and format they support. This information is used to automatically register all formats supported by modules loaded during configuration. It is also now possible to not list each factory individually, but to directly load them all for each factory type (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 to find ITK with ITKCommon and all the image and transform IOs that are available:
    find_package(ITK COMPONENTS ITKCommon ITKImageIO ITKTransformIO REQUIRED)

Please test the release candidate and share your experiences on Discourse, the issue tracker, and Gerrit Code Review [1].

An Experimental build, which demonstrates how the test suite performs on your local build system, can be submitted to the dashboard [2] with:

  mkdir ../ITK-build
  cd ../ITK-build
  cmake ../ITK
  ctest -j 4 -M Experimental  -T Configure -T Build -T Test -T Submit

Visual Studio builds must also add -C Release to the ctest command.

Please leave a comment in this forum topic if there are any unexpected failures. Testing your own applications against the RC is also appreciated.

Congratulations to the 28 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 4.13.0 final release is scheduled for December 18th 2017.

New Features

  • Wrapping Improvements

    • Binary Python packages are now available for Linux, macOS, and Windows. Install with:
      pip install --upgrade pip
      pip install itk
    • 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. 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.
    • Support installs each module Python wrapping independently
    • Update Bruker IO wrapping after migration from ITKReview
  • New Remote Modules

  • Core Improvements

    • Making available GoogleTest 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
    • Adds itk_module_examples() macro to simplify the creation of independent examples in remote modules
    • Improve factory registration mechanism (see highlighted features)
    • ITK Python modules now share the list of factories that are registered
    • Automatic enabling of the -fPIC flag for external modules
    • Detect the presence of feenableexcept to compile on Alpine Linux
    • Update GDCM import script for changes in upstream content
  • Filtering Improvements

    • Improve Not functor and filter to follow other logic functors
    • Separate functors from filters in header by operator groups
    • Move rank filters out of review
    • Explicitly warn and deprecate negative pixel spacing
    • Add SliceImageFilter
    • Move advance Demons registration filters out of review
    • Add ShapeLabelObject::GetRegion method
    • Many improvements in HoughTransform2DCirclesImageFilter
  • IO Improvements

    • Enable MINC IO by default
    • PNG IO was crashing instead of returning false when it couldn’t read image
    • Several DCMTK improvements: build DMCTK on Windows, replace ICONV with ICU in DCMTK dependencies, support color images (RGB/RGBA)
    • Use double floating point API for MetaImage: the text representation is now closer to the
      DICOM Image Orientation (Patient) or Image Position (Patient) attribute and will allow easier conversion from one representation to the other.
    • Fixed <nifti1_io.h> leak into user code
    • Updated the Bruker2DSeq reader to ParaVision 6.0
  • Documentation Improvements

    • Improvement of documentation Markdown files throughout the repository
    • Update old file headers/copyright notices.
    • Improve source code coding style
    • Enable offline Doxygen support
    • Expose RayCastInterpolateImageFunction members in Doxygen
    • Updated documentation for LabelStatisticsImageFilter::GetBoundingBox.
    • Document behaviors of ChangeLabelLabelMapFilter
  • Remote Module Updates

    • AnisotropicDiffusionLBR (08.31.2017)
    • Update MorphologicalContourInterpolation (09.22.2017)
  • Third Party Library Updates

    • Update pygccxml version (v1.9.0)
    • Update libPNG to track upstream libpng16 branch
    • Update version of DCMTK to 3.6.1_20170529
    • Update CastXML to support GCC 7 (11.06.2017)
    • Update MetaIO (12.04.2017)
    • Adding libLBFGS third party library
    • Update MINC (09.14.2017)
    • Update VNL (10.05.2017)
  • Lots of important bug fixes

  • And much more! See details in the log below.

Changes from v4.12.0 to v4.13rc01

Adrien Bailly (1):
ENH: add wrapping for MultiResolutionIterationEvent and other missing event

Beatriz Paniagua (2):
ENH: Updating pygccxml version
ENH: Updating libPNG to track upstream libpng16 branch

Brad King (2):
ENH: Port GDCM update script to update-third-party.bash
ENH: Update GDCM import script for changes in upstream content

Bradley Lowekamp (78):
DOC: fix spelling transfrom->transform
ENH: Improve Not functor and filter to follow other logic functors
ENH: Separate functors from filters in header by operator groups
DOC: Fix spelling mistakes from SimpleITK JSON, from spellintian
ENH: making available GoogleTest for testing in ITK
COMP: Address missing ITK_TEMPLATE_EXPORT definition
COMP: Use single line for string argument, by-pass multi-line issues
COMP: Revert to CMake 2 compatible line comment
ENH: Move rank filters out of review
BUG: Use const for pipeline inputs and state functions
ENH: Explicitly warn and deprecate negative pixel spacing.
BUG: Modify google test to define _VARIADIC_MAX=10
COMP: Fix using system GoogleTest with a compiled system library
ENH: Add SliceImageFilter
COMP: Use itk::Math::abs over vnl_math_abs
ENH: Add GetProbe method to collectors base.
BUG: Add missing exports for GTest::* targets
BUG: Fix computation of central moments for shape label map
ENH: Adding operator functors from SimpleITK
ENH: Choose efficient central moment computation for run
BUG: Add missing OrientedBoundingBox option
DOC: recommend using separate instances
BUG: Manually set seed for ParticleSwarmOptimzerTest
BUG: Fix computation of oriented bounding box
BUG: shape label object elongation incorrectly zero
ENH: Add GTest utilities for ITK
ENH: adding explicit testing of computed label shape attributes
BUG: Propagate make program to KWStyle ExternalProject
BUG: Error only when unknown module is enabled.
DOC: Document behaviors of ChangeLabelLabelMapFilter
BUG: Document and assert improper usage of transform methods.
COMP: Enable hidden visibility property with GoogleTest static libraries
DOC: Doxygen namespace tag must be full namespace
BUG: Fix computation for Jacobian local vector
BUG: Cast to PrintType for MaskLabel variable printing
ENH: Update FixedPointInverseDisplacementField remote module
BUG: Error only when unknown module is enabled.
BUG: Fix computation of central moments for shape label map
BUG: shape label object elongation incorrectly zero
BUG: Fix computation of oriented bounding box
BUG: Add missing OrientedBoundingBox option
ENH: Only remove hidden visibility for C file with CMake<3
BUG: Print missing Seeds parameter and values used for Upper/Lower
ENH: Remove unneeded m_Upper and m_Lower ivars
ENH: Prefer raw pointers for pipelined owned objects
ENH: Update to use CircleCI 2.0
ENH: Enable MINC IO by default
ENH: Move advance Demons registration filters out of review
BUG: Fix CircleCI command to upload test results
ENH: Test SliceBySlice with non-zero index
BUG: Use same origin for internal image as input image
BUG: Remove duplicate code from local commit
COMP: Remove MINC library level exports
ENH: Add ProcessObject::AddOptionalInputName and more named inputs
ENH: Make more use of AddOptionalInputName
BUG: Use input macros for const correct pipeline inputs
ENH: Remove input name when renamed and add tests
BUG: Correct OBB names in GetAttributeFromName
ENH: Add ShapeLabelObject::GetRegion method
ENH: Hide MINC data in MINCIImageIO interface
BUG: Remove newly added warning in ProcessObject AddRequiredInput
BUG: Apply constant function specifier
BUG: Fix marking of required inputs for GPU PDE registration
BUG: Add missing getter method for PDE InitialDisplacementField
ENH: Use Input macros for set/get GPU PDE inputs
ENH: Move private GE format headers to src
ENH: CircleCI use ccache and cache external data
ENH: Extract reusable code into a copy image information functor
ENH: Change Cast parent class to InPlaceImageFilter
BUG: Add search paths for GoogleTest as source code on system
BUG: Update BinaryImageToLabelMapFilter::m_NumberOfLabels
COMP: Remove shadowing typedef
ENH: Updating remote module TextureFeatures to 3.0.0
COMP: Use integer suffix for long long types
BUG: Disable checking of OBB origin
PERF: Use initialized global variable for default number of threads
ENH: Add remote mote SimpleITKFilters
ENH: Add type for MultiThreader used by the ProcessObject

David Kügler (1):
BUG: better support for OBJ mesh format

Dženan Zukić (18):
ENH: adding an example and improving tests
ENH: support VCPKG
ENH: rewriting ThreadPool and enabling it by default
ENH: docs and compiler fix for ThreadPool, improvements of itkBarrierTest
ENH: turning off thread pool by default for now
STYLE: minor fix in debug mode and clearer code intent by using macros
STYLE: warn users of the DeformableSimplexMesh3DFilter’s limitations
ENH: Addition of type long long and unsigned long long for images
STYLE: VTK Mesh IO code simplification
COMP: fixing warnings
BUG: a call to SetGlobalDefaultNumberOfThreads was not respected
BUG: LONGLONG was not handled by DCMTKImageIO
BUG: PNG IO: return false instead of crashing in CanReadFile
COMP: fix a warning
BUG: ThreadPool hangs on Windows when ITK is compiled as DLLs
BUG: tests writing to the same file randomly fail during parallel invocation
COMP: fixing 2 compile errors on some compilers
ENH: adding JSON format report to resource probe

Edwin Bennink (1):
BUG: Fixed cylinder bbox, fixed and enhanced IsInside func

Floris Berendsen (1):
COMP: add symbol name mangling for niftilib in ITK

Francois Budin (42):
ENH: Bump ITK version to 4.13.0.
BUG: Update external data content links
ENH: Add cleanup option to content synchronization script
Revert "Merge branch ‘feenableexcept-musl-for-release’ into release"
Merge branch ‘upstream-metaio’ into update_metaIO
ENH: Bump CMakeLists.txt version to 4.12.1.
COMP: Remove -fvisibility-inlines-hidden warning with CMake 2.8.12
BUG: Remove VNL view from array functions and rename wrong variable
BUG: itkSimilarity2DTransform was not reporting singular matrices
ENH: Add test to verify ITK-3553 fixes
BUG: itkTestingComparisonImageFilter should derive from itkImageToImageFilter
BUG: Update tests to use ImageToImage compare image filter
ENH: Add options to itkTestDriver and itkTestingComparisonImageFilter
ENH: Adds MINC image IO wrapping
ENH: Replace ICONV with ICU to compile DCMTK
DOC: Document that workaround MSVC 2017 optimization bug has been corrected
BUG: sha512 file must exist before complaining that it hasn’t been updated
BUG: Missing files for DCMTK ImageOrientation test
BUG: itkgdcmopenjp2 was not exported in the build tree in GDCM
BUG: Duplicate SetInput()/GetInput() in itkTestingComparisonImageFilter
BUG: ICU_ARGS CMake variable should be declared CACHE
BUG: Typo in CMake variable name
BUG: Build DMCTK on Windows
BUG: Support color images (RGB/RGBA) with DCMTK
ENH: Add test for colored images loaded with DCMTK
BUG: ICU is always compiled statically
ENH: Update DCMTK build instructions for Windows
ENH: Adds itk_module_examples() macro
COMP: Bump CMake required version to 2.8.12
ENH: Simplify itk-module-init.cmake for DCMTK
BUG: Inconsistent image information between result and baseline
BUG: Python docstrings were not generated anymore
ENH: Add call() function in Python itkTemplate objects
BUG: DMCTK configuration with ICU on Windows was only correct for VS2017
BUG: Remove man page generation that is not necessary anymore
ENH: Improving factory registration
ENH: Adding factory components
ENH: Update remote modules using FACTORY_NAMES
BUG: Add previously removed function __getattr__() in
BUG: Synchronize factories across modules in Python
ENH: Allow RAW itk-module as shared library

GCC-XML Upstream (1):
ENH: pygccxml v1.9.0 (reduced)

GDCM Upstream (4):
GDCM 2017-09-15 (87e3c363)
GDCM 2017-10-13 (46919364)
GDCM 2017-11-09 (af81d444)
GDCM 2017-11-23 (4c51c343)

Google double-conversion Maintainers (1):
ENH: Google double-conversion (reduced)

GoogleTest Upstream (1):
googletest 2016-07-14 (a3ac2d7f)

Hans Johnson (3):
BUG: vnl_fft_1d lacks sufficient numerical stability
COMP: Clang compiler regression
ENH: Synchronized with cmake version of file

Jean-Baptiste VIMORT (2):
ENH: Automatic enabling of the -fPIC flag for external modules
ENH: Supression of GDCM’s linking to CoreFoundation

Jean-Christophe Fillion-Robin (6):
ENH: Support installing each module python wrapping independently
COMP: Update KWsys to set MACOSX_RPATH property based on CMAKE_MACOSX_RPATH
COMP: Update MINC to set MACOSX_RPATH property based on CMAKE_MACOSX_RPATH
COMP: ITKModuleExternal: Reset targets file
BUG: Fix hook clone
COMP: UseITK: Fix configure error due to different subproject requirements

Jon Haitz Legarreta Gorroño (33):
ENH: Improve coverage for v3 compatibility image arithm filters.
DOC: Fix typo in ‘exception’.
STYLE: Improve the itk::FastMarchingImageFilterBase class style.
STYLE: Improve itkApproximageSignedDistanceMapImageFilterTest style.
ENH: Check for input/output objects with an assertion.
BUG: Fix const casting compiler errors.
DOC: Update old file headers/copyright notices.
STYLE: Improve the itkSmoothingRecursiveGaussiaImageFilter style.
ENH: Improve coverage for itkSmoothingRecursiveGaussianImageFilter.
BUG: Fix links to NOTICE and LICENSE files in
STYLE: Conform (partially) to ITK coding style.
STYLE: Change SubtractConstantFromImageFilterTest name.
BUG: Add missing input image iterator declaration.
BUG: Fix Superclass names in V3Compatibility tests.
DOC: Fix wrong comments in V3Compatibility tests.
DOC: Correct the preferred class names in ITKv4.
COMP: Fix valgrind-detected uninitialized members.
ENH: Improve coverage for itkWarpHarmonicEnergyCalculator.
ENH: Bump lastest version of remote repository.
ENH: Display error message in Iterator classes’ wrapping.
DOC: Add links to NOTICE and LICENSE files in README.
DOC: Rework the contributing files.
DOC: Document how to upload binary data in a Markdown file.
DOC: Transition ThirdParty top-level README files to Markdown.
DOC: Add third party project updating documentation markdown file.
DOC: Document the release process in a Markdown file.
DOC: Transition Utilities/Maintenance/README Markdown.
DOC: Remove Documentation/Style.pdf file.
DOC: Redirect the “Submit a patch” link to
DOC: Mention the ITK full name in
DOC: Fix broken links and oversights in
DOC: Add a resource to Documentation.
DOC: Make the ITK long name be consistent in .md files.

KWSys Upstream (1):
KWSys 2017-10-17 (fc4d55ba)

Laura Pascal (2):
ENH: Update version of DCMTK to 3.6.1_20170529
ENH: Update the DoubleConversion library upstream update script.

Mathieu Malaterre (4):
ENH: Explicit set the precision when printing double
ENH: Use double floating point API for MetaImage
ENH: Define a global default double precision for MetaImage
ENH: Enforce data truncation for legacy tests

Matthew McCormick (46):
ENH: Add install rules for External Module Python package
COMP: Do not wrap std::_Deque_alloc
ENH: Wrap RegionOfInterestFilter for VectorImage’s
COMP: Disable CoreFoundation calls
ENH: Execute the merge when updating third party subtrees
ENH: Allow custom repo and branch for MetaIO subtree updates
COMP: Specify AR to PCRE build on macOS
BUG: Mark GoogleTest CMake options as advanced
COMP: Address LBFGS2Optimizerv4 doxygen warnings
BUG: ITKIOGE has a public dependency on ITKIOIPL
COMP: Bump KWStyle to latest master
ENH: Add TextureFeatures remote module
COMP: Detect the presence of mallinfo
COMP: IsNull() capitalization in LevelSetEquationAdvectionTerm
ENH: Wrap FloatingPointExceptions
COMP: Fail early when byteswap functions are not available
COMP: Detect the presence of feenableexcept
BUG: Use itkGetConstObjectMacro for LogBiasFieldControlPointLattice
COMP: Detect the presence of feenableexcept
COMP: Fix AnisotropicDiffusionLBR example build
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: Do not call in ITKIOBruker
ENH: Bump CMakeLists.txt version to 4.12.1
DOC: Format the README in markdown syntax
DOC: Enable offline Doxygen support
BUG: Update Bruker IO wrapping after migration from ITKReview
COMP: Update MorphologicalContourInterpolation to 2017-09-22
DOC: Do not pre-cache Doxygen php files
DOC: Expose RayCastInterpolateImageFunction members in Doxygen
BUG: RayCastInterpolateImageFunciton physical space issues
COMP: Overloaded - operator ambiguous in RayCastInterpolateImageFunction
BUG: Add missing template export for GradientAnisotropicDiffusionImageFilter
ENH: Wrap {Correlation,Demons,JointHistogramMI} Metricv4
ENH: Add Python wrapping for ITKIOMesh
BUG: Hide HDF5 CMake options from main configuration
BUG: Add DCMTK external project dependency after ExternalProject_Add
COMP: Bump CastXML to 2017-11-06 master
BUG: Fix hooks clone when ITK is a submodule
BUG: Remove duplicate entries of ITK_WRAP_PYTHON_LIBRARY_IMPORTS
DOC: Remove broken HoughTransform2DCircles wiki examples link

MetaIO Maintainers (5):
MetaIO 2017-07-20 (92caf34d)
MetaIO 2017-08-17 (3e1cb552)
MetaIO 2017-10-04 (55395e3d)
MetaIO 2017-08-31 (5f935e1b)
MetaIO 2017-12-04 (02a2e22e)

Niels Dekker (22):
COMP: Fixed <nifti1_io.h> leak into user code
STYLE: Replaced NiftiImageHolder by AutoPointer
COMP: Fixed “gifti_io.h” leak into user code
COMP: Fixed “Ge5xHdr.h” leak into user code
PERF: Break out of loop as soon as requested number of circles is found
STYLE: Removed useless (or obsolete) local bool, ‘found’.
PERF: Avoid redundant search in GetCircles(n)
PERF: GetCircles now calls Graft, instead of copying pixels from GetOutput(0)
DOC: Added comment that the grafted output image should not be modified.
STYLE: Removed HoughTransform GetCircles parameter (n) which appears obsolete
ENH: Added deprecated GetCircles(unsigned int) overload to HoughTransform
COMP: Replaced deprecated GetCircles(n) call in HoughTransform example
BUG: HoughTransform CirclesList should be empty when NumberOfCircles is zero
ENH: Tested HoughTransform CirclesList is empty when NumberOfCircles is zero
BUG: HoughTransform GetCircles() should avoid circles with accumulator <= 0
STYLE: Removed HoughTransform GetLines parameter (n), which appears obsolete
ENH: Improved HoughTransform2DCirclesImageFilter accuracy, using Math::Round
BUG: HoughTransform GetLines() returned too many lines
PERF: Improved speed of HoughTransform2DCirclesImageFilter::GenerateData()
STYLE: HoughTransform calling convenience overload of SetVariance
DOC: Mentioned that HoughTransform2DCirclesImageFilter also finds discs
ENH: Allow different types accumulator and radius image Hough Circles filter

Pablo Hernandez-Cerdan (3):
ENH: Add External Module IsotropicWavelets.
ENH: Update ExternalModule IsotropicWavelets to v0.4
ENH: Update IsotropicWavelets

Rene-Paul Debroize (1):
ENH: Add remote module TBBImageToImageFilter

Samuel Gerber (2):
ENH: Adding libLBFGS third party library
BUG: stdint.h missing on Visual Studio 9

Sean McBride (17):
COMP: Added missing ITK_OVERRIDE
COMP: fixed compilation error with int vs nullptr_t
PERF: Fixed some comments; prefer preincrement
COMP: add itk prefix to gdcmopenjp2 library name
COMP: Fixed some -Winconsistent-missing-override warnings
COMP: Added ITK_OVERRIDE to hundreds of destructor declarations.
COMP: Made ITK_OVERRIDE work only in MSVC >= 2012 (instead of 2010)
COMP: Fixed Wshadow warnings by removing shadows
COMP: Added a bunch more missing ITK_OVERRIDE
COMP: suppress all compilers warnings from third party google test
COMP: Added yet more ITK_OVERRIDEs, mostly on destructors
COMP: Added yet more ITK_OVERRIDEs
COMP: Fixed various -Wconst-qual warnings
COMP: Fixed some Wcast-qual warnings
COMP: Removed superfluous declarations in subclass, fixing override warnings
COMP: Silence -Wunused-template warnings by making affected methods inline

Simon Rit (1):
COMP: remove dynamic exception specifications

Steve Pieper (1):
BUG: ITK-3553 fixes ImageOrientation issue in DCMTK reader

Tobias Wood (2):
ENH: Updated the Bruker2DSeq reader to ParaVision 6.0
BUG: Bruker2dseq was not registered correctly due to module name change.

VXL Maintainers (1):
VNL 2017-10-05 (dd7794d9)

Vladimir S. FONOV (2):
MINC 2017-09-14 (e11c6df9)
MINC 2017-10-18 (f2d06a67)

Ziv Yaniv (2):
DOC: Updated documentation for LabelStatisticsImageFilter::GetBoundingBox.
BUG: itkVTKImageIO::CanWriteFile accepted files with wrong extension.

Errors or omissions? Please fix them here


I tested SimpleITK with the RC. I was getting a bunch of test failures; I tracked it down to problems with factory registration during static initialization. The following patch seems to help:

Glancing, at the code there appears to be a couple inconsistent check to ensure the static variables are initialized. This proposal may not be the best way, but it pinpoints the problem I encountered.

Thanks for the report and the patch. I commented on the patch on Gerrit. As a side note, I was not able to reproduce this bug on my machine, but I was able to reproduce it in a docker container with gcc:4.8.5 which is the same as the machine on which this bug arose for you.