ITK 5.4.6 Released: Performance, Stability, and Security

May 1, 2026

We are pleased to announce the release of ITK 5.4.6!

ITK 5.4.6 is a maintenance release focused on performance improvements, security fixes, and platform compatibility for this cross-platform, open-source toolkit supporting N-dimensional scientific image analysis with spatially-aware algorithms. Highlights include FFTW SIMD optimizations, a safer NumPy buffer protocol for itk.Image, GIL-release support for Python wrapping, a backport of the GDCM CVE-2026-3650 fix, and a wave of stability fixes spanning Bresenham line drawing, the Voronoi diagram generator, IPL image IO, image adaptors, and more. 🥳

🔦 Highlights

  • Performance:
    • FFTW SIMD codelets are now selected with ABI-guaranteed baselines (SSE/SSE2 on x86_64, NEON on aarch64), with optional per-CPU introspection at configure time for AVX/AVX2.
    • New ITK_PYTHON_RELEASE_GIL CMake option (ON by default) and SWIG -threads flag enable Python wrapping to release the GIL during ITK operations.
  • Bug Fixes:
    • Backport of the GDCM CVE-2026-3650 fix and a GDCM upstream sync (2026-03-10).
    • Integer-only Bresenham line construction and double-precision endpoint computation in BresenhamLine.
    • Fixed infinite loop in VoronoiDiagram2DGenerator::ConstructDiagram.
    • Null-check hardening in IPLCommonImageIO, value-initialization of singleton instances, zero-check guard in CumulativeGaussianCostFunction, and ImageAdaptor::ComputeOffset to fix ImageRegionIterator support.
    • GDCM posix_memalign undefined with MinGW, and Python factory auto-registration of more than two factories.
  • Python:
    • PEP 688 buffer protocol on itk.Image with safe np.asarray() lifetime semantics — arrays remain valid after the source image is deleted.
    • Comprehensive new tests for the buffer protocol and image lifetime across NumPy, PyTorch, and Dask interop.
  • Platform Support:
    • Migration of CI runners from retired windows-2019 to windows-2022, including the v142 toolset job and Azure Pipelines.
    • FFTW SIMD detection fix for Windows ARM64 and MSVC.
    • Move of inline = default destructors to .cxx for 30 exported classes to stabilize the ABI.
    • MINC third-party update (2025-02-24).

⚡ FFTW SIMD Performance

ITK 5.4.6 enables FFTW SIMD codelets out-of-the-box. On x86_64, SSE and SSE2 are enabled by default (ABI-guaranteed); on aarch64, NEON is enabled by default (mandatory in ARMv8). Native (non-cross) builds also probe the build host for AVX and AVX2 via __builtin_cpu_supports() so that codelets are turned on only for what the CPU supports. Each option is individually overridable via cache variables such as -DFFTW_ENABLE_AVX2=OFF. On Apple M4 hardware, this reduced BCDTest_rVN4 from ~1446 s to an estimated ~180-360 s.

🐍 Safer NumPy Interop for itk.Image

itk.Image now exports its buffer through PEP 688 (__buffer__, Python 3.12+) and the NumPy v3 __array_interface__ (Python 3.10-3.11), with explicit reference pinning so that arrays derived from an image stay valid even after the image is garbage-collected:

image = itk.imread("brain.nii.gz")
arr = np.asarray(image)
del image
print(arr[1, 1, 1])  # safe — no crash

The new ITK_PYTHON_RELEASE_GIL CMake option (default ON) and SWIG -threads flag allow ITK calls to release the GIL, improving concurrency for Python users.

Leave a Reply