We are happy to announce that the Insight Toolkit (ITK) 5.1 Beta 1 is available for testing! ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
ITK 5.1 Beta 1 is a pre-release to enable testing of major improvements to ITK’s NumPy interface.
ITK Python packages can be installed by running:
pip install --upgrade --pre itk
--pre flag will install the beta pre-release.
Unpack optional testing data in the same directory where the Library Source is unpacked.
Pass NumPy Array’s to ITK Image Filters
The Pythonic, functional-like interface to all ITK image-to-image-filters now directly supports operation on NumPy array’s, i.e.
numpy.ndarray. If a
ndarray is passed as an input, a
ndarray is returned as an output.
smoothed = itk.median_image_filter(array, radius=2)
Previously, explicit conversion to / from an
itk.Image was required with
We can now also convert an
itk.Image to a
numpy.ndarray with the standard
import numpy as np import itk image = itk.imread('/path/to/image.tif') array = np.asarray(image)
Python 3 Only
ITK 5.1 will be the first Python 3-only release. Consistent with most scientific Python packages and CPython’s 2020 drop in support, Python 2 support and binaries will no longer be available.
clang-format enforced C++ coding style
ITK has adopted a .clang-format coding style configuration file so a consistent coding style can automatically be applied to C++ code with the
clang-format binary. A consistent coding style is critical for readability and collaborative development.
clang-format has been applied to the entire codebase. The Whitesmiths style of brace indentation, previously part of the ITK Coding Style Guidelines, is not supported by clang-format, so it has been replaced by a brace style consistent with VTK’s current style.
A Git commit hook will automatically apply
clang-format to changed C++ code. We are refining the related documentation and improving automated application of the style.
Point Set Registration Parallelism
ITK provides a powerful registration framework for point-set registration, offering information-theoretic similarity metrics, labeled point-set metrics, and spatial transformation models that range from affine to b-spline to dense displacement fields. ITK 5.1 features enhanced parallelism in point-set metric computation, leveraging the native thread-pool and Threading Building Blocks (TBB) enhancements in ITK 5.
ITK 5 Improvements
Many more improvements and refinements were added since the ITK 5.0.0 release, which are detailed in the change log below. For example, a number of improvements were made to the itk::SpatialObject’s.
Congratulations and thank you to everyone who contributed to this release. Of the 25 authors, we would like to specially recognize the new contributors: James Butler, Neslisah Torosdagli, Rinat Mukhometzianov, Genevieve Buckley, and yjcchen091.
Additional improvements ITK’s NumPy interface are planned for the next pre-release. Try out the current release, and take part in the community discussion at discourse.itk.org. Contribute with pull requests, code reviews, and issue discussions in our GitHub Organization.
Changes from 5.0.0 to 5.1 Beta 1
Bradley Lowekamp @blowekamp (32): BUG: Use ProcessObject GetInput to obtain base pointer BUG: Fix ProcessObject::RemoveOutput for null objects. COMP: Address missing fftw include in CurvatureRegistrationFilter BUG: Fix ProcessObject::RemoveOutput for null objects. BUG: Add casting for vector pixel types STYLE: Use CTEST_TEST_TIMEOUT ENH: Add testing for CastImageFilter for more type conversions BUG: Restore support for Cast between explicitly cast-ed pixel type BUG: Use ProcessObject GetInput to obtain base pointer ENH: Add testing for CastImageFilter for more type conversions BUG: Restore support for Cast between explicitly cast-ed pixel type BUG: Add DataObject::New method BUG: Install FFTW headers in same location as ITK Revert "BUG: InterpolateImageFunction::GetRadius hidden in ITKV4_COMPATIBILITY" BUG: Preserve Interpolate GetRadius behavior with ITKv4Compatibility Revert "COMP: forgotten class for ITKV4_COMPATIBILITY in 2aae174" BUG: HDF5 is clobbering ctest TIMEOUT variables COMP: Fix not marked 'override' for ImageSink destructor BUG: Use enable_if with SFINAE to dispatch ENH: Add Vector constructor from C arrays with cast COMP: Work around uninitialized value warnings ENH: Update ITKv4 registration example to use resample over warp BUG: Specify specific CircleCI docker image with platform COMP: Address compilation warning with aggregate initializer BUG: Specify specific CircleCI docker image with platform ENH: Adding VS2019 v142, VS2017 v140 Azure Pipelines on merge DOC: Tweak internal documentation in SliceImageFilter BUG: Address bug with small size in output of SliceImageFilter ENH: Add more test cases for the SliceImageFilter COMP: Address internal compiler error on MSVC 19.0.24234.1 (v140) ENH: Add check expected input in HistogramMatchingImageFilter COMP: Add missing enum type_name from prior enum declaration style Csaba Pinter @cpinter (2): BUG: Fix loading of DICOM files with no preamble ENH: Add test for DICOM without preamble for DCMTK and GDCM Davis Vigneault @DVigneault (1): BUG: Make BuildCellLinks method const Dženan Zukić @dzenanz (32): BUG: number of work units was greater than 1 even for 1 thread BUG: fix a crash with ITK_DEFAULT_MAX_THREADS greater than 250 BUG: resample filter no longer triggers unnecessary exception COMP: change export specification to template for un-specialized method COMP: forgotten class for ITKV4_COMPATIBILITY in 2aae174 ENH: use double-conversion's CMake targets COMP: fix warning about missing override in CastImageFilter DOC: wrong class name for PlatformMultiThreader COMP: get rid of MSVC's warning 4661 ENH: enable GaussianInterpolateImageFunction to work with streaming STYLE: reduce space in ivar declarations STYLE: ITK indentation style in test STYLE: invert the name and internal logic of waiting for threads BUG: ThreadPool::DoNotWaitForThreads did not work properly STYLE: Add ITK prefix to testing macros in release branch DOC: invocation of AddWork uses -> because instance is always a pointer ENH: updating remote modules ENH: PoolMultiThreader uses one less thread ENH: documenting supported compilers ENH: updating remote modules STYLE: more consistent code formatting in test driver BUG: offset was not updated after changing Euler angle order (ZYX) Fix broken link in Data.md ENH: support RGB image in windowed sinc interpolation ENH: support RGB image in windowed sinc interpolation ENH: updating remote modules ENH: back-porting #1165 to support Visual Studio 2019 ENH: updating remote modules COMP: fixed enum name error when legacy is OFF and ITK_USE_GPU is ON ENH: removing deprecated Python functionality: imp ENH: removing deprecated Python functionality: sys.version_info 2/3 ENH: removing deprecated Python functionality: import print_function Francois Budin @fbudin69500 (4): BUG: ImageBase regions and ImageRegion properties are returned as reference DOC: Add ITK 5.0 release notes BUG: m_NumberOfPointPixels was set equal to m_NumberOfPoints ENH: Adds swig include directory to command line GDCM Upstream (1): GDCM 2019-05-22 (cc5358a1) Genevieve Buckley @GenevieveBuckley (1): BUG: All exceptions must be derived from python's BaseException class Hans J. Johnson @hjmjohnson (64): ENH: Update SphinxExamples to lastest master branch COMP: Add attribute for large doxygen config file. DOC: Remove ITK_FUTURE_LEGACY_REMOVE from documentation ENH: Disable remote module processing when creating doxygen. STYLE: Prevent double initialization DOC: Purge outdated media wiki WikiExamples BUG: Missed propagation of library dependancies ENH: Deprecate Neuralnetwork module Revert "Merge pull request #1039 from samuelgerber/MultithreadPointSetToPointSetMetricv4" STYLE: Remove deprecated support for ITK_WRAP_PYTHON_LEGACY DOC: Only warn when Module_NeuralNetworks is selected ENH: Use consistent project name with module name COMP: Fix clang-format nesting of empty macros DOC: Deprecate https://itk.org/Wiki/ITK/Examples content. DOC: Provide doxygen links for sphinx DOC: Improve the documentation clarity for NormalizeImage. DOC: Moved wiki examples to sphinx examples part2 ENH: itkObjectToObjectOptimizerBase Must be explicitly instantiated COMP: Terminate conditional doxygen sections DOC: Set class name for StreamingProcessObject doxygen ENH: Update the DoxygenLayout.xml file ENH: Update template files for Doxygen. BUG: Patch submission scripts conflict with doxygen COMP: Resolve 1000's of alias warnings in 1.8.15 DOC: Moved wiki pages to sphinx examples BUG: Flawed logic for itkExceptionObject.h guards STYLE: Use override statements for C++11 STYLE: Prefer c++11 'using' to 'typedef' COMP: Another work around uninitialized value warnings ENH: Prefer c++11 'using' to 'typedef' for structs COMP: Update AnalyzeObjectMapIO remote for ITKv5.0 COMP: Suppress warning about file that is too large STYLE: Use = default for trivial constructors STYLE: For loops can have a space before ; STYLE: Suppress longstanding kwstyle violations STYLE: Use templated function over macro ENH: Add LONGLONG & ULONGLONG types STYLE: Remove unused protected ivar m_MyProduct COMP: Isolate RAWIO non-templated code in cxx file PERF: Byteswap only when request != system byte order STYLE: Suppress longstanding kwstyle violations STYLE: Define the .clang-format config file ENH: Add script to assist with running clang-format on topic-branches ENH: Update C++/C attributes for itk style conformance. ENH: Add copy of git-clang-format from llvm binaries ENH: Add cmake configuration for clang-format ENH: Setup clang-format hooks for pre-commit-style DOC: Add missing line separator for ingroup ITKCommon DOC: Fix spelling typo VeriyInput -> VerifyInput ENH: Refactor to allow ReferenceHistogram instead of ReferenceImage COMP: Remove One Definition Rule conflict COMP: Fix missing type specialization for `unsigned long long int` STYLE: Convert 'enum' to 'enum class' objects with print enum function ENH: Workaround MSVC preprocessor name conflict STYLE: Prefer enum class definitions internally STYLE: Prefer consistent capitalization of Colormap ENH: Ignore wrapping warnings for `enum class` BUG: Missing ImageAdapter function signatures COMP: Change KWStyle to allow reformat to pass. STYLE: No-space inside <> ()  STYLE: Change the packing of parameters. STYLE: Use shorter column length for Software Guide. STYLE: End of history preceeding clang-format-8.0 style STYLE: Fix spelling error foramt -> format ITK Maintainer (1): STYLE: Enforce ITK style defined by .clang-format James Butler @jamesobutler (1): COMP: Add cmake_minimum_required to ITKNumericsFEM Jean-Christophe Fillion-Robin @jcfr (1): ENH: Support building ITKNumericsFEM as external module Jon Haitz Legarreta Gorroño @jhlegarreta (4): STYLE: Fix indentation in bash script ENH: Add script to update ITK testing macros names BUG: Fix remotes maintenance scripts BUG: Fix wrong variable names Matthew McCormick @thewtex (61): ENH: Bump the ITK CMake version to 5.1.0 ENH: New content links for ITK 5.0.0 STYLE: DeformableRegistration2 line length warnings COMP: SpatialObjectsHierarchy Software Guide newline ENH: Bump CI ExternalDataVersion to 5.0.0 DOC: Release generation updates for ITK 5.0.0 DOC: Add a note about updating conda-forge for post wheels ENH: Update Doxygen to 1.8.15 BUG: Add test/CMakeLists.txt stub to NumPy bridge COMP: Provide NumericTraits<complex<T>>::ZeroValue() definition COMP: Backwards compatibility testing macros without ITK_ prefix BUG: Get latest tag in UpdateRequiredITKVersionInRemoteModules.sh BUG: Filename vars in UpdateRequiredITKVersionInRemoteModules.sh ENH: UpdateRequiredITKVersionInRemoteModules bump patch version ENH: UpdateRequiredITKVersionInRemoteModules supports ITKPythonGitTag BUG: Do not require PyBUF_WRITABLE in GetArrayViewFromImage DOC: Update supported Python versions warning ENH: Require Python 3.5 or newer on all platforms BUG: ITKFixedPointInverseDisplacementField wrapping test config update BUG: Remove VectorExpandImageFilter wrapping BUG: Add PEP 366 __package__ support to ITKLazyModule COMP: Remove HasNumericTraitsCheck from ExpandImageFilter ENH: Wrap ExpandImageFilter with vector types BUG: Release the Python Global Interpreter Lock (GIL) during execution STYLE: Apply ITK Style Guidelines to itkPyCommand.cxx BUG: itk::PyCommand ensures the GIL state BUG: Support pickling LazyITKModule with cloudpickle BUG: Add Pipeline name to Azure configuration DOC: Update Azure Pipelines badge URL's BUG: Add wrapping for TransformMeshFilter ENH: Bump itkVersion.cmake for 5.0.1 ENH: CI testing uses Python 3 BUG: itkPyBufferTest: use bytes for Python 3 np.frombuffer BUG: Remove NumberOfComponents check in _GetImageViewFromArray BUG: Remove NumberOfComponents check in _GetImageViewFromArray DOC: Update ITK.Linux.Python and ITK.Coverage README badges BUG: Update SkullStrip module to address Doxygen configuration BUG: Use ITK_BUILD_DOCUMENTATION to enable Doxygen builds COMP: Update CastXML to 2019-07-15 master DOC: Minor release documentation updates ENH: Support numpy.asarray for itk.Image ENH: Directly set an itk.ImageBase Direction with a NumPy Array BUG: Ensure NumPy array is C-contiguous with matrix conversion BUG: Enable ITKBridgeNumPy for Windows CI builds DOC: AdaptiveHistogramEqualizationImageFilter default radius BUG: Do not run itkPyBufferMemoryLeakTest on Windows BUG: Remove Windows Python 2.7 hypot workaround ENH: Support NumPy array-like inputs to image filters DOC: Add Eigen license to NOTICE file ENH: Download clang-format 8.0.1 executable ENH: Add wrapping for LabelImageGaussianInterpolateImageFunction DOC: 'weight' spelling in LabelImageGaussianInterpolateImageFunction BUG: Add NumPy conversion for itk.Image[itk.Vector[itk.D,dim]] BUG: Wrap WindowedSincInterpolateImageFunction SmartPointer BUG: Do not apply style pre-commit hooks to ThirdParty code BUG: Do not download clang-format with ITK_FORBID_DOWNLOADS enabled BUG: Add missing KWStyle hook configuration ENH: Update clang-format binary path configuration BUG: Fix have_KWStyle detection when running clang-format hook BUG: Improvements to pre-commit-style hook for clang-format ENH: Check for required clang-format version in style hook MetaIO Maintainers (1): MetaIO 2019-05-22 (5f90075b) Mihail Isakov (1): ENH: added missing symbols to JPEG mangling header Neslisah Torosdagli @neslimsah (2): BUG: Regression in PolygonSpatialObject::IsInsideInObjectSpace #1082 BUG: Regression in PolygonSpatialObject::IsInsideInObjectSpace #1082 Niels Dekker @N-Dekker (22): PERF: Replace mutex by atomic in MersenneTwisterRandomVariateGenerator STYLE: Remove two duplicated #include <mutex> directives STYLE: Add const to MersenneTwisterRandomVariateGenerator::GetSeed() ENH: GTest MersenneTwisterRandomVariateGenerator::GetIntegerVariate() STYLE: Use image->TransformPhysicalPointToIndex(point), returning index ENH: ImageBase Transform-Vector single argument overloads more generic STYLE: Use image->TransformVectorToVector(gradient), returning gradient STYLE: Vector, CovariantVector(value) call base FixedArray(value) STYLE: FastMarching replace FixedArray Begin(), End() by range-based for STYLE: Replace FixedArray Begin(), End() by cbegin(), cend() STYLE: itkFixedArray.hxx using std::equal, and C++11 fill_n and copy_n STYLE: Add const to SetStartingShrinkFactors parameter STYLE: Replace std::copy(input, input + n, output) by C++11 std::copy_n ENH: Add ImageRegionRange, to iterate over the pixels of an image region COMP: No longer disable obsolete MSVC warning C4231 on 'extern' template STYLE: Order #pragma warning directives in itkWin32Header.h COMP: No longer disable obsolete MSVC warning C4231 in VNL/vxl/vcl BUG: Fix possible loss of data on type conversion COMP: QuadEdgeMesh::SetCell avoid assignment in conditional expression COMP: Remove (char) casts of hexadecimal int literals from UnicodeIOTest COMP: ImageRegionRangeGTest issue #1147 Unused function template warning COMP: Fix loss of data ProcessObject GetNumberOfValidRequiredInputs() Pablo Hernandez-Cerdan @phcerdan (1): BUG: Fix COMPILE_DEFINITIONS of castxml Rinat Mukhometzianov @rmukh (3): COMP: MSVC AVX flag fix COMP: Fix SSE for MSVC x86 COMP: Replace legacy ITK_Check...Flag.cmake with check_..._flag cmake function Samuel Gerber @samuelgerber (7): PERF: Remove Temporary Variable in GetMeasurementVector ENH: Add Multithreading to PointSetToPointSetMetricv4 ENH: Add Multithreading to PointSetToPointSetMetricv4 ENH: Add Multithreading to PointSetToPointSetMetricv4 Revert "Revert "Merge pull request #1039 from samuelgerber/MultithreadPointSetToPointSetMetricv4"" BUG: Fix PointSetToPointSetMetric Thread Safety BUG: Fix CompositeTransform ThreadSafety Stephen Aylward @aylward (17): ENH: Updated Spatial Object tex to match ITKv5 BUG: Fixed spelling mistakes and use of plural member functions ENH: Updated Spatial Object tex to match ITKv5 BUG: Fixed spelling mistakes and use of plural member functions BUG: Fix grammar and naming mistakes in SpatialObject documentation DOC: Fixed expected output of examples and documentation BUG: Fix grammar and naming mistakes in SpatialObject documentation DOC: Fixed expected output of examples and documentation BUG: Use AddPoint() for PointBasedSpatialObjects to set SO ENH: Replace ExceptionObjects with itkExceptionMacro. BUG: Use AddPoint() for PointBasedSpatialObjects to set SO ENH: Replace ExceptionObjects with itkExceptionMacro. ENH: Converted TubeSpatialObject ComputeTangentsAndNormals to frenet BUG: Resolve corner case bug in ComputeTangentsAndNormals in TubeSO ENH: Improved IsInside computation (speed and accuracy) of tube ENH: Updating TubeSO test to match assumption that default is EndRounded BUG: operator= defined in [tube|*]SpatialObjectPoint incomplete Steve Pieper @pieper (1): DOC: ITK5 SpatialObject Scene to Group change VXL Maintainers (1): VNL 2019-08-15 (7cc97a62) Ziv Yaniv @zivy (1): DOC: Correcting some grammer and updating the toolkit name. (#980) @maekclena (10): STYLE: Add ITK prefix to testing macros BUG: Fix BSplineGradient configuration ENH: Mark VectorExpandImageFilter as deprecated ENH: Deprecate VectorCentralDifferenceImageFilter ENH: Remove VectorExpandImageFilter when ITK_LEGACY_REMOVE is on BUG: add required method for Pickling BUG: Fix GaussianInterpolateImageFunction with streaming BUG: Avoid buffer overwriting in DCMTKImageIO ENH: Disable itkDCMTKImageIOMultiFrameImageTest BUG: Mitigate overflow in DCMTKImageIO::Read @yjcchen0913 (1): BUG: Ensure strict weak ordering in HessianToObjectnessMeasure's sort