1ITK 5.0.0 Release Notes
2=======================
3
4We are happy to announce the Insight Toolkit (ITK) 5.0.0! :tada: ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration.
5
6ITK 5.0.0 is a major release that features an incredible number of improvements: This includes major enhancement in the development process, major code refactoring, addition of important features, improvement of ITK Python wrapping, and more.
7
8**Python Packages**
9
10ITK Python packages can be installed by running:
11
12```
13pip install itk
14```
15
16or to install the conda package, run:
17
18```
19conda install -c conda-forge itk
20```
21
22**Software Guide**
23
24- [Book 1](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/InsightSoftwareGuide-Book1-5.0.0.pdf)
25- [Book 2](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/InsightSoftwareGuide-Book2-5.0.0.pdf)
26
27**Library Sources**
28
29- [InsightToolkit-5.0.0.tar.gz](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/InsightToolkit-5.0.0.tar.gz)
30- [InsightToolkit-5.0.0.zip](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/InsightToolkit-5.0.0.zip)
31
32**Testing Data**
33
34Unpack optional testing data in the same directory where the Library Source is unpacked.
35
36- [InsightData-5.0.0.tar.gz](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/InsightData-5.0.0.tar.gz)
37- [InsightData-5.0.0.zip](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/InsightData-5.0.0.zip)
38
39**Checksums**
40
41- [MD5SUMS](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/MD5SUMS)
42- [SHA512SUMS](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0.0/SHA512SUMS)
43
44
45
46**ITK on GitHub**
47
48An important step has been taken to faciliate participation of the community in the development of ITK: The official repository was moved to GitHub! This move includes [ITK's main repository](https://github.com/InsightSoftwareConsortium/ITK), as well as many other ITK projects such as the [ITKExamples](https://github.com/InsightSoftwareConsortium/ITKExamples), and many [ITK remote modules](https://github.com/InsightSoftwareConsortium). It is now very easy for anyone to participate in the development of the library. This has already been a success with many new authors getting involved and submitting patches through the GitHub pull-request mechanism. This change also includes moving the issue tracker to the [GitHub issue tracker](https://github.com/InsightSoftwareConsortium/ITK/issues) where any problem encountered with ITK should be reported. ITK's GitHub migration was explained in more detail in [ITK 5.0 Beta 3: GitHub](https://discourse.itk.org/t/itk-5-0-beta-3-github/1504). Finally, moving ITK to GitHub made it straightforward to use Microsoft Azure Pipeline Continuous Integration platform: Each pull-request is tested on all 3 major platforms (Windows, Linux, MacOS) and Python builds can be requested to ensure that a patch can be integrated.
49
50**C++11**
51
52Major C++ code refactoring brought dramatic improvements to ITK's API and performance (see [ITK 5.0 Alpha 1: Modern C++](https://discourse.itk.org/t/itk-5-0-alpha-1-modern-c/843) for more details). ITK now uses the C\++11 standard allowing the developers full access to its new powerful features such as range-based loops, constexpr, lambda expressions, and uniform initialization syntax. Using C++ 11 also removes the necessity of many ITK macros (e.g. `ITK_NULLPTR`, `ITK_DELETED_FUNCTION`) which have equivalents in the new standard. This also leads to changes in style to match the C++ 11 best practices. This includes replacing `typedef` calls with the `using` keyword to improve source code readability. ITK's C++ code is easier to read, understand, and maintain!
53
54**Thread Pool**
55
56This new release of ITK also integrates big performance improvements thanks to the refactoring of the multithreading infrastructure with a thread pool available by default, and the possible usage of the Intel Threading Building Blocks (TBB) threading backend (see [ITK 5.0 Alpha 2: Performance](https://discourse.itk.org/t/itk-5-0-alpha-2-performance/959) for benchmarks).
57
58**Spatial Objects**
59
60Additionally, a major upgrade of the ITK Spatial Object framework, which provides a representation of objects and the mechanism to specify their spatial relationship relative to other objects in a scene, was integrated in this new version of ITK. The new code improves consistency in the programming interface and simplifies implementation and usage (more details in [ITK 5.0 Release Candidate 2: Spatial Object’s](https://blog.kitware.com/itk-5-0-release-candidate-2-spatial-objects).
61
62**Ranges**
63
64ITK 5.0 has a new [Experimental namespace](https://itk.org/Doxygen/html/namespaceitk_1_1Experimental.html). This namespace includes three _range_ class templates, `ShapedImageNeighborhoodRange`, `IndexRange`, and `ImageBufferRange`, to iterate efficiently over a neighborhood of pixels, the indices of an image region, and the pixels of an image buffer, respectively. These ranges can be used in a C++11 range-base for-loop. Their `begin()` and `end()` can be passed directly to an `std` algorithm.
65
66**New Features**
67
68Other new features in this ITK release include new algorithms, better mesh support (see [ITK 5.0 Release Candidate 1: Meshes](https://discourse.itk.org/t/itk-5-0-release-candidate-1-meshes/1576)), new global variable model using one singleton, and better streaming capabilities.
69
70**Third Party Libraries**
71
72Eigen, a C++ library for linear algebra, was integrated in ITK and gradual transition from VXL to Eigen for Linear algebra is planned. Many third party libraries were updated: VNL, DCMTK, GDCM, HDF5, KWSys, MetaIO, Zlib, GIFTI, nifti, pygccxml.
73
74**Remote Modules**
75
76Remote modules, which allow easy integration of new image processing algorithm in ITK, were updated and new Python packages compatible with this new release of ITK were created. Four new remote modules were also added to ITK: PhaseSymmetry, IOOpenSlide, Montage, and BSplineGradient (description of the modules in [ITK 5.0 Beta 3: GitHub](https://discourse.itk.org/t/itk-5-0-beta-3-github/1504)).
77
78**Python**
79
80Traditionally, ITK in Python had to be used through an object-oriented interface. In this new release, we have added a functional interface which is more Pythonic and should be more familiar to Python programmers. Examples on how to use this new procedural interface are available in  [ITK 5.0 Beta 1: Pythonic Interface](https://discourse.itk.org/t/itk-5-0-beta-1-pythonic-interface/1271).
81
82**Congratulations**
83
84Congratulations and thank you to everyone who contributed to this release. Of the 49 authors, we would like to specially recognize the new contributors, Isaiah Norton, maekclena, Rashad Kanavath, Bai Shi, Hui Xie, Martino Pilia, Ally Warner, pierre33, Chao Wu, Gregory C. Sharp, Bryce A Besler, Kwame Kutten, Mihail Isakov, Jerome Schmid, Roman Grothausmann, Alexis Girault, Gabriel A. Devenyi, Marian Klymov, Thomas Janvier, and Forrest Li.
85
86**Migration to ITKv5**
87
88The [ITK 5 Migration Guide](https://github.com/InsightSoftwareConsortium/ITK/blob/master/Documentation/ITK5MigrationGuide.md) is available to help transition a code base from ITK 4 to ITK 5. Please discuss your experiences on [Discourse](https://discourse.itk.org).
89
90What's Next
91-----------
92
93Join us in the creation of advanced, open source scientific image analysis tools. Get started with the [ITK examples](https://itk.org/ITKExamples/). Take part in the community discussion at [discourse.itk.org](https://discourse.itk.org). Contribute with pull requests, code reviews, and issue discussions in our [GitHub Organization](https://github.com/InsightSoftwareConsortium).
94
95We have a soft commitment to backwards compatibility to address any potential API or architectual issues until the [next feature release](https://github.com/InsightSoftwareConsortium/ITK/milestone/6). Stay tuned for upcoming announcements on ITK's integration with modern web technologies and improved support for Remote Module development on GitHub.
96
97**Enjoy ITK!**
98
99Changes from 5.0 RC 2 to 5.0.0
100------------------------------
101
102```
103Alexis Girault @agirault (4):
104      ENH: Compare images converted from and to VTK in ITKVtkGlue tests
105      ENH: Pass directions in VTKImage import/export classes
106      ENH: Throw exception when necessary while importing a vtk image
107      BUG: Ignore calls to the direction APIs in VTK if lower than 8.90
108
109Bradley Lowekamp @blowekamp (46):
110      COMP: Address const char[] conversation warning
111      BUG: Fix leaking PNGIO resources during exception
112      BUG: Remove redundent fclose on PNG file pointer
113      ENH: Add Valgrind suppression file for Ubuntu 18.04 LTS
114      BUG: Update FEM test for new spatial objects
115      COMP: Correct continuous index type
116      BUG: Address valgrid defects related to the PointSpatialObject
117      BUG: Fix ownership of environment variable value
118      BUG: Fix leak in SpatialObject InternalClone method
119      ENH: Update a couple example to use the resample instead of warp
120      BUG: Set all component of 3D points
121      BUG: Add named output support to StreamingImageFilter
122      ENH: Deprecate VectorResampleImageFilter
123      ENH: Consolidating setting compression level interface to ImageIOBase
124      ENH: Implement InternalSetCompressor method in ImageIOs
125      DOC: Add compression documentation to ImageIOs
126      ENH: Use the empty string "" for the default compressor
127      ENH: Add compression level support to NRRD IO
128      ENH: Improve TIFF ImageIO compression testing
129      ENH: Add base class for generic streaming processes
130      ENH: Add ImageSink base filter class
131      ENH: Use streaming base class for LabelStatisticsImageFilter
132      ENH: Use named input in LabelStatisticsImageFilter
133      ENH: Add streaming support to StatisticsImageFilter
134      ENH: Add testing for streaming with StatisticsImageFilter
135      ENH: Remove output image, use standard decorator macros
136      ENH: Refactor min/max filter to use ImageSink
137      ENH: Add ImageSink::VerifyInputInformation
138      ENH: Add KWStyle override for ImageStatistics module
139      ENH: Use streaming sink base class for image to histogram filters
140      ENH: Deprecate ImageTransformer class
141      BUG: Update NormalizeImageFilter with double graft mini-pipeline
142      DOC: statistics filter changes for ITKv5
143      ENH: Add Python wrapping for streaming base classes
144      ENH: Add streaming testing of label statistics filter
145      COMP: Move deprecated VectorCastImageFilter wrapping to deprecated
146      BUG: Fix path for Brain Web data
147      BUG: Correct StreamingProcessObject's progress computation
148      STYLE: prefer variable-less catch re-throw
149      BUG: Set current request number back to -1 after stream execution
150      ENH: Expose streaming methods in MinimumMaximumImageFilter
151      ENH: Add streaming testing for min max filter
152      ENH: replace RGB adaptor with directly using CastImageFilter
153      ENH: Add cast support for per component conversion
154      ENH: Mark the Cast functor to be remove with legacy code
155      DOC: Update documentation for streaming statistics filters.
156
157Dženan Zukić @dzenanz (25):
158      ENH: make ITK_MAX_THREADS configurable
159      BUG: fix threading test bugs when ITK_DEFAULT_MAX_THREADS is over 256
160      COMP: compile GPU classes with legacies disabled
161      COMP: removing extraneous DLL specification from private member
162      COMP: follow-up on recent removal of METAIO_STL macro
163      COMP: add missing dependent module for ITKv3 examples
164      COMP: ResampleImageFilter does not have SetDisplacementField method
165      ENH: reduce default compression level for much faster compression
166      BUG: compression was accidentally disabled in NrrdImageIO
167      COMP: compile in ITK
168      STYLE: move ivar default values to header file
169      ENH: expose setting compression level in ImageFileWriter
170      ENH: expose compression level in MetaImageIO
171      BUG: the clang version check was overly strict on Apple platforms
172      COMP: fix build failures introduced by c76b193 (#886)
173      ENH: cleaning up tests which are almost exact duplicates from MetaIO
174      ENH: updating remote modules
175      COMP: fix warning: 'return' will never be executed
176      COMP: fix export specification of Barrier class
177      COMP: follow up to 814419a (bounding box m_CornersContainer removal)
178      ENH: LevelSetsv4Visualization has moved to remote module ITKVtkGlue
179      ENH: run large image IO tests serially
180      ENH: enabling ResampleImage streaming test and updating baselines
181      ENH: enabling ResampleImage streaming test and updating baselines
182      ENH: exclude Eigen3 from the list of default modules
183
184Francois Budin @fbudin69500 (19):
185      ENH: Add `fallback_only` parameter to `imread()` Python function
186      ENH: Add suffix to Azure build running gcov to differentiate them
187      STYLE: Add display name to checkout step in AzurePipelineBatch.yml
188      ENH: Add JUnit test formatter to AzurePipelinesBatch.yml
189      STYLE: Add badge for Azure pipeline Linux code coverage build
190      ENH: Warning when trying to open in Python an image file that doesn't exist
191      BUG: Missing `ci_addons` to convert ctest results to JUnit format
192      BUG: Disable itkObjectFactoryBasePrivateDestructor test with -static link flag
193      ENH: Add Python function to print Python class name corresponding to C++ class
194      ENH: Python ImageFileReader error message improvement
195      ENH: Warning when trying to open in Python an image file that doesn't exist
196      ENH: Follow up commit to fix itkBoundingBox with LEGACY support
197      ENH: Follow up commit to fix itkBoundingBox with LEGACY support
198      BUG: std::list of `LineSpatialObject` needs to be wrapped
199      BUG: ITK could not find Eigen3::Eigen target when using system Eigen
200      BUG: Revert changing call to `Initialize()` with `clear()`
201      BUG: Corner positions were inserted at the end of a list that was initialized
202      BUG: Enforces consistent types
203      BUG: Remote modules Python files (*.so, *.py) were built in the wrong folder
204
205GDCM Upstream (1):
206      GDCM 2019-05-16 (e405908e)
207
208Hans J. Johnson @hjmjohnson (20):
209      BUG: Usage name did not match file name.
210      STYLE: Minor indentation improvements.
211      ENH: Enable ITKV3_COMPATIBILITY option
212      STYLE: Remove outdated python examples
213      STYLE: Syncronize changes between RegistrationITKv[34]
214      STYLE: Remove RegistrationITKv3 duplicate examples
215      ENH: Remove ITKV3_COMPATIBILITY support from ITKv5.0
216      STYLE: Move deprecated Examples/RegistrationITKv3 to test
217      BUG: Explicit RegisterRequiredFactories needed as test
218      STYLE: Remove Software Guide tags from ITKv3 testing
219      DOC: Make use of checkboxes consistent with github
220      ENH: Add cmake override for GIT_TAG of remote modules
221      STYLE: Remove custom environmental override for WikiExamples
222      DOC: Fix spelling errors
223      ENH: Identify histogram min/max for UseSampledPointSet
224      BUG: itkConfigure.h defines ITK_DEFAULT_MAX_THREADS
225      COMP: Remove unused static variable warning
226      DOC: Remove documentation references to VectorResampleImageFilter
227      DOC: Remove VectorCastImage documentation references
228      ENH: Changes required for ITKv5 compatibility
229
230Jon Haitz Legarreta Gorroño @jhlegarreta (4):
231      STYLE: Remove tab.
232      DOC: Improve remote modules' maintenance scripts documentation
233      ENH: Add a script to apply another script to all remotes
234      DOC: Modify the CoC breach reporting procedure
235
236Mathieu Malaterre @malaterre (3):
237      STYLE: Teach git about GDCM oversize file
238      BUG: Do not include COPYING from a non existing directory
239      DOC: Fix old reference to Image Number
240
241Matthew McCormick @thewtex (23):
242      COMP: Wrap functions for WindowedSincInterpolateImageFunction
243      COMP: Wrapping windowed sinc function includes
244      COMP: Update for changes to VTK target names
245      DOC: Improve ease of release note command execution
246      DOC: Document generation of MD5SUMS and SHA512SUMS files for releases
247      DOC: Add More Information section to CONTRIBUTING
248      DOC: Add ITK 5.0 RC 2 release notes
249      BUG: PythonFindEmptyClasses test for windowed-sinc functions
250      BUG: Prevent ITKMesh README.md from installation as header
251      BUG: Fix identification of Clang major version
252      COMP: ImageMaskSpatialObjectGTest array initialization
253      COMP: ImageMaskSpatialObjectGTest add braces for initialization
254      ENH: Expand ResampleImageFilter requested region by interpolator domain
255      STYLE: Use typename instead of class in ImageSink
256      STYLE: override methods should not be marked virtual
257      BUG: ImageSink defines UpdateLargestPossibleRegion
258      STYLE: StreamingProcessingObject passing void with no arguments
259      BUG: {MinimumMaximum,StatisticsImageFilter} set PrimaryOutputName
260      BUG: Remove MinimumMaximumImageFilter from module2module test pipeline
261      BUG: InterpolateImageFunction::GetRadius hidden in ITKV4_COMPATIBILITY
262      BUG: Condition Eigen export code on ITK_BINARY_DIR
263      BUG: Fix ITKv3 registration test names for property setting
264      BUG: Remove CTEST_TEST_TIME debug message
265
266MetaIO Maintainers (5):
267      MetaIO 2019-05-03 (7e16abe1)
268      MetaIO 2019-05-08 (dd5089a2)
269      MetaIO 2019-05-15 (bffb2ef1)
270      MetaIO 2019-05-16 (5010ab63)
271      MetaIO 2019-05-21 (368213e5)
272
273Niels Dekker @N-Dekker (21):
274      ENH: Add std style reverse iterators to FixedArray
275      ENH: Add ImageMaskSpatialObject::ComputeMyBoundingBoxInIndexSpace()
276      STYLE: SpatialObject() = default, const BoundingBox, Transform members
277      ENH: Added tests for ImageMaskSpatialObject::IsInside
278      ENH: Test ImageMaskSpatialObject::IsInside independent of distant pixels
279      BUG: Fix issue #785 removing BoundingBox check from ImageMask IsInside
280      PERF: Overload SpatialObject IsInsideInObjectSpace without name argument
281      BUG: Half a pixel margin ImageMaskSpatialObject::ComputeMyBoundingBox()
282      STYLE: Deprecated FixedArray member functions rBegin() and rEnd()
283      STYLE: Replace std::swap_ranges by C++11 std::swap of m_InternalArray
284      DOC: Use the term "object space" for ObjectSpace based member functions
285      STYLE: Replace unsigned short by unsigned int as FixedArray index type
286      STYLE: Explicitly defaulted default-constructors Vector Accessor classes
287      STYLE: Ensure that ContinuousIndex TCoordRep is a floating point type
288      ENH: Convenience overloads for ImageBase Transform member functions
289      ENH: Add NumberOfCorners and ComputeCorners() to BoundingBox
290      STYLE: Remove (deprecate) BoundingBox::GetCorners() + m_CornersContainer
291      COMP: Fixed GCC4 missing-field-initializers warning on `{}` in GTest
292      DOC: Fixed Doxygen description BoundingBox Get member functions
293      DOC: Fixed Doxygen description BoundingBox Get member functions
294      STYLE: Rename ITK macro EXPECT_VECTOR_NEAR to ITK_EXPECT_VECTOR_NEAR
295
296Roman Grothausmann @romangrothausmann (1):
297      ENH: Bump remote module ParabolicMorphology
298
299Simon Rit @SimonRit (4):
300      COMP: remove MSVC 14 C4800 (performance) warnings with FFTW
301      COMP: remove unused parameter warning with GCC 4.8.5
302      COMP: fix wrong GDCM library names for open jpeg
303      ENH: update RTK remote file with release tag v2.0.1
304
305VXL Maintainers (1):
306      VNL 2019-05-08 (99697e67)
307
308@maekclena (8):
309      ENH: Update compiler macros (#810)
310      BUG: Remove error prone test case
311      BUG: Fix reverse iterator increment return type
312      ENH: Add iterator increment operator return value test
313      BUG: Minor python wrapping fixes
314      ENH: Remove duplicate code
315      ENH: Use ResampleImageFilter for vectors
316      ENH: Deprecate VectorCastImageFilter (#870)
317```
318