ITK 5.4.6 Released: Performance, Stability, and Security
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_GILCMake option (ON by default) and SWIG-threadsflag 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 inCumulativeGaussianCostFunction, andImageAdaptor::ComputeOffsetto fixImageRegionIteratorsupport. - GDCM
posix_memalignundefined with MinGW, and Python factory auto-registration of more than two factories.
- Python:
- PEP 688 buffer protocol on
itk.Imagewith safenp.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.
- PEP 688 buffer protocol on
- Platform Support:
- Migration of CI runners from retired
windows-2019towindows-2022, including the v142 toolset job and Azure Pipelines. - FFTW SIMD detection fix for Windows ARM64 and MSVC.
- Move of inline
= defaultdestructors to.cxxfor 30 exported classes to stabilize the ABI. - MINC third-party update (2025-02-24).
- Migration of CI runners from retired
⚡ 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.