ITK 5.1 Release Candidate 3 available for testing

We are happy to announce the Insight Toolkit (ITK) 5.1 Release Candidate 3 is available for testing! :tada: ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.

ITK 5.1 is a feature release that improves and extends the major ITK 5.0 release. ITK 5.1 includes a NumPy and Xarray filter interface, clang-format enforced coding style, enhanced modern C++ range support, strongly-typed enum’s, and much more.

Release Candidate 3 adds a remote module rating quality grading system, a new remote module, TubeTK, and improvements based on experience with Release Candidate 2.

Downloads

Python Packages

Install ITK pre-release binary Python packages with:

pip install --pre itk

Library Sources

Testing Data

Unpack optional testing data in the same directory where the Library Source is unpacked.

Checksums

Features

ITKTubeTK

Brain vessels segmented with the new TubeTK remote module. To install experimental Python packages: pip install itk-tubetk. Jupyter notebooks are provided as examples.

Pass NumPy Array’s or Xarray DataArray’s to ITK Image Filters

The Pythonic, functional-like interface to all ITK image-to-image-filters now directly supports operation on NumPy ndarray’s, i.e. numpy.ndarray. If a ndarray is passed as an input, a ndarray is returned as an output.

For example,

smoothed = itk.median_image_filter(array, radius=2)

Previously, explicit conversion to / from an itk.Image was required with itk.array_from_image and itk.image_from_array.

We can now also convert an itk.Image to a numpy.ndarray with the standard np.asarray call.

import numpy as np
import itk

image = itk.imread('/path/to/image.tif')
array = np.asarray(image)

Similar, experimental support (subject to change) is also available for Xarray DataArray’s. If an xarray.DataArray is passed as an input, an xarray.DataArray is returned as an output. Moreover, the operation preserves spatial and dimensional metadata. For example,

import xarray as xr
import itk

image = itk.imread('/path/to/image.tif')
da = itk.xarray_from_image(image)
smoothed = itk.median_image_filter(da, radius=3)
print(smoothed)

results in:

<xarray.DataArray (y: 288, x: 894)>
array([[255.    , 255.    , 255.    , ..., 255.    , 255.    , 255.    ],
       [ 11.9995,  11.9995,  11.9995, ...,  11.9995,  11.9995,  11.9995],
       [ 11.9995,  11.9995,  11.9995, ...,  11.9995,  11.9995,  11.9995],
       ...,
       [ 11.9995,  11.9995,  11.9995, ...,  11.9995,  11.9995,  11.9995],
       [ 11.9995,  11.9995,  11.9995, ...,  11.9995,  11.9995,  11.9995],
       [ 11.9995,  11.9995,  11.9995, ...,  11.9995,  11.9995,  11.9995]],
      dtype=float32)
Coordinates:
  * x        (x) float64 0.0 1.0 2.0 3.0 4.0 ... 889.0 890.0 891.0 892.0 893.0
  * y        (y) float64 0.0 1.0 2.0 3.0 4.0 ... 283.0 284.0 285.0 286.0 287.0
Attributes:
    direction:  [[1. 0.]\n [0. 1.]]

A round trip is possible with itk.image_from_xarray.

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 are no longer be available.

Python Package 64-bit Float Support

In addition to the many other pixel types supported, the itk binary Python packages now include support for the double pixel type, i.e. 64-bit IEEE floating-point pixels. This improves compatibility with scikit-image, which uses this pixel type as a default.

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.

Enhanced Modern C++ Range Support

In addition to the ImageBufferRange, ShapedImageNeighborhoodRange, and IndexRange classes introduced in ITK 5.0, ITK 5.1 adds an ImageRegionRange. These range classes conform to the Standard C++ Iterator requirements so they can be used in range-based for loop’s and passed to Standard C++ algorithms. Range-based for loops provide an elegant syntax for iteration. Moreover, they are often more performant than other iteration classes available.

For example, to add 42 to every pixel:

ImageBufferRange<ImageType> range{ *image };
 
for (auto&& pixel : range)
{
  pixel = pixel + 42;
}

In ITK 5.1, adoption of the range classes was extended across the toolkit, which demonstrates their use and improves toolkit performance.

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.

SpatialObject’s and Strongly-Typed enum’s

Improvements and refinements were made to the ITK 5 itk::SpatialObject refactoring, and modern C++ interface. In particular, ITK 5.1 transitions enumerations to strongly-typed enumerations, which is flagged by modern compilers due to improved scoping and implicit conversions to int. Enum names now follow a consistent <Description>Enum naming conversion, which results in a Python interface:

<Description>Enum_<EnumValue1>
<Description>Enum_<EnumValue2>
[...]

A guide for updating to the new enum’s can be found in the Strongly Typed Enumerations section of the ITK 5 Migration Guide.

DICOM Support

ITK’s broadly adopted medical image support is hardened thanks to 20 years of testing and support from major open source DICOM library maintainers. In this release, many members of the community collaborated to further enhance ITK’s DICOM support for corner cases related to modality, pixel types, and vendor variations.

Remote Module Updates

New remote module: TubeTK: An open-source toolkit, led by Kitware, Inc., for the segmentation, registration, and analysis of tubes and surfaces in images.

A new remote module grading system was added to help convey the quality compliance level for the 45 remote modules.

Many remote modules were updated: AnalyzeObjectMapIO, AnisotropicDiffusionLBR, BSplineGradient, BioCell, BoneEnhancement, BoneMorphometry, Cuberille, FixedPointInverseDisplacementField, GenericLabelInterpolator, HigherOrderAccurateGradient, IOMeshSTL, IOOpenSlide, IOScanco, IOTransformDCMTK, IsotropicWavelets, LabelErodeDilate, LesionSizingToolkit, MinimalPathExtraction, Montage, MorphologicalContourInterpolation, ParabolicMorphology, PhaseSymmetry, RLEImage, RTK, SCIFIO, SimpleITKFilters, SkullStrip, SplitComponents, Strain, SubdivisionQuadEdgeMeshFilter, TextureFeatures, Thickness3D, TotalVariation, and TwoProjectionRegistration. Their updates are included in the detailed changelog below.

Zenodo Citation

ITK has a Zenodo Citation:

DOI

This citation can be used to cite a specific version of the software. If you have contributed 10 or more patches to ITK, please add your ORCID iD to our .zenodo.json file for authorship association.

NumFOCUS Copyright Transfer

ITK’s copyright and the copyright of software held by the Insight Software Consortium have been transferred to NumFOCUS. CMake’s copyright has been transferred to Kitware.

And More

Many more improvements have been made. For details, see the changelog below.

Congratulations

Congratulations and thank you to everyone who contributed to this release.

Of the 26 authors who contributed since v5.1rc02 and 71 authors since v5.0.0, we would like to specially recognize the new contributors:

Mathew J. Seng, Zahil Shanis, yjcchen0913, PA Rodesch, Aurélien Coussat, yinkaola, Bryce Besler, Pierre Chatelier, Rinat Mukhometzianov, Ramraj Chandradevan, Hina Shah, Gordian Kabelitz, Genevieve Buckley, Aaron Bray, nslay, Antoine Robert, James Butler, Matthew Rocklin, Gina Helfrich, and Neslisah Torosdagli, Brad T. Moore, Niklas Johansson, Flavien Bridault, Pradeep Garigipati, haaput, tabish, and Antoine Robert.

And the new contributors since v5.1rc02: Ben Wilson, Adam Rankin, PA Rodesch, Tabish Syed, vlibertiaux, and Michael Jackson.

What’s Next

As we work towards the ITK 5.1.0 release, the library will be improved based based on experiences with this final release candidate. Please try out the current release candidate, and discuss your experiences at discourse.itk.org. Contribute with pull requests, code reviews, and issue discussions in our GitHub Organization.

Enjoy ITK!

ITK Changes Since v5.1rc02

Adam Rankin (1):

Platform Fixes

  • Fixing compilation of ITK/OpenCV video bridge (26e9227e9e)

Bradley Lowekamp (14):

Enhancements

  • Add a modular and unified interface for multi-threaded progress (c8787b8ed8)
  • Update TBBMultiThreader to use ProgressReporters (6c69b28a34)
  • Restore progress reporting to many filters (13fdc58236)
  • Update SimpleITKFilters remote module (f7f05fd6a0)
  • Add name mangling for libpng update (b644f1a381)
  • When REMOTE_GIT_TAG_{name} is empty do not update remote (9131f9a9cd)
  • Rename REMOTE_GIT_TAG_{_name} to Module_{_name}_GIT_TAG (d67ae984a7)
  • Update SimpleITKFilters remote module (98634806f6)

Documentation Updates

  • Add brief description to image filters (8a0deec5d5)

Platform Fixes

  • fix Doxygen Illegal command in title section (6613c7ad9e)
  • Fix typo with Doxygen sphinx macro (c618d2f435)

Bug Fixes

  • Explicitly check abort flag in TBB multi-threader (45441808c4)
  • PoolMultiThreader catch and re-throw exceptions from progress (32259bbaf6)
  • Use function call to change access of superclass methods (3baf8d85fb)

Davis Vigneault (1):

Documentation Updates

Dženan Zukić (7):

Enhancements

Documentation Updates

  • Update pull request template (01813ac197)
  • update compliance worksheet for 6 remote modules (37a9976c74)

Platform Fixes

  • fix type conversion error in GPUPDEDeformableRegistrationFilter (13a6b07705)

Bug Fixes

  • fix crash with multiple update in LabelStatisticsImageFilter (83f63950c9)
  • restoring libPNG branch name for UpdateFromUpstream.sh (ff7b621d5d)

GDCM Upstream (1):

Miscellaneous Changes

Hans J. Johnson (20):

Enhancements

  • Provide rating scale for ITK Remote modules (b6ad2853de)
  • Default ITK_MINIMUM_COMPLIANCE_LEVEL=3 (3c04cbd71e)
  • Update hook-max-size for large GDCM files. (4a3c1b4907)
  • Fix anonymous exception passing for intel (e273f5ade6)
  • Add compliance criteria worksheet (83b4555d1e)

Documentation Updates

Platform Fixes

  • Named exception not passed along to next exception (58f86afd7e)
  • Conditional python3 package finding (0b3ce6383f)
  • Fix extra semi-colon compiler warning (72a45394b2)
  • Improve logic of hiding low grade modules (e5998a3a68)
  • non-C-compatible type given name for linkage (68bc9ea13d)

Bug Fixes

  • Module COMPLIANCE level processing improved (6ba9614ecf)
  • Wrapping the GPUImageOps in python (13937d82ed)

Style Changes

  • Capture stderr/stdout for eigen3 config (bc228ea2cb)
  • Hide options for unused wrapping features (0321aa0362)
  • Hide options for unused remote modules. (84aef6f3d8)
  • ITK_MINIMUM_COMPLIANCE_LEVEL is an advanced feature (bc6deb1e30)
  • ITK_NIFTI_IO_ANALYZE_FLAVOR is an advanced feature (875f30de8c)
  • CLANGFORMAT_EXECUTABLE is an advanced feature (f237f36dcf)
  • Rename AnalyzeObjectLabelMap to match conventions. (8daf5a66fa)

Hastings Greer (1):

Documentation Updates

  • Document python snakecase filters’ kwargs (b470f1f96b)

Jon Haitz Legarreta Gorroño (1):

Documentation Updates

  • Fix typos in progress reporter classes (31e89ce883)

KWSys Upstream (1):

Miscellaneous Changes

LIBPNG Upstream (1):

Miscellaneous Changes

Mathew Seng (1):

Style Changes

  • Prefer making deleted functions public (0a4e48a446)

Matt McCormick (15):

Enhancements

  • StopConditionRegularStepGradientDescentBaseOptimizer -> StopCondition (d70b92162a)
  • Wrap ExhaustiveOptimizerv4 (2a02738405)
  • Format the release changelog in Markdown (7d931ea700)

Documentation Updates

Platform Fixes

  • Unused exception object in SmapsFileParser (bdeb5186bb)
  • Add ITK patches for DCMTK (530f6548a7)
  • Do not add -mcorei7 with Emscripten (eae6840303)
  • Update CastXML binary for Visual Studio 2019 (ce5cf91651)

Bug Fixes

  • Wrap TriangleMeshToBinaryImageFilter for float types (0676d81d92)
  • Add Python3 CMake module workarounds to ITKModuleExternal (07705bd0eb)
  • Exclude Modules/Remote/CMakeLists.txt from remote module changes (1f95a37998)
  • Implement eq for sequence objects, e.g. itk.Size (4a40b80ebe)

MetaIO Maintainers (1):

Miscellaneous Changes

Niels Dekker (1):

Platform Fixes

  • Use nullptr rather than 0 in IOFactoryRegisterRegisterList (3x) (c575c710ad)

Pablo Hernandez-Cerdan (2):

Platform Fixes

Bug Fixes

  • Pass CMAKE__COMPILER to Eigen configuration (f1acd929e3)

Sean McBride (1):

Platform Fixes

  • fixed -Wfloat-conversion warning in public header (256476b86f)

Simon Rit (4):

Enhancements

  • update RTK and set MODULE_COMPLIANCE_LEVEL to 3 (7d68a35f16)

Documentation Updates

  • add affiliation and orcid for Simon Rit (5983574fc7)

Platform Fixes

  • remove Eigen3 shadow warnings with GCC 4.8.5 (6a2f32867d)

Bug Fixes

  • fix manual definition of git tag for remote modules (c285a902fd)

Stephen R. Aylward (5):

Enhancements

  • Update TubeSpatialObjects I/O methods for recent MetaIO changes. (dbd9ac3749)
  • Add TubeTK as a remote module for ITK (0c24f86518)
  • Bump TubeTK to support internal and extern remote module (90a52111e9)
  • Update TubeTK to github/InsightSoftwareConsortium/ITKTubeTK (ca77265380)

Bug Fixes

  • Bump TubeTK to fix use of ArrayFire and installation command (566604a937)

Tabish Syed (1):

Enhancements

  • Allow Transform with different Input and Output Dimensions. (6ec7f10b88)

Vladimir S. FONOV (2):

Bug Fixes

  • reduced number of warnings for non-uniform sampling (da24c78dc5)
  • accessing array out of bounds in ImageSeriesReader (7a8dca6080)

Ziv Yaniv (1):

Documentation Updates

ITK Examples Changes Since v5.1rc02

Ben Wilson (2):

Enhancements

  • Add AdditiveGaussianNoiseImageFilter example (c33ac8ba)

Miscellaneous Changes

Hans Johnson (20):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (1ff7ec66)
  • Make type sign match for comparison (b05bb000)
  • Now require ITK 5.1 for examples. (339ad191)
  • Increase minimum viable ITK version (bce41b30)
  • Use same mailmap naming as ITK. (d6038f12)
  • Suppress false warnings for CI (a04e6998)
  • Prefer https vs http for ctest submission. (468ce747)
  • Update for ITK 5.1rc02 (47337988)

Documentation Updates

  • Update copyright assignment to NumFOCUS (993e910d)
  • Indicate that CI for ITKExamples is different. (b6468841)

Platform Fixes

  • Fix build failure of deprecated example (d44d59ae)
  • Fix referenced ITK version to v5.1rc02 (fb41171b)
  • Prefer ZeroValue() for RGB pixel types (fa7aa084)

Bug Fixes

  • Incorrect function signature for override (abe96a4d)

Style Changes

  • Remove redundant void argument lists (34ac8717)
  • Make prototype match definition names (225db636)
  • Prefer c++11 ‘using’ to ‘typedef’ (6f1a8dae)
  • Remove redundant void argument lists (4981c210)
  • Prefer raw-string-literal over escapes (11a8f2de)
  • Use auto for variable type matches the type of the initializer expression (4700ca1a)

Mathew Seng (1):

Enhancements

  • Update enums from changes in ITK (e544261f)

Matt McCormick (1):

Bug Fixes

  • Do not install pre-release Python packages in Superbuild (37f9df72)

Remote Module Changes Since v5.1rc02

AnalyzeObjectLabelMap:

Hans Johnson (15):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (d807af8)

Documentation Updates

  • Update copyright assignment to NumFOCUS (082dbaf)
  • Remove old LICENSE and follow ITK license model (a2a1bd4)

Platform Fixes

  • Update module build to support azure CI. (d68b2e5)
  • Disable wrapping enable examples. (09bbfe6)
  • Remove unused variable warning. (c88693b)
  • Use one definition rule for constants. (b88892a)

Bug Fixes

  • Function name misspelling. (d7e27e8)

Style Changes

  • Remove redundant void argument lists (146c698)
  • Replace integer literals which are cast to bool. (5bc249f)
  • Prefer = delete to explicitly trivial implementations (839eda0)
  • Prefer = default to explicitly trivial implementations (36f0154)
  • Remove redundant void argument lists (17f7516)
  • Use default member initialization (e348e66)
  • Use names matching conventions of other modules (0660667)

Mathew Seng (3):

Enhancements

  • Update enums from recent enum changes in ITK (3dbdaaf)

Bug Fixes

  • Fixed failing test due to missing ingroup (11e4622)

Style Changes

  • Prefer making deleted functions public Deleting a function affects fundamental aspects of the client interface of a class, and hiding them in private as if they were implementation details is unhelpful. (9ab8ca5)

AnisotropicDiffusionLBR:

Hans Johnson (5):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (3fd46e9)
  • Update ITK tag for CI build. (08b2b06)
  • Make similar to module template (19012bd)

Documentation Updates

  • Update copyright assignment to NumFOCUS (c127ee0)

Style Changes

  • Use default member initialization (1558c94)

Mathew Seng (2):

Enhancements

  • Update enums from recent enum changes in ITK (90d8774)

Bug Fixes

  • Fixes header mismatch test fail (a7b0561)

BSplineGradient:

Hans Johnson (8):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (5c6857d)
  • Set ITKGitTag to v5.1rc02 for azure CI (8bf8342)
  • Prefer https vs http for ctest submission. (336bf1e)

Documentation Updates

  • Update copyright assignment to NumFOCUS (8d60bb0)

Platform Fixes

  • Use nullptr instead of 0 or NULL (004fe21)

Style Changes

  • Use override statements for C++11 (5b49a26)
  • Prefer = default to explicitly trivial implementations (b561ca9)
  • Use auto for variable type matches the type of the initializer expression (43a93a5)

BioCell:

Hans Johnson (8):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (8b78848)
  • Prefer https vs http for ctest submission. (abc81c3)

Documentation Updates

  • Update copyright assignment to NumFOCUS (2f4bb42)

Style Changes

  • Remove redundant void argument lists (91a8243)
  • Make prototype match definition names (33689ef)
  • Prefer = default to explicitly trivial implementations (b2cf06f)
  • Remove redundant void argument lists (a5dbede)
  • Use default member initialization (e5d96eb)

Mathew Seng (1):

Enhancements

  • Fix new enum changes from ITK and failing KWStyle tests (c0ce968)

BoneEnhancement:

Hans Johnson (11):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (2f707b9)
  • Fix unsigned/signed comparison warning. (993630a)
  • Set ITKGitTag to v5.1rc02 for azure CI (5573c76)
  • Prefer https vs http for ctest submission. (b29ba80)

Documentation Updates

  • Update copyright assignment to NumFOCUS (34f3f04)

Style Changes

  • Use auto for variable type matches the type of the initializer expression (19e7161)
  • Use override statements for C++11 (91f0c7e)
  • Prefer = default to explicitly trivial implementations (6566401)
  • Remove redundant void argument lists (3573388)
  • Use default member initialization (7a87b28)
  • Use auto for variable type matches the type of the initializer expression (3cdcada)

Mathew Seng (2):

Enhancements

  • Adding new scoped enumerations (7a4eb9f)
  • Update enums from changes in ITK (fa4054c)

BoneMorphometry:

Hans Johnson (6):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (8b9e734)
  • Set ITKGitTag to v5.1rc02 for azure CI (6c5dc67)
  • Prefer https vs http for ctest submission. (6232f2c)

Documentation Updates

  • Update copyright assignment to NumFOCUS (325481d)

Style Changes

  • Use override statements for C++11 (eb7dde2)
  • Use auto for variable type matches the type of the initializer expression (15bf32d)

Cuberille:

Hans Johnson (12):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (4b01c47)
  • Set ITKGitTag to v5.1rc02 for azure CI (bd8a7eb)
  • Prefer https vs http for ctest submission. (61eeb31)
  • Make similar to template from ITKModuleTemplate (105d147)

Documentation Updates

  • Update copyright assignment to NumFOCUS (f74d5c2)

Platform Fixes

Style Changes

  • Convert CMake-language commands to lower case (039359c)
  • Prefer = default to explicitly trivial implementations (f4ea1c8)
  • Use default member initialization (d59d1a9)
  • Prefer = default to explicitly trivial implementations (3b381a2)

Mathew Seng (1):

Bug Fixes

  • Fix failing kwstyle test. Header mismatch. (ca933fe)

NeuralNetworks:

FixedPointInverseDisplacementField:

Hans Johnson (5):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (8a5f85f)
  • Prefer https vs http for ctest submission. (fcc5f90)

Documentation Updates

  • Update copyright assignment to NumFOCUS (ec311e6)

Style Changes

  • Prefer = default to explicitly trivial implementations (7fcded4)
  • Use default member initialization (743c5f3)

GenericLabelInterpolator:

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (a672191)
  • Prefer https vs http for ctest submission. (705676c)
  • Make similar to template (b95fe46)

Documentation Updates

  • Update copyright assignment to NumFOCUS (2a5fb66)

Style Changes

  • Use override statements for C++11 (2bff89d)
  • Prefer = default to explicitly trivial implementations (8695aa3)
  • Use auto for variable type matches the type of the initializer expression (0e756a6)

HigherOrderAccurateGradient:

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (29fe691)
  • Set ITKGitTag to v5.1rc02 for azure CI (3c64fcb)
  • Prefer https vs http for ctest submission. (d3d2050)

Documentation Updates

  • Update copyright assignment to NumFOCUS (adcc833)

Style Changes

  • Prefer = default to explicitly trivial implementations (4a9700b)
  • Use default member initialization (a3f54fa)
  • Prefer = default to explicitly trivial implementations (d84f540)

IOFDF:

Hans Johnson (8):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (f3ac97d)
  • Prefer https vs http for ctest submission. (e2f4629)

Performance Improvements

  • readability container size empty (4f9ed82)

Documentation Updates

  • Update copyright assignment to NumFOCUS (a269609)

Style Changes

  • Remove redundant void argument lists (05b6bfa)
  • Replace integer literals which are cast to bool. (696adbb)
  • Prefer = default to explicitly trivial implementations (1ee4d00)
  • Remove redundant void argument lists (15f21d0)

Mathew Seng (1):

Enhancements

  • Update enums from recent enum changes in ITK (ef30910)

IOMeshSTL:

Hans Johnson (8):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (2caccf4)
  • Set ITKGitTag for azure (e5ef162)
  • Prefer https vs http for ctest submission. (f4d21b6)

Documentation Updates

  • Update copyright assignment to NumFOCUS (6d57718)

Platform Fixes

  • Enumeration type to store as unsigned int (1c90544)

Style Changes

  • Make prototype match definition names (f53de39)
  • Replace integer literals which are cast to bool. (dff4c68)
  • Pefer = default to explicitly trivial implementations (f3d79ea)

Mathew Seng (1):

Enhancements

  • Update enums from recent enum changes in ITK (d181406)

IOOpenSlide:

Hans Johnson (2):

Enhancements

  • Prefer https vs http for ctest submission. (c0c2cf3)

Documentation Updates

  • Update copyright assignment to NumFOCUS (be7fdcc)

IOScanco:

Hans Johnson (12):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (b403b1e)
  • Prefer https vs http for ctest submission. (3b07a92)

Performance Improvements

  • readability container size empty (a8a1f3a)

Documentation Updates

  • Update copyright assignment to NumFOCUS (86963c6)

Platform Fixes

  • Use nullptr instead of 0 or NULL (54ce509)

Style Changes

  • Remove redundant void argument lists (aabebdb)
  • Make prototype match definition names (cd0809a)
  • Use auto for variable type matches the type of the initializer expression (e839891)
  • Replace integer literals which are cast to bool. (83573ed)
  • Use override statements for C++11 (6780a2e)
  • Use default member initialization (9a4c819)
  • Use range-based loops from C++11 (b224c2e)

Mathew Seng (1):

Enhancements

  • Update enums from recent enum changes in ITK (5316880)

Matt McCormick (1):

Enhancements

  • Update CI to build against ITK 5.1 RC 2 (27dd8d7)

IOTransformDCMTK:

Hans Johnson (6):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (e94cc55)

Documentation Updates

  • Update copyright assignment to NumFOCUS (e92b0ea)

Style Changes

  • Remove redundant void argument lists (11398a4)
  • Use auto for variable type matches the type of the initializer expression (bc6bb8d)
  • Replace integer literals which are cast to bool. (eb4fa45)
  • Prefer = default to explicitly trivial implementations (ae62142)

IsotropicWavelets:

Hans Johnson (10):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (5b945b7)
  • Set ITKGitTag for azure (8f28a16)

Documentation Updates

  • Update copyright assignment to NumFOCUS (8cb9556)

Platform Fixes

  • Fix ambiguous type conversion for vnl_matrix (cdeaa47)

Style Changes

  • Fixed compiler warnings and logical bugs. (abf7e91)
  • Prefer = default to explicitly trivial implementations (02ec639)
  • Remove redundant void argument lists (ba71ec7)
  • Use default member initialization (53d9957)
  • Use default member initialization (8869fb2)
  • Prefer = default to explicitly trivial implementations (7fdbd15)

Mathew Seng (1):

Enhancements

  • Update enums from changes in ITK (171b9c7)

LabelErodeDilate:

Hans Johnson (6):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (f5e7c38)
  • Prefer https vs http for ctest submission. (f99a566)

Documentation Updates

  • Update copyright assignment to NumFOCUS (cb21e18)

Style Changes

  • Convert CMake-language commands to lower case (2782d18)
  • Prefer = default to explicitly trivial implementations (8929307)
  • Remove redundant void argument lists (76e2fde)

Mathew Seng (1):

Enhancements

  • Update enums from recent enum changes in ITK (6320c2a)

LesionSizingToolkit:

Hans Johnson (16):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (0f16f22)
  • Prefer https vs http for ctest submission. (9be8ae5)
  • Adding azure pipeline processing yml (79f9562)

Performance Improvements

  • readability container size empty (054da90)

Documentation Updates

  • Update copyright assignment to NumFOCUS (5333ff9)
  • Update copyright assignment to NumFOCUS (14eb11d)
  • Update copyright assignment to NumFOCUS (f73be20)

Platform Fixes

  • Use nullptr instead of 0 or NULL (3b22390)
  • Syncronize with template. (fa1a783)

Bug Fixes

  • Wrapping bugs prevented building (6365d71)

Style Changes

  • Convert CMake-language commands to lower case (b003898)
  • Prefer = delete to explicitly trivial implementations (af83289)
  • Prefer = default to explicitly trivial implementations (60f06cb)
  • Remove redundant void argument lists (e79d19a)
  • Use default member initialization (6148b45)
  • Use range-based loops from C++11 (0813bae)

MGHIO:

Hans Johnson (9):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (3827829)
  • Make similar to template (56eae3a)

Performance Improvements

  • readability container size empty (c74fda7)

Documentation Updates

  • Update copyright assignment to NumFOCUS (68d996a)

Style Changes

  • Remove redundant void argument lists (ed12a49)
  • Make prototype match definition names (746464b)
  • Replace integer literals which are cast to bool. (220afc7)
  • Prefer = default to explicitly trivial implementations (1fbec35)
  • Remove redundant void argument lists (46340ff)

Mathew Seng (1):

Enhancements

  • Fix new enum changes from ITK and failed KWStyle test. (0c2aafe)

MeshNoise:

Hans Johnson (4):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (37c7b87)

Documentation Updates

  • Update copyright assignment to NumFOCUS (9bb48f4)

Style Changes

  • Prefer = default to explicitly trivial implementations (4a248a3)
  • Remove redundant void argument lists (1abad68)

MinimalPathExtraction:

Hans Johnson (12):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (4ef47f1)
  • Set ITKGitTag to v5.1rc02 for azure CI (98df8b6)
  • Prefer https vs http for ctest submission. (28394bc)

Performance Improvements

  • readability container size empty (0ea874c)

Documentation Updates

  • Update copyright assignment to NumFOCUS (5ad8a2d)
  • Update copyright assignment to NumFOCUS (6b32903)

Platform Fixes

  • Update ITK tag for CI testing. (4c33803)
  • Synchronize with module template. (164c017)

Style Changes

  • Remove redundant void argument lists (f843db8)
  • Prefer = default to explicitly trivial implementations (a15bc10)
  • Remove redundant void argument lists (fab4d37)
  • Use auto for variable type matches the type of the initializer expression (3b40d22)

Montage:

Dženan Zukić (2):

Platform Fixes

  • fix type conversion error (5d2fa6b)

Bug Fixes

  • correctly handle tiles with non-zero starting indices (3573100)

Hans Johnson (15):

Enhancements

  • Set ITKGitTag for azure (3d82ce1)
  • Prefer https vs http for ctest submission. (4229332)

Performance Improvements

  • emplace_back method results in potentially more efficient code (99d4dfa)

Documentation Updates

  • Update copyright assignment to NumFOCUS (700bdbc)

Platform Fixes

  • Avoid name collision with Modules/Remote/SphinxExamples (048ecb2)
  • Use nullptr instead of 0 or NULL (8577cdf)

Style Changes

  • Enforce clang-format rules. (e81b494)
  • Remove CMake-language block-end command arguments (49c9aa8)
  • Convert CMake-language commands to lower case (8671845)
  • Remove redundant void argument lists (4ca52a9)
  • Prefer raw-string-literal over escapes (5bcba46)
  • Use override statements for C++11 (e7d54eb)
  • Prefer = default to explicitly trivial implementations (2262e64)
  • Use range-based loops from C++11 (ccff674)
  • Use auto for variable type matches the type of the initializer expression (464f3c5)

Mathew Seng (1):

Enhancements

  • Update enums from changes in ITK (6a8ceda)

Matt McCormick (22):

Enhancements

  • Bump Python package version to 0.5.0 (a7c9525)
  • Remove CircleCI configuration (1771da2)
  • Add .gitattributes (3d4ddbd)
  • Add clang-format GitHub Actions (b90a166)
  • Restrict Python package dependencies (5cab516)
  • Remove CircleCI configuration (a240939)
  • Add .gitattributes (010b364)
  • Add clang-format GitHub Actions (d0158ba)
  • Restrict Python package dependencies (025f69c)
  • Wrap PhaseCorrelationImageRegistrationMethod for all scalar pixel types (7985d7c)
  • Wrap MaxPhaseCorrelationOptimizer (00860e6)
  • Add wrapping for NMinimaMaximaImageCalculator (5a2cd37)
  • Wrap Tile, TileConfiguration (142eaa1)
  • Add TileMontage wrapping (c65afee)
  • Add TileMergeImageFilter wrapping (e7da790)

Documentation Updates

Platform Fixes

  • Patch igenerator.py for enum wrapping (824bf34)
  • NMinimaMaximaImageCalculator initialization (3a6e3b9)
  • Make TileMergeImageFilter (44c7868)

Style Changes

  • Apply clang-format for ITK Coding Style (ff88e8f)
  • Apply clang-format for ITK Coding Style (6cb85be)

Michael Jackson (1):

Miscellaneous Changes

MorphologicalContourInterpolation:

Dženan Zukić (2):

Enhancements

  • update enums to match recent changes in ITK (1b2f96e)

Platform Fixes

  • use STL’s unordered map instead of KWSYS’s hash map (f40da34)

Hans Johnson (6):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (08d1f76)

Performance Improvements

  • readability container size empty (b83a08f)

Documentation Updates

  • Update copyright assignment to NumFOCUS (c3c830a)

Style Changes

  • Prefer = default to explicitly trivial implementations (499ffb6)
  • Use default member initialization (693c8ce)
  • Use auto for variable type matches the type of the initializer expression (b72ef47)

MultipleImageIterator:

Hans Johnson (2):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (705f384)

Documentation Updates

  • Update copyright assignment to NumFOCUS (3b71d6e)

ParabolicMorphology:

Hans Johnson (6):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (a5696b2)
  • Prefer https vs http for ctest submission. (2637ba9)

Documentation Updates

  • Update copyright assignment to NumFOCUS (655dd40)

Style Changes

  • Convert CMake-language commands to lower case (851e219)
  • Prefer = default to explicitly trivial implementations (11e5928)
  • Remove redundant void argument lists (d3cd3ef)

PerformanceBenchmarking:

Hans Johnson (10):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (7e092c1)
  • Set ITKGitTag for azure (d4b68fa)
  • Prefer https vs http for ctest submission. (288d57c)

Documentation Updates

  • Update copyright assignment to NumFOCUS (8efcfa5)

Style Changes

  • Use override statements for C++11 (1661594)
  • Use auto for variable type matches the type of the initializer expression (0ee8392)
  • Prefer = default to explicitly trivial implementations (bd085a5)
  • Prefer raw-string-literal over escapes (ba00ac4)
  • Use default member initialization (9447fe0)
  • Use auto for variable type matches the type of the initializer expression (e869d3b)

Mathew Seng (2):

Enhancements

  • Update enums from changes in ITK (b2a668c)

Platform Fixes

  • Remove unused variable warning Removes variable ParametersValueType (3f39a08)

Matt McCormick (1):

Bug Fixes

PhaseSymmetry:

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (5df90ac)
  • Prefer https vs http for ctest submission. (fb5df77)

Documentation Updates

  • Update copyright assignment to NumFOCUS (4d2b01e)

Style Changes

  • Use override statements for C++11 (8fad234)
  • Prefer = default to explicitly trivial implementations (4ef573f)
  • Use default member initialization (2f6d50f)
  • Prefer = default to explicitly trivial implementations (2285273)

Mathew Seng (1):

Platform Fixes

  • Remove of compiler warning Originally compared int i to unsigned int InputImageDimension. Changed i to unsigned int. (2810eb5)

Matt McCormick (2):

Enhancements

  • Remove old CI configurations (6ffb76b)
  • CI builds against v5.1rc02 (2906fe3)

PolarTransform:

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (7697c4a)
  • Prefer https vs http for ctest submission. (9dbc9a2)
  • Add azure CI pipeline. (7976e4f)

Documentation Updates

  • Update copyright assignment to NumFOCUS (5ba4bcc)

Platform Fixes

  • Enable building without python. (3da95c3)
  • Azure is deprecating macOS-10.13 support (3448cb1)

Style Changes

  • Prefer = default to explicitly trivial implementations (5f5af5f)

Roman Grothausmann (3):

Enhancements

  • option to use arc increment instead of constant angular increment (5110762)
  • option to return NaN in case alpha is outside [-pi,pi] (0f6b273)
  • option for angular offset (14dd8bd)

PrincipalComponentsAnalysis:

Hans Johnson (9):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (9e63374)
  • Prefer https vs http for ctest submission. (c0ec46f)

Performance Improvements

  • Allow compiler to choose best way to construct a copy (6167882)
  • emplace_back method results in potentially more efficient code (af35150)

Documentation Updates

  • Update copyright assignment to NumFOCUS (a6913ba)

Style Changes

  • Convert CMake-language commands to lower case (ac68ca8)
  • Prefer = default to explicitly trivial implementations (0e9bd9f)
  • Remove redundant void argument lists (846df73)
  • Use default member initialization (3af16bf)

Jon Haitz Legarreta Gorroño (1):

Style Changes

  • Add ITK prefix to testing macros (4a9000f)

RLEImage:

Dženan Zukić (1):

Enhancements

  • update enums to match recent changes in ITK (2c28295)

Hans Johnson (6):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (db4f797)
  • Add .gitattributes to allow running ITK clang-formatting scripts (35f1248)

Documentation Updates

  • Update copyright assignment to NumFOCUS (1884c9c)

Style Changes

  • Prefer = delete to explicitly trivial implementations (fc7cb30)
  • Prefer = default to explicitly trivial implementations (cc004a5)
  • Use default member initialization (1f11a87)

Jon Haitz Legarreta Gorroño (1):

Platform Fixes

  • Use and move ITK_DISALLOW_COPY_AND_ASSIGN call to public section (32e4ee6)

RTK:

Aurélien Coussat (1):

Enhancements

  • First simple test for iteration reporting (b441fc7b)

Hans Johnson (20):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (9b1db19a)
  • Prefer https vs http for ctest submission. (1958ee03)

Performance Improvements

  • Allow compiler to choose best way to construct a copy (5f767716)
  • emplace_back method results in potentially more efficient code (77d85258)

Documentation Updates

  • Update copyright assignment to NumFOCUS (c489c2af)

Platform Fixes

  • Use nullptr instead of 0 or NULL (3b0750d1)
  • Prefer const member functions (2096c1b9)
  • Use attributtes to avoid clobbering external tools (f8781f9c)

Style Changes

  • Remove redundant void argument lists (971b5adc)
  • Make prototype match definition names (bd10544b)
  • Prefer c++11 ‘using’ to ‘typedef’ (11026984)
  • Use override statements for C++11 (76c11c42)
  • Assign initial values to variables (133a63c2)
  • Prefer = delete to explicitly trivial implementations (17541d4d)
  • Prefer = default to explicitly trivial implementations (38666461)
  • Use range-based loops from C++11 (7a2eea96)
  • Use auto for variable type matches the type of the initializer expression (c809382b)
  • Replace integer literals which are cast to bool. (bb80f235)
  • Remove redundant void argument lists (3f66f7f0)
  • Prefer = delete to explicitly trivial implementations (4e6df1ab)

PA Rodesch (1):

Enhancements

  • add projections weights in one step reconstruction (c2f2188c)

Simon Rit (11):

Enhancements

  • added Hnc image IO (another Varian file format) with test (f2848b9b)

Documentation Updates

  • Update README with Azure badges (e57db103)

Platform Fixes

  • test presence of -std= flag before passing it to nvcc (0965dfe6)
  • ensure creation of itkPyBufferRTK.wrap (2a82b055)
  • fix ITK enum types (8b903d37)
  • remove warnings introduced by Hnc IO (#268) (456346cc)

Bug Fixes

  • removed .circleci which is not up-to-date with ITK master branch (7b03c700)
  • add ITKBridgeNumPy dependency to load all templates (0922c84e)
  • fixed applications tests (c8d0de28)

Style Changes

  • apply ITK clang-format to all RTK source files (3f89b8b9)
  • backward compatibility with latest ITK release and master only (9ec2d879)

vlibertiaux (1):

Bug Fixes

  • direction was filled instead of origin (dbe00e4b)

SCIFIO:

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (6c5d3c9)
  • Set ITKGitTag to v5.1rc02 for azure CI (018d505)
  • Prefer https vs http for ctest submission. (ecadb63)
  • Update project command for cmake 3.10.2 (9b8711d)
  • Updates azure pipeline and sync with template (8bd6a73)

Documentation Updates

  • Update copyright assignment to NumFOCUS (2d11853)

Style Changes

  • Convert CMake-language commands to lower case (7a67881)

Mathew Seng (1):

Enhancements

  • Update enums from changes in ITK (67a4a9e)

Matt McCormick (2):

Bug Fixes

  • Remove old DownloadJRE.cmake.in file (2653903)
  • Remove CircleCI configuration (55d3a6a)

SimpleITKFilters:

Bradley Lowekamp (18):

Enhancements

  • Update ctest submitting method to https (222abb1)
  • Add test demonstrating behavior of INVALID enum on execution (2fd3893)
  • Refactor enums into DICOMOrientation class (a0b9eca)
  • Throw exception when desired orientation is invalid. (3344aa9)

Documentation Updates

  • Update copyright assignment to NumFOCUS (495ee7d)

Style Changes

  • Apply clang format styling (d8fac5c)

Miscellaneous Changes

SkullStrip:

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (778080f)
  • Remove failing unnecessary function in travis (286440c)

Documentation Updates

  • Update copyright assignment to NumFOCUS (b3d057a)

Platform Fixes

  • Use nullptr instead of 0 or NULL (e53d779)

Style Changes

  • Use override statements for C++11 (1ab6310)
  • Replace integer literals which are cast to bool. (6958fe4)
  • Prefer = default to explicitly trivial implementations (d22d11f)

SplitComponents:

Hans Johnson (2):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (34847ee)

Documentation Updates

  • Update copyright assignment to NumFOCUS (e78f0ee)

Strain:

Hans Johnson (3):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (30da2a1)

Documentation Updates

  • Update copyright assignment to NumFOCUS (d455b5b)

Style Changes

  • Prefer = default to explicitly trivial implementations (bc32c0d)

SubdivisionQuadEdgeMeshFilter:

Hans Johnson (5):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (5f63a18)
  • Prefer https vs http for ctest submission. (a6b3020)

Documentation Updates

  • Update copyright assignment to NumFOCUS (b5a9a5d)

Platform Fixes

  • Improve template formatting. (407179c)

Style Changes

  • Prefer = default to explicitly trivial implementations (46a1b46)

Mathew Seng (1):

Enhancements

  • Update enums from changes in ITK (2510117)

TextureFeatures:

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (67f7ea3)
  • Prefer https vs http for ctest submission. (5d41291)
  • This code no longer supports ITK 4.13 (2b831c4)

Documentation Updates

  • Update copyright assignment to NumFOCUS (926b6cb)

Platform Fixes

  • Enhance azure pipeline CI environment. (38faf6e)

Style Changes

  • Prefer = default to explicitly trivial implementations (5a46ecd)
  • Use default member initialization (130559d)

Thickness3D:

Dženan Zukić (2):

Documentation Updates

  • correct link to this module (1867507)

Platform Fixes

  • use ITK prefix for testing macros (23d3e48)

Hans Johnson (7):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (b6adc1e)
  • Set ITKGitTag to v5.1rc02 for azure CI (051f185)
  • Prefer https vs http for ctest submission. (c39a6c7)

Documentation Updates

  • Update copyright assignment to NumFOCUS (d24f809)

Platform Fixes

  • Prefer const pointer when value does not change (044a334)

Style Changes

  • Prefer c++11 ‘using’ to ‘typedef’ (54b2c9f)
  • Remove redundant void argument lists (a24fd19)

TotalVariation:

Hans Johnson (3):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (79d6e5d)

Documentation Updates

  • Update copyright assignment to NumFOCUS (b911323)

Style Changes

  • Remove CMake-language block-end command arguments (b5f6def)

Jean-Christophe Fillion-Robin (1):

Platform Fixes

  • Ensure proxTV dependencies are found when building against ITK build tree (aee8abe)

Pablo Hernandez-Cerdan (5):

Documentation Updates

  • Remove TODOs in Readme (3303c4e)
  • Update readme, remove duplicated license (0af8837)

Platform Fixes

Bug Fixes

  • Use ITKInternalEigen3_DIR to find Eigen (b034feb)

Miscellaneous Changes

  • Ensure proxTV dependencies are found when building against ITK build tree" (8cb0204)

TubeTK:

Stephen Aylward (5):

Enhancements

  • Update paths and CMakeLists.txt for compilation as a remote module (f68d6f0c)
  • Remove install target that wasn’t used (1c33d196)
  • Support remote and external building (ac4b205a)
  • Include top level binary dir, it contains config.h (6aaa6148)
  • Move intall-target specification for TubeTKLib into TubeTKLib (719d12e9)

Stephen R. Aylward (4):

Bug Fixes

  • Re-enable arrayfire support. (6c7746f2)
  • CastSpatialObject filter moved to ITK, so remove install cmd (745e5a23)

Miscellaneous Changes

TwoProjectionRegistration:

Hans Johnson (11):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (b51f827)
  • Set ITKGitTag to v5.1rc02 for azure CI (daca3b9)
  • Fix circleci pathing failure. (bb7e8f9)
  • Prefer https vs http for ctest submission. (32f1012)
  • Allow building shared library. (6fcdbe6)

Documentation Updates

  • Update copyright assignment to NumFOCUS (4a478b9)

Platform Fixes

  • Synchronize with template builder scripts. (4023255)

Bug Fixes

  • Incorrect test library variable used. (df2d0c2)

Style Changes

  • Replace integer literals which are cast to bool. (72a7eac)
  • Prefer = default to explicitly trivial implementations (e65f85d)
  • Remove redundant void argument lists (5ed0a68)

VariationalRegistration:

Hans Johnson (10):

Enhancements

  • Add .gitattributes to allow running ITK clang-formatting scripts (5eb525b)
  • Adding azure pipeline script. (4e78db8)
  • Prefer https vs http for ctest submission. (52658c1)

Documentation Updates

  • Update copyright assignment to NumFOCUS (c01f28b)

Platform Fixes

  • No compiled libraries, only executables (707e773)

Bug Fixes

  • Fix incorrect wrapping syntax for object types (8b7f40d)

Style Changes

  • Remove CMake-language block-end command arguments (6411401)
  • Convert CMake-language commands to lower case (80c4cc1)
  • Prefer = default to explicitly trivial implementations (ac4aa6e)
  • Remove redundant void argument lists (d2e9298)
5 Likes

Hi @matt.mccormick and congratulations on this release and in particular on the awesome integration with the NumPy and XArray ecosystems! This is so cool!

I have a couple of questions:

(1) Is the integration zero-copy?
(2) If not, at scikit-image we are moving towards guaranteeing that we return something that (a) is coercible to a NumPy array, ie that np.asarray will work on the output, and (b) that satisfies the basic array interface, ie has a .shape, .ndim, .dtype, and a data buffer. (I may not have fully captured the interface there, just working off the top of my head.) When things are not zero-copy and/or are lossy, it is important to provide this flexibility because it allows e.g. chaining together of itk calls, even when starting with a numpy array. Then we only trigger a conversion at the very start and the very end.

Apologies that I missed earlier discussions about this. Let me know if the above makes sense and would make sense for ITK.

Thanks!

1 Like

Hi @jni,

Great questions! We are heading into a golden age :sun_with_face: where we can seemlessly use scikit-image and itk together :-). There are different aspects to the answers. Here is more information; please shout if anything is unclear or if you think more emphasis would be helpful in any areas:

itk uses the CPython Buffer Protocol for interfacing with NumPy. This is a standard way to talk with NumPy that can permit views, i.e. zero-copy, on array buffers, while also transmitting core information like shape, ndim, and avoid NumPy API/ABI issues.

itk.array_view_from_image will create a np.ndarray view and itk.array_from_image will create a np.ndarray copy. There are also the similar itk.image_view_from_array and itk.image_from_array functions.

np.asarray works on an itk.Image instance and currently returns a copy as a np.ndarray.

There are plans to add .shape, .ndim, and .dtype to itk.Image.

For an xarray.DataArray, data_array.values always returns a np.ndarray. data_array.values returns a np.ndarray or a dask.array.core.Array.

np.asarray works on an xarray.DataArray, and returns a np.asarray(data_array.values, dtype=dtype), i.e. a Dask array or NumPy array with possible dtype conversion.

xarray.DataArray defines .shape, .ndim, and .dtype.

itk.image_from_xarray and itk.xarray_from_image currently do not create copies. Although, there is a known bug being addressed related to reference counting.

2 Likes

Thanks! My question was in this case:

Where array is a NumPy array, smoothed will be a NumPy array also — but will it be a view into the itk array used internally by median_image_filter, or a copy? And if I pass it into another itk.* function, will there be another copy? Or can I thread the NumPy arrays through many functions without unnecessary copies?

1 Like

A copy is currently created, but I will fix that :-).

In this case, we are good – we just wrap the NumPy buffer, and there is no extra copy.

We will get there :-). It is worth noting that we are not usually overwriting inputs, which is unexpected behavior for most developers.

2 Likes

@jni thanks again for these thoughts and suggestions! The improvements will be available in the itk-5.1.0 packages.

1 Like

It seem the source tarball link1 and link2 are broken. These links refer to tag v5.1rc3 but the exact tag is v5.1rc03.

@hubutui thanks for the note! – the links have been corrected.