Slicer 4.8: Summary, Highlights and Changelog


(Jean Christophe Fillion Robin) #1

Table of Contents

Summary

The community of 3D Slicer developers is proud to announce that version 4.8 is now available for download. This version introduces close to 1,000 feature enhancements and bug fixes for better performance and stability. It includes more than 15 new-and-improved core modules and dozens of updated extensions.

The development of 3D Slicer—including its numerous modules, extensions, datasets, pull requests, patches, issues reports, suggestions—is made possible by users, developers, contributors and commercial partners around the world. This development is funded by various grants and agencies. For more details, please see the 3D Slicer Acknowledgments page.

slicer.org is the portal to the application, training materials, and the development community.

The Slicer Training page provides a series of tutorials and data sets for training in the use of Slicer.

Please note that Slicer continues to be a research package and is not intended for clinical use. Testing of functionality is an ongoing activity with high priority, however, some features of Slicer are not fully tested.

Highlights

Slicer 4.8 highlights are:

  • Simpler Data module integrating the Subject Hierarchy.

  • Segmentations module improvements including addition of new effects like Grow from seeds, Fill between slices, Surface cut, Mask Volume, Watershed, Fast marching and Flood Filling.

  • Improvements to slice viewers including better crosshair usability and support for slice model projection.

  • Support for Volumetric Meshes.

  • DICOM support improvements including supports for definition of semantic meanings and faster imports.

  • Transforms module improvements including support for interactively updating transform in the 3D view and visualization of displacements of individual points.

  • Support for fast and interactive plotting using VTK Charts.

  • More than 15 new and improved core modules.

  • Dozens of new and improved extensions.

  • Transition from mailing list to Slicer discourse forum.

Changelog

Core

  • Features:

    • Add volumetric mesh support in vtkMRMLModelNode.

    • Interactive plotting

    • Crosshair

      • Improve crosshair usability adding display in 3D view.

      • Add centered slice jump crosshair behavior.

      • Crosshair position is only synchronized between view in the same ViewGroup

    • Models

      • Add option to display model projected to slice (not just display intersection).

      • Add distance-based coloring option to model slice projection display. (different color based on which side of the slice the model is and how far)

    • Colors:

      • Adding support for “diverging colormap” and perceptually uniform colormaps.
    • Change default DTI glyph type to line which is faster & clearer for normal use.

    • Slice viewer

      • Add slice view zoom in/out using Ctrl+MouseWheel.

      • Add opacity setting for 2D slice intersections.

      • Slice intersection is only shown for slice views in the same ViewGroup

      • Improve slice viewer WW/WL and adjustment: if mouse is moved too far into one direction WW/WL values only follow it until they are still in the volume’s range (therefore it is easier to restore the values to a valid range).

      • Auto-select background/foreground volume for W/L change in slice viewer: adjust the WW/WL of the volume visible in the clicked position (if both foreground and background volume is visible then adjust foreground volume’s). Makes it easier to change W/L of the intended volume (no need to swap foreground/background volume, less chance of accidentally modifying another volume)

    • Command Line Module

      • Added CLI output display to module widget: Error are shown automatically in the module GUI, user can slick on expand button (next to the status message) to see detailed log of the execution.
  • Fixes / Performances:

    • Increase overall robustness of the application: Fix heap corruption errors, fix memory leaks, fix MRML node circular references, improve error checking (e.g catch ITK exceptions when unable to read images).

    • Slice viewer:

      • Improve slice browsing speed when slice annotations shown.

      • Fix incorrect scaling of Dash2D and Cross2D markups.

      • Fix slice spacing computation: When a slice axis is not aligned with a volume axis then slice spacing is computed using elliptical interpolation.

      • Fix slice bounds for volumes not RAS aligned

      • Snap slice views to slice center after rotate to volume plane.

      • Center view button now update clipping planes.

      • Fix handling of annotation 2D coordinates by adding 1 pixel offset in ConvertDeviceToXYZ().

      • Fix setting of slice viewer offset.

    • Colors:

      • Fixed color table editing.
    • 3D viewer:

      • Fix picking of markups in 3D view.

      • Exclude crosshair from 3D field of view computation.

    • Reformat:

      • Improve robustness of auto-rotate slice to camera normal.
    • Extension Manager:

      • Fix extension manager crash with dark theme.
    • DataProbe:

      • Fix DataProbe when slicer starts up with a chart in the layout.
    • Environment management:

      • Application environment is now consistently managed across all platforms by reading associated settings from human-readable configuration file. It internally relies on CTKAppLauncher. See https://github.com/commontk/AppLauncher.
    • Settings:

      • Remember last selected Additional module path in settings.
    • ExtensionWizard:

      • Support extension without project in toplevel CMakeLists.

      • Support layout with main CMakeLists in subdirectory.

      • Faster “–contribute” avoiding iterate over all user repos.

      • Reject improper module name when adding module.

      • Templates:

        • Add scripted segment editor effect template

        • Add ScriptedEditorEffect to SlicerGenerateExtensionTemplates target.

        • Add ScriptedSegmentEditorEffect to SlicerGenerateExtensionTemplates target.

IO

  • Features

    • Support added for read/write of MINC image files.

    • Support loading of regular 4D NRRD file as segmentation.

    • Write coordinate system to model files.

    • Add OBJ file save option for model nodes.

    • Add option to disable automatic opacities when loading segmentation form file.

    • Add option to load terminology json files from GUI.

    • Add show option to Add data dialog for volume loading.

    • Made Add data dialog more keyboard-friendly.

  • Performances:

    • Speed up volume loading by reading scalar range from headerfile.
  • Fixes:

    • Fix NRRD reader for large images.

    • Fix loading of RGB volumes.

    • Fix saving of FreeSurfer model nodes with overlay.

    • Fix loading of FreeSurfer overlays with custom extensions.

    • Fix scene save with images loaded from command-line.

    • More robust DICOM file reading with Add data.

API updates and Python Scripting

  • Features:

    • Python console

      • Improve Python console completion:

        • Avoid creation of intermediate variables by evaluating functions.
      • Print separator in Python console when a module is reloaded.

    • Add projection option to model slice display:

      • Models consisting of thin structures (such as catheters, coils, stents), can clearly be visible in slice views, as their intersection with the slice is now the complete object instead of just a few points or small circles.

      • User interface is not yet added for this feature (it would require more experimentation to see how it is the best to expose this option), but can be activated from the Python console for a model node: slicer.util.getNode('MyModel').GetDisplayNode().SetSliceDisplayModeToProjection()

    • Settings:

      • Support use of ctkSettings from python.
    • slicer.util python module:

      • Add slicer.util.loadUI: Allow to create a widget from a .ui file.

      • Add slicer.util.findChild: Allow quick access to a particular widget by name.

      • Add slicer.util.setSliceViewerLayers: Allow to update all slice views.

      • Add slicer.util.clickAndDrag: Send synthetic mouse events to the specified widget. Useful to write self-tests.

      • Add more numpy array conversions to slicer.util (arrayFromVolume, arrayFromModelPoints, updateVolumeFromArray).

    • Scripted module:

      • Expose enter() and exit() methods.

      • Add support for cleanup() method.

      • Add Edit button to Reload&test area.

    • Slicerrc.py

      • Ensure function defined in .slicerrc.py are available in console.

      • Made slicer startup script more discoverable: Show slicerrc file location in application settings and add a button to open it. If the file does not exist then a default file is created.

    • Python packages

      • Add couchdb.

      • Add wheel, pip and associated dependencies.

    • DataProbe:

      • Facilitate integration in custom view.
  • API updates and fixes:

    • Markups: Add easy access to node selector in qSlicerSimpleMarkupsWidget.

    • Tables: Add tables logic method for finding layout with table.

    • Application

      • SlicerApplication: Introduce startupCompleted() signal.

      • SlicerCoreApplication: Introduces isUsingLauncher() function.

      • Environment management: Add support for startupEnvironment(): It allows to get the environment as it was before starting Slicer.

    • Allow disabling slice view interactions

    • Extend vtkTeem API to expose labels and units found in NRRD files.

    • Add orientation normalization utilities to vtkAddon.

    • SimpleITK: More robust API for the sitkUtils python module provided by Slicer.

    • Fix issue with qMRMLNodeComboBox when removing an attribute filter.

    • Add optional checkable column in qMRMLColorModel.

    • Add vtkMRMLSliceLogic::SetForegroundWindowLevel.

    • Segmentations:

      • Add convenience function in vtkSegmentation to get segment by name.

      • Allow restricting Segment editor to certain views:

        • Previously, Segment Editor allowed editing in all views, even where the Segmentation node was not displayed. Now editing is only allowed in view nodes where the Segmentation node is displayable.

        • It is now also possible to disable automatic display of the master volume node when switching between segmentation nodes or master volumes. This allows more refined control of segment editor when it is embedded into another module.

      • Set autoShowMasterVolumeNode property of qMRMLSegmentEditorWidget to false to prevent automatic showing of master volume.

    • Transform:

      • Add GetNodeBounds to return untransformed bounds of node.

      • Add static method to get all nodes transformed by a transform node.

      • Fix vtkOrientedImageData::GetExtent.

    • Volumes:

      • Add vtkSlicerVolumesLogic::CloneVolumeGeneric cloning any volume.
    • CLI

      • Set CLI widget objectName based on parameter name

      • Add AllowInMemoryTransfer CLI setting

    • Functions wrapped in python:

      • qSlicerTerminologyNavigatorWidget::recommendedColorFromTerminology.

      • vtkMRMLNode::GetAttributeNames.

      • Made segment labelmap export available from Python.

Build System, Continuous Integration, Software Process, Release Process

  • Continuous Integration (CI) and Dashboards:

    • Do not clean directory for continuous dashboard builds, make continuous build more configurable.

    • Use ExternalData_OBJECT_STORES from environment as default

  • Slicer Build System:

    • Update build system to support building against VTK8, Qt5 with C++11 enabled.

    • Add support for VS2015.

    • Improve support for parallel build and installation of python packages fixing race condition.

    • Introduce SlicerPatch.cmake allowing to apply patch only once. Also add FindPatch CMake module.

    • Packaging:

      • Fix extension packaging setting CMAKE_MACOSX_RPATH to 0 (see Slicer/Slicer@f332fc2).

      • Fix list of Qt plugins to install on macOS.

    • Support custom GIT tag and repository URL for all Slicer external projects.

    • Check required python package availability when building against system python.

    • Add external project step allowing to keep track of project version: This generate a project description file named ‘version-.txt’ containing one line of the form ’ '.

  • Release process:

    • Add python cli automating versioning of Slicer wiki documentation.

    • release/midasdata: Re-use destination folder if it already exists

  • Testing

  • Extension build system:

    • Report extension source checkout error.

    • Update SlicerConfig to include path to Git and Svn. Allow to build extension simply passing -DSlicer_DIR.

    • Generate (Extension)Config.cmake: Allow an extension import targets from another extension.

    • Add PYTHON_SITE_PACKAGES_SUBDIR to launcher settings (see Slicer/Slicer@7b5ee46).

    • Add Slicer_THIRDPARTY_* vars to launcher settings (see Slicer/Slicer@58275e6).

    • Introduce PYTHON_STDLIB_SUBDIR and PYTHON_SITE_PACKAGES_SUBDIR CMake vars (see Slicer/Slicer@bc95187).

Modules

Segmentations

  • New effects:

  • Segment statistics module (in Quantification category): Surfaces and volumes of segmented structures can be directly computed from Segmentation nodes (there is no need to export to model or labelmap nodes anymore).

    • Results are stored in a table, which can be saved as csv file or copied to Excel for analysis. Demo: https://youtu.be/fM_rxfDTRi0

    • Developers can add custom plugins that can compute additional metrics and statistics

    • Uses units and standard terminologies to create measurements that can be exported in standard DICOM format (see Quantitative Reporting extension)

  • Segment content can be described using standard DICOM terminology. The information is used for creating quantitative reports using Segment Statistics module. Terminology information is included when Segmentation is loaded from DICOM segmentation object (see Quantitative Reporting extension).

  • Support fractional labelmaps

    • New non-binary labelmap representation in the segmentations infrastructure: conversion from/to closed surface

    • Useful for representing partial voxel occupancy (finer structure details in the same amount of memory), or probabilistic maps (multi-atlas segmentations)

    • Two visualization types: 1) Threshold-based hard edges for partial voxel representation, 2) Opacity-based for probabilistic representation. See Figures 3.6 and 3.7 in K. Sunderland’s MSc thesis

    • Updated Segment Editor effects to support fractional labelmaps if it is the master representation of the edited segmentation

  • Additional improvements

    • Reference geometry can be specified for labelmap export: it allows the merged labelmap geometry to exactly match the geometry of the input (or any other) volume.

    • Paint brush size can be fixed in screen coordinates. This way when the user zooms in the view, the brush absolute size decreases, allowing editing of finer details.

    • New shortcuts for many actions: see details in documentation.

    • Simplified user interface, made it easier to switch between Segmentations and Segment editor modules

    • Add ‘Crop to reference image geometry’ segmentation conversion option to allow clipping of large imported models on import.

  • Performance and Fixes

    • Improve support of transformed segments.

    • Improve performance when show/hide segment.

    • Improve segment editor initialization speed.

    • Reduce memory footprint and improve performance of effects.

    • Fix display of labelmaps exported from segmentation.

    • Fix segment opacity auto calculation.

    • Fix segmentation controller slice view widget.

    • Deactivate segment editor effect if markups placement mode is activated.

    • Do not reset slice FOV on layout switch in Segment editor.

    • Fix bounds computation in vtkMRMLVolumeNode and vtkMRMLSegmentationNode: When volume or segmentation was empty sometimes non-empty bounds were returned.

    • Fix background volume switch on Segment Editor module entering: As a side effect of hiding labelmap layer, the last propagated background volume got re-displayed.

  • API / Developer

    • Improve segment editor widget API.

    • Fix loading of segment editor effects from extensions.

    • Made segment editor effects list customizable.

    • Allow exporting segments to transformed labelmap node.

    • Always export to models under the same transforms as segmentation.

    • Deterministically order segments and support a segment index.

    • Add option to hide segments from segments table.

Volumes

  • Features:

    • Add labelmap->scalar conversion.

    • Add lock window/level button.

    • Apply bimodal analysis to float and long volumes for auto-W/L.

SceneViews

  • Fix scene view thumbnail display.

DICOM

  • Features / Fixes / Performances:

    • Speedup DICOM import by factor x10.

    • Improved robustness of DICOM image loading: user can now choose between GDCM and DCMTK toolkits.

    • Support selecting a subset of DICOM directories.

    • Add more rules to DICOM patcher module.

    • Add advisor for dicom extensions: After an import to the DICOM database the contents are checked against a pre-configured file that suggests possible extensions.

    • Add option to disable DICOM reference check.

    • Add saving of DICOM scalar volume voxel quantity&unit in volume node.

    • Ensure precache tags are configured with or without mainwindow.

    • Fix slow display of DICOM metadata widget.

    • Fix loading of DICOM series using quasi-matching filename.

    • Update window/level presets in Volumes based on DICOM metadata.

  • API

    • Add function to easily load lists of series by UID without having to manually create a dicomWidget object.

CropVolume

Crop Volume module is an essential pre-processing tool for segmentation. Either for reducing size of large volumes (cropping/downsampling) or allowing better segmentation of structures that are comparable to the voxel size (cropping/upsampling)

  • Features / Fixes:

    • Fill value is now configurable.

    • Interpolated cropping allows linear transforms of any volumes or ROIs, input volume can even be non-linearly transformed:

      • Cropping of transformed or non-axis aligned volumes and ROIs was very limited (input volume was not allowed to be transformed, non-linear transforms were not allowed).
    • No output volume was selectable (this was unlike all other modules in Slicer and it often lead to creating several unneeded output volumes when experimenting with cropping parameters) -Nnow output volume can be specified (if not specified then it is created automatically)

    • When there is any inconsistency, an error message is displayed and Apply button is disabled; the user can either resolve inconsistencies by selecting different nodes, changing transforms, or clicking the Fix button to automatically resolve all inconsistencies by changing/aligning transforms:

      • If inconsistency was found (e.g., misaligned ROI and input volume for voxel-based cropping) then a popup was displayed and users’ node selections were reverted, which often disrupted user’s workflow (for example, it was not possible to switch input volume and then switch to corresponding ROI because after switching input volume there was a temporary inconsistency that the module wanted to resolve immediately).
    • A ROI auto-fit button is available:

      • It was tedious to initialize ROI to include the entire volume (e.g., when the goal was to decrease resolution or crop only on one side).
    • In the Volume information section users can immediately see what the size and resolution of the cropped volume will be:

      • Meaning of “Input spacing scaling constant” parameter was not clear (is it an absolute spacing value or a factor relative to current spacing; what value increases/decreases the resolution) and it was often difficult to predict how large the cropped output volume will be without actually performing the cropping.
    • Axes between input and output volumes are now correctly matched:

      • Spacing was not computed correctly for volumes where the order of axes were permuted (for example in MRHead sample).
  • Performances:

    • Avoid unnecessary images creation: Cropping of large volumes required lots of memory (voxel-based cropping created extra unnecessary temporary vtkImageData objects; interpolated cropping created an unnecessary reference volume, instead of just specifying output volume geometry using CLI arguments).

Endoscope

  • Features

    • Add endoscope orientation computation: It is now possible to show a tool (not just a fiducial point) or reslice the volume using VolumeResliceDriver at the endoscope tip position.
  • Features

    • Add support for processing RGB image.
  • Fixes

    • Fix crash when sending node via OpenIGTLink.

    • Fix command handling.

  • Use cases

Tables

  • Table column properties: customize table properties (description, data type, unit, etc). It is used for customizing appearance and behavior and can be used by modules to associate any kind of metadata with a table column. Column properties are stored in a schema file (csv format). Details: https://discourse.slicer.org/t/table-columns-customization/436

SurfaceToolbox

  • Features:

    • Add mirror and normals auto-orientation

Transform

  • Features

    • Add support for interactively updating transform in the 3D view.

    • Transforms module in 3D Slicer now allows visualization of displacements of individual points. This can be used for exploring and visualizing registration results or displaying where planned target points move. See a short demo video here: https://youtu.be/CTLcYrtmoNo

  • Fixes

    • Convert empty VTK transform to identity ITK transform.

    • Prevent ITK from crashing after reading TPS transform.

    • Fix ITK transform conversion crash.

    • Fix warping of markup fiducial labels.

    • Reset transform sliders when switching between transforms.

    • Fix ResampleDTIVolume to work with composite transforms.

    • Fix transform rotation spinbox in Transforms module.

    • Fix annotation ROI transform hardening.

    • Do not report error messages when testing if NRRD is tensor file.

SampleData

  • Features:

    • Display thumbnails in SampleData module.

    • Make it easier to register custom sample data.

    • Improve name of Panoramix dataset and acknowledge “Osirix DICOM image library”.

Data

The Data module acts as a central data-organizing point in Slicer.

  • Integrate Subject Hierarchy module into Data module.

  • Provide three views:

    • Subject hierarchy view

      • Overview all loaded data objects in the same place, types indicated by icons.

      • Organize data in folders or patient/subject trees.

      • Visualize and bulk-handle lots of data nodes loaded from disk.

      • Easy show/hide of branches of displayable data.

      • Transform whole study (any branch).

      • Export DICOM data (edit DICOM tags).

      • Lots of type-specific functionality offered by the plugins.

    • Transform hierarchy view

      • Manage transformation chains/hierarchies.
    • All nodes view

      • Developer tool for debugging problems.
    • Removed the Displayable view (Subject hierarchy can do the same and much more).

VolumeRendering

  • Features:

    • Support ROI clipping in arbitrary direction.

    • Allow finer volume rendering offset adjustment.

    • Enable setting GPU memory larger than 4GB.

Terminology (New module)

This new module supports definition of semantic meanings of structures represented in Slicer using terminologies from DICOM, SNOMED, and related standards. The new module includes widgets for easily finding meaningful terms and associating them with colors. This is built on concepts from the older Colors module and is designed to support DICOM SEG objects:

  • Add Generic Anatomy Colors.

  • Add option to load custom anatomical contexts for terminologies.

  • Use new vtkCodedEntry class as base class for terminology containers.

  • Add support for DICOMSegmentationPlugin from Quantitative Reporting extension by adding capability to load anatomical context from DICOM SEG descriptor.

ScreenCapture

  • Features:

    • Add support for capturing a single image of the current state.

    • Add option for capturing all views.

    • Add setting for configuring the rotation axis.

    • Capturing can now be cancelled.

  • Fixes:

    • Hide all 3D view controller bars in “Capture all views” mode.

Extensions

New

  • BoneTextureExtension: presents texture quantification algorithms that provide a statistical description of the local texture of a 2D, 3D or N-D image. The N-Dimensional texture maps are generated with a high performance algorithm andmulti-threaded implementation in the Insight Toolkit (ITK). These algorithms are used to characterize subchondral bone texture in temporomandibular joint (TMJ) osteoarthritis (OA). Bone is well characterized by these filters due to the rich textures present in the trabecular bone (low density bone). See https://blog.kitware.com/fast-n-dimensional-texture-feature-maps/

  • SegmentEditorExtraEffects: Experimental effects for Segment Editor in 3D Slicer.

  • Sequence registration: This extension registers a sequence of volumes (3D+t a.k.a. 4D image data) to a selected volume. Processing results is a transform sequence (3D displacement field changing in time) and motion-compensated volume sequence. The transform sequence can be used for deforming point targets or structures. Applications include motion-compensation for volume comparison and analysis of organ motion.

  • SlicerElastix: This extension makes available Elastix medical image registration toolkit (http://elastix.isi.uu.nl/) available in Slicer.

  • SlicerITKUltrasound: This extension provides ultrasound image scan conversion of B-mode and next-generation ultrasound imaging modalities. Interfaces are built off the ITKUltrasound library. The modules available in this extension are useful for both 2D and 3D image generation for traditional B-mode imaging, but also next-generation ultrasound image modalities like ultrasound spectroscopy, acoustic radiation force imaging (ARFI), acoustic radiation force shear wave imaging (ARFI-SWEI), and others. See https://blog.kitware.com/3d-slicer-resamples-ultrasound-images/

  • Radiomics: This extension provides the interface to the pyradiomics library (http://pyradiomics.readthedocs.io/en/latest/) that can be used to calculate over 1500 radiomics features from an image region defined by a segmentation.

Improved

  • SlicerRT

    • Stable release of External Beam Planning module

    • Fractional labelmap support

    • New Room’s Eye View module

    • Fix bug where Hausdorff Distance 95% and Avg Dist were computed incorrectly

    • Improve dose visualization using isodose color table

    • Improve DVH layouts

    • DICOM improvements

  • VMTK

  • DCMQI

  • QuantitativeReporting

  • SliceTracker

  • SlicerDMRI

    • More fiber measurement statistics

    • Improved UKFTractography masking

    • UKFTractography included with SlicerDMRI

    • Improved NIfTI support in DWIConvert (thanks BRAINS team)

    • Improved integration with new Data module (thanks @cpinter)


Upcoming Slicer 4.8 release