InsightSoftwareConsortium/ITK: ITK 5.4 Release Candidate 4: ALL THE DICOMs
Bibliographic record
Abstract
ITK 5.4 Release Candidate 4: ALL THE DICOMs We are happy to announce the Insight Toolkit (ITK) 5.4 Release Candidate 4 is available for testing! :tada: ITK is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration. 🔦 Highlights The Insight Toolkit (ITK) has further enhanced its DICOM capabilities in the latest release, building on over 25 years of extensive clinical usage and application. DICOM (Digital Imaging and Communications in Medicine) is a valuable standard handling, storing, printing, and transmitting information in medical imaging. It includes a wide range of medical data types and allows for various imaging modalities and workflow information, posing significant challenges due to its extensive support for diverse medical content and variations in vendor implementations and adherence to the standard. This release introduces expanded support for additional modality features and crucial spatial metadata for Secondary Capture images. ITK significantly improves the way medical imaging data is processed and interpreted and ensures robust support for diverse DICOM applications. The impact of spatial metadata handling on the NLM Visible Human cryomacrotome anatomic secondary capture images, available in the NIH Imaging Data Commons, when visualized in 3D Slicer. Left: before ITK v5.4rc04, Right: after. Screenshots courtesy Steve Pieper. The development of ITK's DICOM support is a testament to a robust community-driven effort involving ITK developers, maintainers from DICOM library projects such as GDCM and DCMTK, and curators of the DICOM standard. This release includes collaborative contributions from notable community members including Mikhail Isakov, Jon Haitz Legarreta Gorroño, Sean McBride, Martin Hoßbach, Mathieu Malaterre, Michael Onken, Steve Pieper, Andras Lasso, David Clunie, and Andrey Fedorov. This release candidate also expands on our support for elegant, performant, modern C++. For example, specializations of std::tuple_size and std::tuple_element for itk::ImageRegion in order to support C++17 structured bindings enable compile-time optimized statements to provide a multidimenional region's index and size: auto [index, size] = image.GetRequestedRegion(); For more information on ITK 5.4's modern C++ support, see the Release Candidate 1 release notes. Moreover, this release candidate extends the toolkit's sustainability and Python support through Stable ABI Python wheels. This is made possible by upgrades to SWIG and scikit-build-core, the modern Python packaging standard evolution of scikit-build classic. Python 3.11 wheels will be recognized by pip and work with Python 3.11, 3.12, 3.13, 3.14, etc. While we also provide cross-platform wheels for Python 3.8-3.10, we can only use the Stable ABI with Python 3.11 because it is required for itk's NumPy support. ITK Remote Modules now also have GitHub Action-driven mac ARM / Apple Silicon Python wheel generation support. While a Remote Module setup.py file is still supported in ITK 5.4, migration to a scikit-build-core pyproject.toml file is encouraged. One important advantage is the generation of Stable ABI wheels for Python 3.11+. To migrate to scikit-build-core, use this pyproject.toml template and remove the setup.py file. ITK 5.4 contains many additional improvements; highlights can be found below along with a more detailed changelog. For a summary of changes that continue our sustainability evolution with Web3 testing data, see the 5.4 Release Candidate 2 release notes. 💾 Download Python Packages Install ITK Python packages with: pip install --upgrade --pre itk Guide and Textbook InsightSoftwareGuide-Book1-5.4rc04.pdf InsightSoftwareGuide-Book2-5.4rc04.pdf Library Sources InsightToolkit-5.4rc04.tar.gz InsightToolkit-5.4rc04.zip Testing Data Unpack optional testing data in the same directory where the Library Source is unpacked. InsightData-5.4rc04.tar.gz InsightData-5.4rc04.zip Checksums MD5SUMS SHA512SUMS ✨ Features Python Wrapping for itk.PhasedArray3DSpecialCoordinatesImage Better support for multi-component images in image_from_vtk_image itk.imread supports a series_uid kwarg for DICOM series selection TBB version updated to latest stable version, disabled on Intel macOS Python binaries for 3.8-3.11 across platforms Python 3.11 uses the Stable ABI -- works with Python 3.11+ Python 3.7 is no longer supported Apple Silicon Remote Module GitHub Action wheels Updated to the latest version of scikit-build-core Import time improvements with torch C++ C++17 is now required Many style improvements for modern C++ and consistency GCC 13 support Name mangling prefix for third party libraries is configurable Update mangled 3rd-parties to use MANGLE_PREFIX CMake variable Many improvements to code coverage Enhanced NRRD and Nifti metadata support CMake OPTIONAL_COMPONENTS support Apply cmake-format for a consistent CMake style get() member function to itk::SmartPointer itk::Size::CalculateProductOfElements(), to compute number of pixels Deref(T *), to ease dereferencing a pointer safely itk::ShapedImageNeighborhoodRange support C-array of offsets (by C++17) Add itk::Copy(const T & original), which simply returns a copy Make itk::ImageRegion trivially copyable, remove inheritance (FUTURE) Performance Use index/point transforms without bounds checking Improved SSE2 detection Many improvements to how locks are handled Major itk::SpatialObject performance improvements Documentation New GitHub Action to check spelling Doxygen formatting cleanup Doxygen spelling fixes Doxygen Insight Journal links are consistent Many Doxygen improvements to the content Software Guide updated for style modernization Change the Insight Journal handle links to insight-journal links Replace itkTypeMacro with itkOverrideGetNameOfClassMacro Remote module updates New modules: FastBilateral - A Fast Approximation to the Bilateral Filter for ITK. Insight Journal article. Updated modules: BSplineGradient BoneMorphometry Cleaver Cuberille, CudaCommon FPFH GenericLabelInterpolator HASI HigherOrderAccurateGradient IOMeshSTL IOMeshSWC IOScanco LabelErodeDilate MeshToPolyData MinimalPathExtraction Montage MorphologicalContourInterpolation ParabolicMorphology RANSAC RLEImage RTK Shape SimpleITKFilters SplitComponents Strain TextureFeatures Thickness3D TubeTK Ultrasound VkFFTBackend WebAssemblyInterface Third party library updates dcmtk eigen gdcm googletest kwsys minc meta-io nifti pygccxml vxl zlib-ng 🙏 Congratulations Congratulations and thank you to everyone who contributed to this release. Of the 59 authors who contributed since v5.3.0, we would like to specially recognize the new contributors: Nicklas Larsson, huangjxbq, Sankhesh Jhaveri, adrinkwater, FabioLolix, Vaibhaw, Ningfei Li, Max Aehle, Noah Egnatis, Federico Zivolo, Patrick Linnane, LAURENDEAU Matthieu, Shreeraj Jadhav, Shengpeng YU, Fernando Bordignon, Andras Lasso, Bernhard Froehler, Thomas BAUDIER, Matthieu LAURENDEAU, Fabian Wenzel, Mikhail Polkovnikov, Pritam Rungta, Florian de Gaulejac, Ramon Emiliani, Martin Hoßbach, Sadhana Ravikumar, and Gabriel Chartrand. 🗣️ What's Next This is the final release candidate before v5.4.0. An issue following the tagging of v5.4rc03 predicated the publication of this release. Please try out the current release candidate, and discuss your experiences at discourse.itk.org. Contribute with pull requests, code reviews, and issue discussions in our GitHub Organization. Enjoy ITK! ITK Changes Since v5.4rc02 Andras Lasso (2): Enhancements Add GDCM test for 32 bits stored DICOM image (7e350ef7cd) Style Changes Simplify itkDCMTKImageIO (decc3e5977) Bernhard Froehler (1): Platform Fixes Add missing include (gcc13.2/clang17 build) (f871250c8d) Brad King (2): Enhancements Improve messages when ITKInternalEigen3 fails to configure (fd97c1034d) Platform Fixes Fix installation of ITKInternalEigen3 with space in path (278c398614) Bradley Lowekamp (4): Enhancements Add support for OPTIONAL_COMPONENTS (ee84d1eb91) Introduce constants for the default tolerances (4881cee2e1) Documentation Updates Clarify ThresholdImageFilter behavior (e67365a805) Bug Fixes Make JPEGImageIO const correct with m_FileName (dba496d0c3) Dave Chen (1): Enhancements Github Action to Spell Check Comments (4a04d8f308) Dženan Zukić (25): Enhancements Add ULL type to ConnectedComponentImageFilter wrapping (3b5f76486d) Add a 3D regression test for FillholeImageFilter (3d54107d0d) Update Montage remote module (46454a1b48) Fix problems introduced by the latest zlib-ng update (b760b020cf) Add CompositeTransform to DataObjectDecorator wrapping (5d1455035a) Update KWStyle to avoid a CMake warning during its configure step (f58ccd1565) Wrap DataObjectDecorator > (b6a6b6b524) Allow using std::vector in itkSetMacro and friends (71c5c83e10) Add IsSameImageGeometryAs convenience method to ImageBase (92f6d10219) Wrap AffineTransform for float parameters (02c0181098) FlatStructuringElement and ShapedNeighborhoodIterator Interop (bac09b0834) Add FastBilateral remote module (c9b15e5eec) Improve numerical precision of weighted centroid computation (db6114d322) Update remote modules using the script (858329745b) Switch MINC upstream branch from develop to master (4b0874b9d1) Documentation Updates Show that we can pass a list of images via Python wrapping (03f250ddd8) Remove commented-out GetAllCounts method declaration (959ad044e0) Platform Fixes Add ULL wrapping for ScanlineFilterCommon (9f54bb8bf2) Fix Warning for CMP0135 in remote modules (DownloadClangFormat) (7972041148) Address clang warnings in a remote module (9e8f6a473d) Update KWStyle to fix build warnings with MacOSX13.1.sdk (ef6faa3ccc) Fix compile error in
Fetched live from OpenAlex and de-inverted. Abstracts are not stored in this database: the inverted indexes are 8.6 GB of the frame’s 9.3 GB of text, and the host has 13 GB free.
How this classification was reachedexpand
Full frame machine prediction
Teacher imitationNot calibrated prevalence, not ground truth. Human validation pending. The Gemma side is a direct model label for every work in the frame, read from the title-only record. The Codex side is a classifier learned from the 10,348 direct Codex labels and calibrated to design-weighted sample rates; fields without enough sample support carry no Codex call. Candidate is the union of the two sides; consensus is their intersection. These outputs are machine_predicted_unvalidated and are not human labels.
Distilled classifier scores by category (both heads)
| Category | Codex | Gemma |
|---|---|---|
| Metaresearch | 0.006 | 0.023 |
| Meta-epidemiology (narrow) | 0.002 | 0.002 |
| Meta-epidemiology (broad) | 0.001 | 0.002 |
| Bibliometrics | 0.003 | 0.002 |
| Science and technology studies | 0.001 | 0.001 |
| Scholarly communication | 0.008 | 0.006 |
| Open science | 0.004 | 0.005 |
| Research integrity | 0.003 | 0.003 |
| Insufficient payload (model declined to judge) | 0.496 | 0.512 |
Machine scores (provisional)
The two teacher heads of the student model, read on this work. A score orders the frame for review; it never asserts a category, and the validation status ships verbatim with every row.
Baseline scores from an immature model (maturity gate not passed, 7 training rounds). Scores rank; they never assert a category.
score_only:v0-immature-baseline · verbatim from the scoring run: score_only means the number may rank works, and no category label ships from itClassification
machine, unvalidatedMachine predicted; a candidate call from one source (direct Gemma or distilled Codex), not a consensus.
How this classification was reached, model by model and score by score, is at the end of the page under "How this classification was reached".