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