github InsightSoftwareConsortium/ITK v5.4.7
ITK 5.4.7 Release Notes: Expanded Image IO, Faster DTI, and Reliable Builds

2 hours ago

We are pleased to announce the release of ITK 5.4.7!

ITK 5.4.7 is a maintenance release focused on image IO capabilities, computational performance, build reliability, and packaging resilience for this cross-platform, open-source toolkit supporting N-dimensional scientific image analysis with spatially-aware algorithms. Highlights include 5D NRRD support, 32-bit integer TIFF read and write support, and substantially faster diffusion tensor reconstruction. ITK Python packages now use the Pool thread backend by default instead of TBB, which is better tuned for most workloads. 🥳

🔦 Highlights

  • Performance:
    • DiffusionTensor3DReconstructionImageFilter now computes its constant tensor-basis SVD once instead of once per voxel, replacing repeated decompositions with a matrix-vector product in the voxel loop.
    • ITK Python packages now default to the Pool thread backend. TBB support remains available, but Pool provides better performance for most workloads without workload-specific TBB tuning.
  • Image IO:
    • NRRD IO can now read and write 5D datasets with multiple non-spatial axes, including time sequences of 3D vector, velocity, and color images.
    • TIFF IO now reads and writes signed and unsigned 32-bit integer images in both 2D and multi-page 3D files.
    • ImageFileReader now safely augments short spatial direction vectors when an IO backend exposes additional non-spatial dimensions.
  • Build and Platform Support:
    • Single-precision-only FFTW builds are fixed across include paths, factory registration, 1D FFT tests, and double-only curvature registration.
    • Ccache-backed Pixi, GitHub Actions, Azure Pipelines, and macOS ARM workflows improve CI turnaround and cache management.
    • CastXML wrapping now handles extended -march and -mtune values containing ., +, and -, including ARM feature strings.
    • VXL configuration supports C17 and C23 when using CMake 3.21 or newer.
  • Reliability:
    • System TIFF detection on MSVC now uses symbol detection instead of a type-size check, avoiding Windows crashes.
    • GDCM and DCMTK build integration was updated for modern target namespaces and output-directory handling, including a fix for reconfiguration attempts that wrote libraries to /bin.
    • SWIG and PCRE archives are available through direct-file IPFS CIDs and multiple content-addressed mirrors.

⚡ Faster Diffusion Tensor Reconstruction

DiffusionTensor3DReconstructionImageFilter previously constructed an SVD of the same constant tensor basis for every voxel. For a 256 × 256 × 256 diffusion-weighted image, that could mean roughly 16.7 million identical decompositions.

ITK 5.4.7 computes the pseudo-inverse once in BeforeThreadedGenerateData() and applies it as a matrix-vector product for each voxel. The reconstructed tensors are unchanged, while the inner loop no longer invokes the thread-unsafe Netlib dsvdc routine. A new test also covers the single-VectorImage input path and verifies that it agrees with the existing multi-image gradient path.

🐍 Python Wrapping Defaults to the Pool Thread Backend

The ITK Python wheel builds now set ITK_DEFAULT_THREAD_BACKEND=Pool. TBB remains enabled and can still be selected explicitly, but its performance can depend strongly on work-unit and workload tuning. Pool is better tuned for most ITK workloads and avoids performance regressions observed in registration pipelines such as ITKElastix.

This default is also consistent with the libitk conda-forge build configuration. See the related ITKElastix performance report.

🧭 Richer N-D Image IO

NRRD IO now supports general 5D arrays with two or three spatial dimensions, scalar or vector pixels, and an optional list axis. Applications can use the new UseNonListRangeAxisAsPixel strategy so that a list axis, such as time, remains an image dimension while another non-spatial axis represents pixel components. Axis kinds, labels, and units are now preserved for spatial and non-spatial axes.

TIFF IO now handles uint32 and int32 pixels for reading and writing, including multi-page volumes. Round-trip tests exercise values beyond the 16-bit range and verify both on-disk component types and full-fidelity pixel values.

💾 Download

Python Packages

Install ITK Python packages with:

pip install --upgrade itk

Guide and Textbook

Library Sources

Testing Data

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

Checksums and Signatures

🙏 Acknowledgments

Thank you to contributors Andras Lasso, Bradley Lowekamp, Csaba Pinter, Hans J. Johnson, James Butler, Matt McCormick, and the broader ITK community for their code, testing, review, and documentation efforts.


🗣️ What's Next

ITK 6 Release Candidate

Following the ITK 6 alpha and beta releases, the ITK 6 release-candidate phase is coming. ITK 6 advances the toolkit with:

  • Architectural upgrades for contemporary C++ development
  • Enhanced template metaprogramming capabilities
  • Code modernization for improved readability and maintainability
  • A modernized Python platform and wrapping foundation
itk-monthly-commit-volume-posts-agents-md-small

ITK repository commit activity since the adoption of agentic engineering practices, lead by Hans Johnson. Many improvements that lingered for years are coming in ITK 6.

5.4 Maintenance Commitment

We remain dedicated to supporting current users through:

  • Regular security and regression patches
  • Critical bug resolution
  • Platform compatibility updates

Enjoy ITK!


ITK Changes Since v5.4.6

Andras Lasso (1):

Bug Fixes

  • Fix image file reader crash when axis direction vector is short (767cef7022)

Bradley Lowekamp (3):

Enhancements

  • Conform GDCM to use modern CMAKE_*_OUTPUT_DIRECTORY variables (606985ec77)

Bug Fixes

  • Use check_symbol_exists for TIFFFieldReadCount detection (811e72e41f)
  • Replace ambiguous std::abs<double> with std::fabs (6bddd5386d)

Csaba Pinter (1):

Enhancements

Hans J. Johnson (15):

Enhancements

  • Add a single-image-path test for DTI tensor reconstruction (ee656f3d61)

Performance

  • Hoist constant tensor-basis SVD out of the per-voxel DTI loop (ccee041e68)
  • Add ccache support and Pixi CI tasks to release-5.4 (4fdb4e59f8)
  • Use Pixi CI tasks and cache ccache in the release-5.4 Pixi workflow (bd73d04548)
  • Add ccache caching to release-5.4 Azure Pipelines (ee682ce034)
  • Add ccache caching to the release-5.4 macOS ARM workflow (25dbd451e9)

Bug Fixes

  • Allow ., +, and - in the -march/-mtune strip regex (a6522f6244)
  • Set FFTW_INCLUDE from FFTW3f_INCLUDE_DIRS in FFTWF-only builds (c8eb734e83)
  • Register FFTW factories only for configured precisions (07cab31ad4)
  • Make 1D FFT tests build with single-precision FFTW (b5a78a5046)
  • Fix GDCM reconfiguration writing libraries to /bin (aa722e4c7c)

Platform Fixes

  • Backport GitHub Actions cache-management workflows to release-5.4 (8308c69de9)
  • Include fftw3.h directly in FFTW filter headers (8f8610c2fe)
  • Restrict CurvatureRegistrationFilter to ITK_USE_FFTWD builds (2477dcc8ef)
  • Drop legacy EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH use in GDCM (4aec5d1399)

James Butler (1):

Platform Fixes

  • Update DCMTK targets for the new DCMTK namespace (83a1c530ad)

Matt McCormick (5):

Enhancements

  • Serve SWIG and PCRE archives through direct-file IPFS CIDs (fd2f212e31)
  • Bump ITK version to 5.4.7 (4c49df934c)

Bug Fixes

  • Support reading and writing 32-bit integer TIFF images (1347b4eb85)

Platform Fixes

  • Support C17 and C23 standards in VXL and remove an obsolete VCL iterator test (1e04b653d9)

Style

  • Format the SwigInterface CMakeLists.txt with gersemi (e7c9b1ef5e)

ITK Python Package Changes

Matt McCormick (1):

Performance

  • Set the default thread backend to Pool while retaining TBB support (4159ac5485)

Don't miss a new ITK release

NewReleases is sending notifications on new releases.