Releases: InsightSoftwareConsortium/ITK
ITK 5.2 Release Candidate 3
ITK 5.2 Release Candidate 3 Release Notes
We are happy to announce the Insight Toolkit (ITK) 5.2 Release Candidate 3 is available for testing! 🎉 ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
ITK 5.2 is a feature release that improves and extends interfaces to deep learning, artificiayl intelligence (AI) libraries, with an emphasis on Project MONAI, the Medical Open Network for AI. ITK 5.2 feature highlights include functional filter support for PyTorch tensors, Python dictionary interfaces to itk.Image
metadata, NumPy-based pixel indexing, 4D Python image support, and improved multi-component image support.
Release Candidate 3 adds parallel, multi-label support in itk::ContourExtractor2DImageFilter
. Spatial transform IO functions, itk.transformread
, itk.transformwrite
are available, similar to itk.imread
, itk.imwrite
, itk.meshread
, itk.meshwrite
. itk.xarray_from_image
, itk.image_from_xarray
gained support for transfer of itk
MetaDataDictionary
and xarray
attrs
. An itk.ImageIOBase
derived object for itk.imread
and itk.imwrite
can now be provided with the imageio
keyword argument. Many code coverage improvements were made along with a number of platform support improvements, including VTK interfaces and Apple M1 ARM64 support.
Downloads
Python Packages
Install ITK Python packages with:
pip install --upgrade --pre itk
Library Sources
Testing Data
Unpack optional testing data in the same directory where the Library Source is unpacked.
Checksums
Features
MONAI-compatible itk.Image
metadata dict and NumPy-indexing pixel set/get Python interfaces.
print(image['0008|0008'])
image['origin'] = [4.0, 2.0, 2.0]
or a dictionary can be retrieved with:
meta_dict = dict(image)
For example:
In [3]: dict(image)
Out[3]:
{'0008|0005': 'ISO IR 100',
'0008|0008': 'ORIGINAL\\PRIMARY\\AXIAL',
'0008|0016': '1.2.840.10008.5.1.4.1.1.2',
'0008|0018': '1.3.12.2.1107.5.8.99.484849.834848.79844848.2001082217554549',
'0008|0020': '20010822',
For non-string keys, they are passed to the NumPy array view so array views can be set and get with NumPy indexing syntax, e.g.
In [6]: image[0,:2,4] = [5,5]
In [7]: image[0,:4,4:6]
Out[7]:
NDArrayITKBase([[ 5, -997],
[ 5, -1003],
[ -993, -999],
[ -996, -994]], dtype=int16)
Provides a Python dictionary interface to image metadata, keys are
MetaDataDictionary
entries along with 'origin', 'spacing', and
*'direction' keys. The later reverse their order to be consistent with
the NumPy array index order resulting from array views of the image.
The itk.xarray_from_image
and itk.image_from_xarray
functions gained support for transfer of itk
MetaDataDictionary
and xarray
attrs
along with support for ordering xarray
DataArray
dims
.
Python functional filter support for PyTorch tensors
Similar to functional filter support for NumPy ndarray
-like images, i.e. a numpy.ndarray
, Dask Array or xarray.DataArray
s, all itk.Image
filters now support execution on PyTorch Tensor
's.
For example:
import itk
import torch
import numpy as np
a = np.random.rand(50,50)
t = torch.from_numpy(a)
r = itk.median_image_filter(t)
Pythonic enhancements
itk.Image
now provides an astype()
method for casting to a NumPy dtype
or itk
pixel type.
In addition to since filtes or an image stack in a Python list, pass in a directory to itk.imread
containing a DICOM series to obtain the appropriately ordered 3D image.
itk.vtk_image_from_image()
and itk.image_from_vtk_image()
for working with VTK.
We now generate .pyi
Python interface files, providing better feedback in integrated development environments (IDE)'s like PyCharm.
Python code was modernized for Python 3.6, including some typehints. We now use the black
Python style.
An itk.set_nthreads()
convenience function is available to set the default number of threads. Support is now available for use in the Python multiprocessing
module.
In addition to itk.imread
, itk.imwrite
, itk.meshread
, itk.meshwrite
, spatial transformation IO functions are available, itk.transformread
, itk.transformwrite
.
To provide an itk.ImageIOBase
derived object to read a specific file format, itk.imread
and itk.imwrite
gained support for the imageio
keyword argument.
Python package layout improvements
Python support module organization has been organized into the itk.support.*
package.
Python development was added for multi-config CMake generators, e.g. Visual Studio or multi-config Ninja, with the limitation that it only works with the most recently built configuration. When developing ITK Python wrapping or ITK remote modules, copy the WrapITK.pth
build tree file to your virtual environment or conda environment site-packages
to experiment with the wrapping.
Python package advances
Improved VectorImage
and multi-component image support is available in the ITK Python packages.
NumPy is now a required package dependency.
Python packages are now built with interprodedural optimizations (IPO). Linux Python packages are built with the manylinux2014
toolchain.
Python packages are available for Python 3.6 to 3.9. Following CPython deprecation schedule, this is the last release to support Python 3.6.
C++ interface improvements
A new itk::FunctionCommand
class is available, an itk::Command
subclass that calls a std::function
objects or lambda functions.
New itk::ReadImage
, itk::WriteImage
convenience functions are available for reading and writing image files with minimal code.
An itk::Image
now supports operator==
and operator!=
.
A new itk::TernaryGeneratorImageFilter
class is now available.
Third party library updates
Updates were made for the third party libraries:
- GDCM
- HDF5
- double-conversion
- pygccxml
- castxml
- swig
- VXL
- KWIML
- KWSys
- MetaIO
- cuFFTW
Remote Module Updates
We added a new adaptive denoising remote module.
Many remote modules were updated: AdaptiveDenoising, AnalyzeObjectLabelMap, AnisotropicDiffusionLBR, BSplineGradient, BioCell, BoneEnhancement, BoneMorphometry, Cuberille, FixedPointInverseDisplacementField, GenericLabelInterpolator, HigherOrderAccurateGradient, IOFDF, IOMeshSTL, IOOpenSlide, IOScanco, IOTransformDCMTK, IsotropicWavelets, LabelErodeDilate, LesionSizingToolkit, MGHIO, MeshNoise, MinimalPathExtraction, Montage, MorphologicalContourInterpolation, MultipleImageIterator, ParabolicMorphology, PerformanceBenchmarking, PhaseSymmetry, PolarTransform, PrincipalComponentsAnalysis, RLEImage, RTK, SCIFIO, SimpleITKFilters, SkullStrip, SmoothingRecursiveYvvGaussianFilter, SplitComponents, Strain, SubdivisionQuadEdgeMeshFilter, TextureFeatures, Thickness3D, TotalVariation, TubeTK, TwoProjectionRegistration, and VariationalRegistration.
Their updates are included in the detailed changelog below.
Support for cross-platform C++ testing, Python package generation, and PyPI deployment with GitHub Actions was added to almost all remote modules.
Test coverage and bug fixes
A multitude of test code coverage improvements were made -- our code coverage is now 90.09% with 127,10 3nelines tested.
Many more bug fixes and improvements have been made. For details, see the changelog below.
Congratulations
Congratulations and thank you to everyone who contributed to this release.
Of the 58 authors who contributed since v5.1.0, we would like to specially recognize the new contributors:
Horea Christian, Baptiste Depalle, David Thompson, Pierre Wargnier, Darren Thompson, Sebastien Brousmiche, Alexander Burchardt, Marco Nolden, Michael Kuczynski, MrTzschr, Bernhard M. Wiedemann, Charles Garraud, Lee Newberg, Bryn Lloyd, Gregory Lee, justbennet, Kenji Tsumura, Zhiyuan Liu, Jonathan Daniel, Moritz Schaar, Atri Bhattacharya, Mon-ius, Michael Jackson, Tom Birdsong, Michael Kuczynski, Alex Domingo, Laurent Malka, and Kris Thielemans.
And the new contributors since v5.2rc02:
Andreas Huber and Melvin Robinson.
What's Next
This will be the last release candidate before the 5.2.0 release. Please try out the current release candidate, and discuss your experiences at discourse.itk.org. We will hold [a hackathon on March 17th](https://docs.google.com/document/d/1ETszOhQWXxinP49mFz8_w_fgm_Ks_FnEJMB5mvlBh4w...
ITK 5.2 Release Candidate 2
ITK 5.2 Release Candidate 2 Release Notes
We are happy to announce the Insight Toolkit (ITK) 5.2 Release Candidate 2 is available for testing! 🎉 ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
ITK 5.2 is a feature release that improves and extends interfaces to deep learning, artificial intelligence (AI) libraries, with an emphasis on Project MONAI, the Medical Open Network for AI. ITK 5.2 feature highlights include functional filter support for PyTorch tensors, Python dictionary interfaces to itk.Image
metadata, NumPy-based pixel indexing, 4D Python image support, and improved multi-component image support.
Release Candidate 2 makes improvements to these new features, such as 4D Python support and torch
tensor support, adds preliminary support for the new Apple M1 ARM64 system, and prepares updates to the ITK Sphinx Examples.
Downloads
Python Packages
Install ITK pre-release binary Python packages with:
pip install --upgrade --pre itk
Library Sources
Testing Data
Unpack optional testing data in the same directory where the Library Source is unpacked.
Checksums
Features
MONAI-compatible itk.Image
metadata dict and NumPy-indexing pixel set/get Python interfaces.
print(image['0008|0008'])
image['origin'] = [4.0, 2.0, 2.0]
or a dictionary can be retrieved with:
meta_dict = dict(image)
For example:
In [3]: dict(image)
Out[3]:
{'0008|0005': 'ISO IR 100',
'0008|0008': 'ORIGINAL\\PRIMARY\\AXIAL',
'0008|0016': '1.2.840.10008.5.1.4.1.1.2',
'0008|0018': '1.3.12.2.1107.5.8.99.484849.834848.79844848.2001082217554549',
'0008|0020': '20010822',
For non-string keys, they are passed to the NumPy array view so array views can be set and get with NumPy indexing syntax, e.g.
In [6]: image[0,:2,4] = [5,5]
In [7]: image[0,:4,4:6]
Out[7]:
NDArrayITKBase([[ 5, -997],
[ 5, -1003],
[ -993, -999],
[ -996, -994]], dtype=int16)
Provides a Python dictionary interface to image metadata, keys are
MetaDataDictionary entries along with 'origin', 'spacing', and
'direction' keys. The later reverse their order to be consistent with
the NumPy array index order resulting from array views of the image.
Python functional filter support for PyTorch tensors
Similar to functional filter support for NumPy ndarray
-like images, i.e. a numpy.ndarray
, Dask Array or xarray.DataArray
s, all itk.Image
filters now support execution on PyTorch Tensor
's.
For example:
import itk
import torch
import numpy as np
a = np.random.rand(50,50)
t = torch.from_numpy(a)
r = itk.median_image_filter(t)
Pythonic enhancements
itk.Image
now provides an astype()
method for casting to a NumPy dtype
or itk
pixel type.
In addition to since filtes or an image stack in a Python list, pass in a directory to itk.imread
containing a DICOM series to obtain the appropriately ordered 3D image.
itk.vtk_image_from_image()
and itk.image_from_vtk_image()
for working with VTK.
We now generate .pyi
Python interface files, providing better feedback in integrated development environments (IDE)'s like PyCharm.
Python code was modernized for Python 3.6, including some typehints. We now use the black
Python style.
An itk.set_nthreads()
convenience function is available to set the default number of threads. Support is now available for use in the Python multiprocessing
module.
Python package layout improvements
Python support module organization has been organized into the itk.support.*
package.
Python development was added for multi-config CMake generators, e.g. Visual Studio or multi-config Ninja, with the limitation that it only works with the most recently built configuration. When developing ITK Python wrapping or ITK remote modules, copy the WrapITK.pth
build tree file to your virtual environment or conda environment site-packages
to experiment with the wrapping.
Python package advances
Improved VectorImage
and multi-component image support is available in the ITK Python packages.
NumPy is now a required package dependency.
Python packages are now built with interprodedural optimizations (IPO). Linux Python packages are built with the manylinux2014
toolchain.
Python packages are available for Python 3.6 to 3.9. Following CPython deprecation schedule, this is the last release to support Python 3.6.
C++ interface improvements
A new itk::FunctionCommand
class is available, an itk::Command
subclass that calls a std::function
objects or lambda functions.
New itk::ReadImage
, itk::WriteImage
convenience functions are available for reading and writing image files with minimal code.
An itk::Image
now supports operator==
and operator!=
.
A new itk::TernaryGeneratorImageFilter
class is now available.
Third party library updates
Updates were made for the third party libraries:
- GDCM
- HDF5
- double-conversion
- pygccxml
- castxml
- swig
- VXL
- KWIML
- KWSys
- MetaIO
- cuFFTW
Remote Module Updates
We added a new adaptive denoising remote module.
Many remote modules were updated: AdaptiveDenoising, AnalyzeObjectLabelMap, AnisotropicDiffusionLBR, BSplineGradient, BioCell, BoneEnhancement, BoneMorphometry, Cuberille, FixedPointInverseDisplacementField, GenericLabelInterpolator, HigherOrderAccurateGradient, IOFDF, IOMeshSTL, IOOpenSlide, IOScanco, IOTransformDCMTK, IsotropicWavelets, LabelErodeDilate, LesionSizingToolkit, MGHIO, MeshNoise, MinimalPathExtraction, Montage, MorphologicalContourInterpolation, MultipleImageIterator, ParabolicMorphology, PerformanceBenchmarking, PhaseSymmetry, PolarTransform, PrincipalComponentsAnalysis, RLEImage, RTK, SCIFIO, SimpleITKFilters, SkullStrip, SmoothingRecursiveYvvGaussianFilter, SplitComponents, Strain, SubdivisionQuadEdgeMeshFilter, TextureFeatures, Thickness3D, TotalVariation, TubeTK, TwoProjectionRegistration, and VariationalRegistration.
Their updates are included in the detailed changelog below.
Support for cross-platform C++ testing, Python package generation, and PyPI deployment with GitHub Actions was added to almost all remote modules.
Test coverage and bug fixes
A multitude of test code coverage improvements were made -- our code coverage is now 89.86% with 126,591 lines tested.
Many more bug fixes and improvements have been made. For details, see the changelog below.
Congratulations
Congratulations and thank you to everyone who contributed to this release.
Of the 58 authors who contributed since v5.1.0, we would like to specially recognize the new contributors:
Horea Christian, Baptiste Depalle, David Thompson, Pierre Wargnier, Darren Thompson, Sebastien Brousmiche, Alexander Burchardt, Marco Nolden, Michael Kuczynski, MrTzschr, Bernhard M. Wiedemann, Charles Garraud, Lee Newberg, Bryn Lloyd, Gregory Lee, justbennet, Kenji Tsumura, Zhiyuan Liu, Jonathan Daniel, Moritz Schaar, Atri Bhattacharya, and Mon-ius.
And the new contributors since v5.2rc01:
Michael Jackson, Tom Birdsong, Michael Kuczynski, Alex Domingo, Laurent Malka, and Kris Thielemans.
What's Next
We anticipate an additional release candidate following community testing before the 5.2.0 release. The following release candidates will improve related documentation and make further improvements. 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.2rc01
Alex Domingo (1):
Bug Fixes
- fix python module definition in VtkGlue wrap (5e28b1d05d)
Brad King (1):
Enhancements
- Update to newer third-party update script from CMake (e0cd16a3c5)
Bradley Lowekamp (6):
Enhancements
- Update ternary filter wrapping for generator base class (1fd685a12a)
- Create ITK_DEFAULT_THREADER definition (0cb20b764c)
- Add ITK_DEFAULT_THREADER as CMa...
ITK 5.2 Release Candidate 1
ITK 5.2 Release Candidate 1 Release Notes
We are happy to announce the Insight Toolkit (ITK) 5.2 Release Candidate 1 is available for testing! 🎉 ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
ITK 5.2 is a feature release that improves and extends interfaces to deep learning, artificial intelligence (AI) libraries, with an emphasis on Project MONAI, the Medical Open Network for AI. ITK 5.2 feature highlights include functional filter support for PyTorch tensors, Python dictionary interfaces to itk.Image
metadata, NumPy-based pixel indexing, 4D Python image support, and improved multi-component image support.
Downloads
Python Packages
Install ITK pre-release binary Python packages with:
pip install --upgrade --pre itk
Library Sources
Testing Data
Unpack optional testing data in the same directory where the Library Source is unpacked.
Checksums
Features
MONAI-compatible itk.Image
metadata dict and NumPy-indexing pixel set/get Python interfaces.
print(image['0008|0008'])
image['origin'] = [4.0, 2.0, 2.0]
or a dictionary can be retrieved with:
meta_dict = dict(image)
For example:
In [3]: dict(image)
Out[3]:
{'0008|0005': 'ISO IR 100',
'0008|0008': 'ORIGINAL\\PRIMARY\\AXIAL',
'0008|0016': '1.2.840.10008.5.1.4.1.1.2',
'0008|0018': '1.3.12.2.1107.5.8.99.484849.834848.79844848.2001082217554549',
'0008|0020': '20010822',
For non-string keys, they are passed to a NumPy array view so array views can be set and get with NumPy indexing syntax, e.g.
In [6]: image[0,:2,4] = [5,5]
In [7]: image[0,:4,4:6]
Out[7]:
NDArrayITKBase([[ 5, -997],
[ 5, -1003],
[ -993, -999],
[ -996, -994]], dtype=int16)
Provides a Python dictionary interface to image metadata, keys are
MetaDataDictionary entries along with 'origin', 'spacing', and
'direction' keys. The later reverse their order to be consistent with
the NumPy array index order resulting from array views of the image.
Python functional filter support for PyTorch tensors
Similar to functional filter support for NumPy ndarray
-like images, i.e. a numpy.ndarray
, Dask Array or xarray.DataArray
s, all itk.Image
filters now support execution on PyTorch Tensor
's.
For example:
import itk
import torch
import numpy as np
a = np.random.rand(50,50)
t = torch.from_numpy(a)
r = itk.median_image_filter(t)
Pythonic enhancements
itk.Image
now provides an astype()
method for casting to a NumPy dtype
or itk
pixel type.
In addition to an image filename or an image filename stack in a Python list, pass in a directory to itk.imread
containing a DICOM series to obtain the appropriately ordered 3D image.
itk.vtk_image_from_image()
and itk.image_from_vtk_image()
for working with VTK.
We now generate .pyi
Python interface files, providing better feedback in integrated development environments (IDE)'s like PyCharm.
Python code was modernized for Python 3.6, including some typehints. We now use the black
Python style.
An itk.set_nthreads()
convenience function is available to set the default number of threads. Support is now available for use in the Python multiprocessing
module.
Python package layout improvements
Python support module organization has been organized into the itk.support.*
package.
Python development was added for multi-config CMake generators, e.g. Visual Studio or multi-config Ninja, with the limitation that it only works with the most recently built configuration. When developing ITK Python wrapping or ITK remote modules, copy the WrapITK.pth
build tree file to your virtual environment or conda environment site-packages
to experiment with the wrapping.
Python package advances
Improved VectorImage
and multi-component image support is available in the ITK Python packages.
NumPy is now a required package dependency.
Python packages are now built with interprodedural optimizations (IPO). Linux Python packages are built with the manylinux2014
toolchain.
Python packages are available for Python 3.6 to 3.9. Following CPython deprecation schedule, this is the last release to support Python 3.6.
C++ interface improvements
A new itk::FunctionCommand
class is available, an itk::Command
subclass that calls a std::function
objects or lambda functions.
New itk::ReadImage
, itk::WriteImage
convenience functions are available for reading and writing image files with minimal code.
An itk::Image
now supports operator==
and operator!=
.
A new itk::TernaryGeneratorImageFilter
class is now available.
Third party library updates
Updates were made for the third party libraries:
- GDCM
- HDF5
- double-conversion
- pygccxml
- castxml
- swig
- VXL
- KWIML
- KWSys
- MetaIO
- cuFFTW
Remote Module Updates
We added a new adaptive denoising remote module.
Many remote modules were updated: AdaptiveDenoising, AnalyzeObjectLabelMap, AnisotropicDiffusionLBR, BSplineGradient, BioCell, BoneEnhancement, BoneMorphometry, Cuberille, FixedPointInverseDisplacementField, GenericLabelInterpolator, HigherOrderAccurateGradient, IOFDF, IOMeshSTL, IOOpenSlide, IOScanco, IOTransformDCMTK, IsotropicWavelets, LabelErodeDilate, LesionSizingToolkit, MGHIO, MeshNoise, MinimalPathExtraction, Montage, MorphologicalContourInterpolation, MultipleImageIterator, ParabolicMorphology, PerformanceBenchmarking, PhaseSymmetry, PolarTransform, PrincipalComponentsAnalysis, RLEImage, RTK, SCIFIO, SimpleITKFilters, SkullStrip, SmoothingRecursiveYvvGaussianFilter, SplitComponents, Strain, SubdivisionQuadEdgeMeshFilter, TextureFeatures, Thickness3D, TotalVariation, TubeTK, TwoProjectionRegistration, and VariationalRegistration.
Their updates are included in the detailed changelog below.
Support for cross-platform C++ testing, Python package generation, and PyPI deployment with GitHub Actions was added to almost all remote modules.
Test coverage and bug fixes
A multitude of test code coverage improvements were made -- our code coverage is now 89.86% with 126,590 lines tested.
Many more bug fixes and improvements have been made. For details, see the changelog below.
Congratulations
Congratulations and thank you to everyone who contributed to this release.
Of the 51 authors who contributed since v5.1.0, we would like to specially recognize the new contributors:
Horea Christian, Baptiste Depalle, David Thompson, Pierre Wargnier, Darren Thompson, Sebastien Brousmiche, Alexander Burchardt, Marco Nolden, Michael Kuczynski, MrTzschr, Bernhard M. Wiedemann, Charles Garraud, Lee Newberg, Bryn Lloyd, Gregory Lee, justbennet, Kenji Tsumura, Zhiyuan Liu, Jonathan Daniel, Moritz Schaar, Atri Bhattacharya, and Mon-ius.
What's Next
We anticipate at least one more release candidate following community testing before the 5.2.0 release. The following release candidates will improve related documentation and make further improvements. 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.1.0
Alexander Burchardt (1):
Documentation Updates
- fixes itkSoftwareGuide #146 (f8069f0fbe)
Antoine Robert (2):
Enhancements
- Use Numpy bridge with array of dimension 1 (53ce90294b)
Atri Bhattacharya (2):
Bug Fixes
- Use explicit libm linking only on UNIX. (0ba93de147)
Miscellaneous Changes
Baptiste Depalle (1):
Enhancements
- improve wrapping architecture (b118141a63)
Bernhard M. Wiedemann (1):
Bug Fixes
- Fix issue #1939 (eea0be3e14)
Brad King (1):
Style Changes
- Allow specific HDF5 sources to be larger than normal limit ([b...
ITK 5.1.2
ITK 5.1.2 Release Notes
We are happy to announce the Insight Toolkit (ITK) 5.1.2! 🎉 ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
Python Packages
Install ITK Python packages with:
pip install --upgrade itk
or:
conda install -c conda-forge itk
Library Sources
Testing Data
Unpack optional testing data in the same directory where the Library Source is unpacked.
Checksums
ITK 5.1.2 is a patch release that makes improvements to issues found in the 5.1.1 release. For more details on ITK 5.1, see the ITK 5.1.0 Release Notes.
This release addresses various issues such as HDF5 install paths and MRC and TIFF pixel type support -- details can be found in the change log below. Cross-platform Python packages are available for Python 3.6, 3.7, 3.8, and 3.9. Packages for Python 3.5 are no longer provided following CPython's deprecation schedule.
What's Next
Join us in the creation of advanced, open source scientific image analysis tools. Take part in the community discussion at discourse.itk.org. Contribute with pull requests, code reviews, and issue discussions in our GitHub Organization.
The first release candidate for ITK 5.2, which provides many new features and updates for Project MONAI, is anticipated over the next two weeks.
Enjoy ITK!
Changes from 5.1.1 to 5.1.2
Bradley Lowekamp (4):
Platform Fixes
- Updating ITKSimpleITKFilters remote module (e3ba060fe5)
Bug Fixes
- Address divide by zero error in SignedMaurerDistance (4fb2831d62)
- Support MRC2014 mode 0 as signed 8-bit integer (f7d72576bf)
Style Changes
- Improve function types used in SignedMaurerDistanceMap (b706cf64c7)
Hans Johnson (1):
Bug Fixes
- itkhdf5 installed paths were incorrect with recent hdf5 versions (fd4a438042)
Lee Newberg (1):
Bug Fixes
- MinPriorityQueueElementWrapper constructor needs default constructor (b027780259)
Matt McCormick (3):
Enhancements
- Update ITK CMake version for 5.1.2 (39d9b1712f)
- Add int.tiff.md5 content link for 5.1.2 release (a0125aa894)
Bug Fixes
- Add TIFFImageIO support for unsigned int and int pixel types (241953dd23)
Niels Dekker (1):
Bug Fixes
- Fix MatrixOffsetTransformBase SetFixedParameters if too few params (33e9e6bdba)
ITK 5.1.1
ITK 5.1.1 Release Notes
We are happy to announce the Insight Toolkit (ITK) 5.1.1! 🎉 ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
Python Packages
Install ITK Python packages with:
pip install itk
or:
conda -c conda-forge install itk
Library Sources
Testing Data
Unpack optional testing data in the same directory where the Library Source is unpacked.
Checksums
ITK 5.1.1 is a patch release that makes improvements to issues found in the 5.1.0 release. For more details on ITK 5.1, see the ITK 5.1.0 Release Notes.
This release improves support for ITK's use in the Dask distributed library for Python-based distributed computation, adds support for the GCC 9 and 10 compilers, improves CUDA FFT support, and numerous other fixes described in the changelog below. Thank you to everyone who contributed to the release.
What's Next
Join us in the creation of advanced, open source scientific image analysis tools. Take part in the community discussion at discourse.itk.org. Contribute with pull requests, code reviews, and issue discussions in our GitHub Organization.
Another patch release is planned before the next feature release.
Enjoy ITK!
Changes from 5.1.0 to 5.1.1
Antoine Robert (1):
Enhancements
- Use Numpy bridge with array of dimension 1 (caae21695f)
Bradley Lowekamp (14):
Enhancements
- Update GDCM to latest on the release-2.8 branch (90e6da1ff6)
Platform Fixes
- Add missing const qualifier (8c4d3da09d)
- Address missing brace initializer warning (14a8919dfd)
Bug Fixes
- Disable dynamic threading in noise filter. (af780e8a03)
- Add StatisticsImageFilter (43a8972077)
- Fix segfault with empty CompositeTransforms (0300b63ddf)
- Fix additional segmentation faults with empty Composite (7212dc719f)
- Address memory leak in CastSpatialOpbjectTest (a243e9d9af)
- Patch missing const qualifier to GDCM dircos_comp comparison (90ad651db4)
- Address bug with small size in output of SliceImageFilter (7aac4a6748)
- Update CI scripts from current ITK master (3213404416)
- update CircleCI configuration with selections from master (08dc0116fe)
- Don't use InsertElement which modifies MTime (63d148715e)
- Address buffer overflow with deprecated GDCM1 interface (5df152b4c3)
Bryn Lloyd (1):
Platform Fixes
- Fix warning in PointSetToPointSetMetricv4 (#1820) (567764e1ae)
Davis Vigneault (1):
Bug Fixes
- Fix Segfault in Delaunay Filter (e72fd012a4)
Dženan Zukić (9):
Enhancements
- use double-conversion's CMake targets (3ee6f1e5c9)
- back-porting #1165 to support Visual Studio 2019 (432dd1b9dc)
Documentation Updates
- restore LICENSE accidentally overwritten by a merge commit (ed2a25db2c)
Platform Fixes
- a fix for non-system double-conversion build (a47c974f64)
- update download location for pre-built ICU for Visual Studio (f360092423)
Style Changes
- make column limit more stringent in the examples (0b970d803d)
- apply clang-format (d9e73e9a8b)
- rename libPNG's license to match the original one (5012917fb4)
- remove duplicate item in a list (a8ba7686a5)
GDCM Upstream (1):
Miscellaneous Changes
Hans Johnson (1):
Bug Fixes
- Double scaling introduced in refactoring (355c6cbda3)
Jerome Schmid (1):
Platform Fixes
- VtkGlue module-Provide support for VTK new cmake targets (c2cfd2b6d1)
Jonathan Daniel (2):
Enhancements
- Added .vs to .gitignore (e4f20e2580)
Bug Fixes
- Accept TemplateTypeError with fallback_only (612a769660)
Marco Nolden (1):
Platform Fixes
- added vcl compiler detection for GCC 10.x (e53d1d94f0)
Matt McCormick (20):
Enhancements
- Bump CMakeLists.txt version to 4.13.3 (f7ac08b4c9)
- Add testing data content links for ITK 5.1.1 (866ee013a1)
- Update ITK CMake version for 5.1.1 (3ecf6c87d1)
Platform Fixes
- Duplicate ImageToImageFilter wrapping of ULL (e747b0a946)
- Avoid duplicate itk.PointSetD3 wrapping (bea2a7906e)
- Do not reference FE_DIVBYZERO FE_INVALID with Emscripten (b05b007a63)
- Add VXL support for GCC 9 (9825d546c4)
- Add lxml to macOS CI environment (1919eaa95b)
Bug Fixes
- Specify itk package in SWIG Python modules (98fc085a9d)
- Simplify itk.BlockMatchingImageFilter feature points PointSet mangling (2e2b3332cd)
- Import C module from Python submodule (a6a5140f4d)
- ITKModuleExternal CMAKE_LIBRARY_OUTPUT_DIRECTORY when wrapping (eb97b5aa4a)
- Wrap ExtractImageFilter for UL (972a89c228)
- Support casting unsigned long pixel types in Python (530e61eedf)
- Remove netnlib triangle classes (7f95961fa7)
- Remove License incompatible netlib files from vxl updates (d1066224e3)
- Empty image support in image_from_xarray (3da4926531)
- Add missing enumerate with multi-ndarray-output itk filters (c7595ff794)
- Do not wrap unsigned char for connected component output (f3e328657f)
Style Changes
- ITK_WRAP_PYTHON_PROCCESS to ITK_WRAP...
ITK 4.13.3
On behalf of the Insight Toolkit (ITK) Community, we are happy to announce the release of ITK 4.13.3! ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
Release files can be downloaded from
This purpose of this release is to provide updated compiler support as projects continue the transition to ITK 5. Only updated source code and testing data tarballs are provided in this release.
This release includes fixes for GCC 9, 10, Visual Studio 2019 and fixes in GDCM for improved DICOM support. For more details, please see the log below.
This is the last anticipated release in the ITK 4 series. Projects are encourage to migrate to ITK 5 following the migration guide.
Enjoy ITK!
ITK changes from v4.13.2 to v4.13.3:
Bradley Lowekamp (7):
BUG: Patch missing const qualifier to GDCM dircos_comp comparison
BUG: Address bug with small size in output of SliceImageFilter
BUG: Update CI scripts from current ITK master
ENH: Update GDCM to latest on the release-2.8 branch
BUG: update CircleCI configuration with selections from master
BUG: Don't use InsertElement which modifies MTime
BUG: Address buffer overflow with deprecated GDCM1 interface
Dženan Zukić (4):
ENH: use double-conversion's CMake targets
COMP: a fix for non-system double-conversion build
ENH: back-porting #1165 to support Visual Studio 2019
COMP: update download location for pre-built ICU for Visual Studio
GDCM Upstream (1):
GDCM 2019-11-04 (7e3be76f)
Jerome Schmid (1):
COMP: VtkGlue module-Provide support for VTK new cmake targets
Marco Nolden (1):
COMP: added vcl compiler detection for GCC 10.x
Matthew McCormick (3):
COMP: Prevent duplicate wrapping ouput file specification
COMP: Add VXL support for GCC 9
ENH: Bump CMakeLists.txt version to 4.13.3
ITK 5.1.0
We are happy to announce the Insight Toolkit (ITK) 5.1.0 release! 🎉 ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
ITK 5.1.0 is a feature release that improves and extends the major ITK 5.0 release. ITK 5.1.0 includes a NumPy and Xarray filter interface, clang-format enforced coding style, enhanced modern C++ range support, strongly-typed enum's, and much more.
A number of issues were addressed based on feedback from Release Candidate 3. Filters avoid extra copies when operating on NumPy arrays, and itk.Image
is now a NumPy array-like. Remote module CI testing infrastructure has been migrated to GitHub Actions for C++ tests, Python package builds, and automated Python package deployment.
Downloads
Python Packages
Install ITK Python packages with:
pip install --upgrade itk
or:
conda install -c conda-forge itk
Guide and Textbook
Library Sources
Testing Data
Unpack optional testing data in the same directory where the Library Source is unpacked.
Checksums
Features
Parabolic morphological filtering with the ITKParabolicMorphology remote module. To install the new Python package: pip install itk-parabolicmorphology
. Jupyter notebooks are provided as examples. For more information, see the Insight Journal article, Beare R. Morphology with parabolic structuring elements. The Insight Journal. January-June. 2008. http://www.insight-journal.org/browse/publication/228.
GitHub Actions for ITK Remote Module Testing, Packaging, PyPI Deployment
A GitHub Action configuration is available for ITK Remote Module continuous integration (CI) testing and Python packaging on Linux, macOS, and Windows. Continuous deployment (CD) is configured to upload packages to the Python Package Index (PyPI) when the repository is tagged. More information can be found in the ITK Python Package ReadTheDocs documentation.
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)
An itk.Image
is now more NumPy array-like: shape
, ndim
, and dtype
attributes are available; these correspond to the values when converted to a NumPy ndarray
. Basic NumPy functions can be called directly on an itk.Image
, i.e.,
min = np.min(image)
max = np.max(image)
mean = np.mean(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 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](https://...
ITK 5.1 Release Candidate 3
We are happy to announce the Insight Toolkit (ITK) 5.1 Release Candidate 3 is available for testing! 🎉 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
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 Citatio...
ITK 5.1 Release Candidate 2
ITK 5.1 Release Candidate 2
We are happy to announce the Insight Toolkit (ITK) 5.1 Release Candidate 2 is available for testing! 🎉 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.
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
An itk.Image
converted to an xarray.DataArray
. Xarray enables processing while preserving metadata, distributed computing with Dask, and machine learning with the scikit-learn API.
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
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:
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](https://www.insightsoftwareconsort...
ITK 5.1 Release Candidate 1
ITK 5.1 Release Candidate 1 Release Notes
We are happy to announce the Insight Toolkit (ITK) 5.1 Release Candidate 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 is a feature release that improves and extends the major ITK 5.0 release. ITK 5.1 includes a NumPy filter interface, clang-format enforced coding style, enhanced modern C++ range support, and much more.
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
Tomographic sphere reconstruction with the RTK remote module. Reproduce this result by installing the RTK Python packages, pip install itk-rtk
, and run the FirstReconstruction.py example.
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.
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)
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 are now follow a consistent <Description>Enum
naming conversion, which results in a Python interface:
<Description>Enum_<EnumValue1>
<Description>Enum_<EnumValue2>
[...]
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
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.
Congratulations
Congratulations and thank you to everyone who contributed to this release. Of the 50 authors, we would like to specially recognize the 20 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.
What's Next
As we work towards the next release candidate, we will improve strongly typed enum adoption in the toolkit, consistent with the soft commitment to backwards compatibility to address any potential API or architectual issues until the 5.1.0 release. 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.0.0
Aurélien Coussat (1):
ENH: wrap IterationReporter
Bradley Lowekamp (63):
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: Pre...