Slicer 4.10.1: Summary, Highlights and Changelog

Changelog

Core

Fixes

  • Fix 3D picking in displayable managers. [Commit].

  • Update crosshair RAS position when slice is moved. Crosshair RAS position was only updated from XYZ when mouse position was updated. This caused DataProbe to show outdated RAS position when slice position was updated without moving the mouse pointer (using mouse wheel or keyboard shortcuts).

  • Change default colormap for model scalars and transforms to Viridis. Viridis provides continuous transition, so there are no specific iso-values that are displayed more prominently. Due to this, viridis seems to be a more generic colormap, which seems more suitable as a default colormap than rainbow. [PR]

  • Set associated node for fiducial on volume. The associated node ID for for a markup fiducial was being set when selecting a model, but not when selecting a volume. [Discussion]

  • Ensure mouse mode icon is always visible when placing annotations.

  • Ensure slice interactor style “OnMouseWheelBackward” respect Zoom action.

  • Re-factor DataProbe, CompareVolumes,LandmarkRegistration to use ScriptedLoadableModule base classes.

  • Improve error reporting in vtkOpenGLShaderComputation. This helps for debugging framebuffer attachment issues.

  • Reduce minimum size of module settings panel. On some computers, module settings panel was too tall and the “Reset” button was not visible after adding an additional module path and restart hint appeared.

Features

  • Improve qSlicerWebWidget [PR]

    • Improve JavaScript interoperability.
    • Allow to directly load data from standard websites, which may have logins and custom download forms.
    • Enable the evaluation of webpage JavaScript code from C++ or Python or the evaluation of Slicer Python from the page’s JavaScript.
    • Improve download options and control

DICOM

  • Fixes

    • Fix multiple loading of DICOM files. The mechanism that ensured that a single DICOM plugin offers only one loadable selected by default was broken and therefore sometimes multiple nodes were loaded from the same set of files.

    • Reduce warning logs during DICOM import.

    • Fix cutoff in DICOM browser toolbar on Windows.

    • Fix scalar volume DICOM export.

    • Add check for non-ASCII characters when drag-and-dropping a DICOM folder. User is informed that importing from that folder may not work but he can still continue. The test is only performed when the folder is drag-and-dropped to the application window.

    • Precache image size DICOM tags. Precaching the rows and columns tags are necessary to show the image size in the DICOM browser.

    • Fix ForceSamePatientNameIdInEachDirectory rule in DICOMPatcher and fix “error global name ‘patientIndex’ is not defined”.

  • Features

    • Update DCMTK to fix DICOM TR support for along-track measurements.

    • Allow specifying study, series, content datetime for DICOM image export. It was not possible to export 4D data sets, because study, series, frame of reference UIDs were always generated and it was not possible to set content time (to distinguish between image frames at the same spatial position at different time points). Now study, series, frame of reference UIDs can be specified optionally and study, series, content date&time can be set.

MRML

  • Fixes

    • Fix default display and storage node creation. The CreateDefaultDisplayNodes and CreateDefaultStorageNode functions did not use the CreateNewNodeByClass infrastructure so default nodes were not considered. This has been fixed in all node classes using such functions.

    • Fix error message “AddMRMLDisplayableManagerEvent - eventId:16004 already added”

  • Features

    • Add option to get directly referenced nodes. GetReferencedNodes and AddReferencedNodes always collected the referenced nodes recursively. An argument has been added to these functions for turning off the recursive functioning to only get the nodes that directly reference the argument node. This should not break anything because the default value for the argument is true (recursive).

    • Add MRMLSliceNode property to allow show/hide of reformat widget outline.

    • Add support for associating view with specific interaction node. It adds support for adding an interaction node reference to view. By default, all views are implicitly associated with the interaction singleton node. This allows to explicitly associate a subset of the views with a particular interaction node. Widgets expecting to work with an interaction node have also been updated to have interactionNode()/setInteractionNode() functions allowing to override the default interaction node. [Discussion]

IO

  • Allow loading .obj file as segmentation.

  • Track file compression by node, add compression options to save dialog. [PR, PR, Discussion]

  • New infrastructure has been added for the management of compressed video frames. Extensions can implement and register their own video compression codecs for decoding and encoding frames. The SlicerIGSIO extension provides an example of codec registration with VP9, as well as support for both compressed video recording/replay and MKV loading/saving. [PR]

    • vtkMRMLStreamingVolumeNode: Stores both compressed frames and uncompressed images. Decodes compressed frames into images and images to frames if requested using vtkStreamingVolumeCodec

    • vtkStreamingVolumeCodec: Handles encoding and decoding of images.

    • vtkStreamingVolumeFrame: Stores compressed frame data along with the necessary information required to decode it (link to previous frame, uncompressed image size, codec FourCC, etc.).

    • Adds a framework for specifying different preset levels of compression in vtkMRMLStorageNode.

  • Fix FreeSurfer surface reader.

Python Scripting

  • Add methods to access view controllers in plot and table widgets.

  • Make view controller widget components more accessible. Add Python wrapping and exposed a few buttons of slice and view controller widgets. This allows fine-tuning appearance of view controllers in custom applications.

Testing

  • Relocation of test data and binary dependencies to GitHub

  • Improvements to the SampleData module and test data infrastructure .[Discussion]

    • New download API decouples downloading from loading into Slicer.

    • Improve SampleData API to support scene loading and zip file download.

  • Improve test run speed [PR]

    • 2x to 10x faster for running Python tests.
  • Re-factor scripted module tests to use ScriptedLoadableModule base classes.

Extension development

  • Fixes

    • Fix lookup of Qt5 designer executable when configuring Slicer launcher. This means ./Slicer --designer works again.
  • Features

    • Configure extension build-tree launcher for starting Slicer. This convenience launcher allows to start Slicer ensuring the extensions being developed (and its dependencies) are properly loaded.

    • Add template for creating scripted modules with .ui files [PR, Discussion]

    • Package Qt Designer. It can be started on all platform using ./bin/SlicerDesigner. [Discussion]

Improved Modules

Colors

  • Fixes

    • Make color scalar bar resizeable. Label text was often too small in color scalar bar (Colors module / Scalar bar / Display scalar bar) because the default width of the scalar widget was too small. Made the scalar widget resizable by drag-and-dropping the borders (before the change, only height of the widget was adjustable).

Data / Subject Hierarchy

  • Fixes:

    • Prevent deleting scene in SH when nothing is selected

      • In case of deletion with no selection in subject hierarchy the whole scene was deleted. This could not happen in Slicer application, but it was possible in other SH tree views set up in a way that allowed the presence of items that the proxy model rejected. For example filtering out node types that showed up because they were parents of otherwise accepted items (so their parents showed up to show their position in the tree and allow them to show in general).
    • Fix update of imported nodes in subject hierarchy.

    • Show direct and recursive referenced nodes with slightly different color.

    • Improve SH transform delegate UI: Radio button like indication of the selected transform (or none) instead of checkbox.

  • Features:

    • Add jump slices option to segment visibility menu in Data module. Fix Slicer issue 4659

    • Add toggle visibility for multi-select in Data module

    • Remove subject hierarchy automatic hints. Clicking the help button still shows the hint as before.

    • Add color column and improve transform column in subject hierarchy. See PerkLab/SlicerOpenAnatomy#4, Slicer issue 4401 and PR.

      • Add new column for color between visibility and transform columns. It shows the color for segments, models, and markup fiducials (selected color).

      • Double-clicking the color brings up terminology selector where terminology and color can be selected. Terminology information is stored in segments as before (segment attributes), and for models and markups it is stored in MRML node attributes. When selecting a terminology type, color is overwritten but name is not by default.

      • Transform column now shows icon instead of the first few letters of the transform name. There is a separate icon for linear and deformable transforms.

      • Double-clicking the icon brings up a menu instead of a node selector that had to be clicked again.

      • Subject hierarchy reference highlights are now updated immediately after selecting a transforms, so the highlighted transform node is always correct.

    • Add opacity plugin to subject hierarchy. The opacity plugin adds an Opacity action in the visibility context menu with a sub-menu that contains a slider showing the opacity and which can be used to change the opacity of the item.

    • Add subject hierarchy filter by node type.

      • Subject hierarchy can now filter items based on the node types of their associated data nodes.

      • NodeTypes is a list of MRML node class names that are accepted (including all subclasses).

      • HideChildNodeTypes list allows excluding subclasses that NodeTypes would otherwise allow.

      • Propagate new filters to SH tree view and combobox widgets.

      • Fix issue where an item was shown because of its virtual branch content although the item was rejected by a filter.

    • Allow folder to override branch color. An important step towards making subject hierarchy usable as model hierarchy. Model hierarchy nodes have been represented as folders in subject hierarchy already, so it makes sense to use the folders for the same purpose:

      • Folders now can have color associated to them. If it’s a mirrored model hierarchy node, then it uses the display node of the MH node, otherwise it creates a model display node associated to the folder item.

      • A visibility context menu action called ‘Apply color to branch’ allows overriding the color of the model nodes in the folder, the same way the checkbox does in the model hierarchy (the two functions are reflected in the two types of hierarchies so there is no confusion if used together).

      • Right-clicking the color column now shows the visibility context menu as color is related to visibility.

    • Implement whitelist and blacklist for SH plugins. It is now possible to determine a subset of enabled subject hierarchy plugins for each subject hierarchy tree and combobox. See PerkLab/SlicerOpenAnatomy#4

      • Whitelist contains the enabled plugins, and if it’s not empty, then all plugins not in the list are disabled.

      • Blacklist contains the disabled plugins; all other plugins are enabled. By default both lists are empty, meaning that all plugins are enabled.

LandmarkRegistration

  • Fixes

    • Fix issues performing landmark refinement near image borders when using the SimpleITK method.

Markups

  • Fixes

    • AddPointToNthMarkup: Fix NthMarkupModifiedEvent event call data. Similarly to other use of the event, it ensures the markupIndex is associated with the event.

MultiVolumeImporter

  • Fixes

    • Fix loading confidence values.

ScreenCapture

  • Fixes

    • Fix 3D view rendering updates during in ScreenCapture.
  • Features

    • Allow screen capture with transparent background. Add a check “Transparent background” checkbox.

Segment Editor

  • Fixes:

    • Update level tracing on mouse wheel. This allows the level tracing effect to be updated when the user scrolls through the slices. [PR]
  • Features:

    • Allow using mask with grow from seeds effect [Discussion]

    • Simplify surface smoothing setting in Segment Editor.

      • Add simple checkbox to quickly enable/disable smoothing. Smoothing factor adjustment is more accessible, too, using a slider in a sub-menu.

      • Add application setting to enable/disable segmentation surface smoothing by default.

Segmentation

  • Features:

    • Allow segmentation without choosing a master volume. If a volume is not available, the user can still edit a segmentation by clicking on segmentation geometry button (next to master volume selector) and specifying geometry. A blank master volume is automatically created (if no master volume was selected before).

    • Add “Show 3D” option for segmentation auto-complete results preview. Segmentation results can be previewed in 3D for auto-complete effects (Grow from seeds, Fill between slices, Watershed) by clicking “Show 3D” in “Display” line, next to the input/results opacity slider.

  • Fixes:

    • Fix Segment Editor to work with multi-component master volume. Segment editor expects single-component scalar volume as master volume. If a vector volume is selected as input then now the first component is used. In the future, user may be offered to choose a component or use vector magnitude.

    • Fix closed surface to labelmap conversion in segmentation. When converting closed surface representation to binary labelmap representation in segmentation, Slicer was running out of memory if physical size of the object was large. Internal labelmap extent computation was incorrect, it assumed 1.0mm spacing. Fixed by using the actual spacing value.

    • Fix segment remaining completely transparent after Threshold effect. When user changed current segment while Threshold effect was active, the segment that was originally selected remained completely transparent (invisible) after thresholding was completed. Now opacity of all segments are properly restored after preview, even if user selects a different segment during thresholding.

    • Improve automatic oversampling calculation. Relative structure size was calculated based on the volume of the whole image instead of a single voxel. With this change the size of a single voxel is considered for the RSS measure (cubic root of the ratio of the structure volume and the volume of one voxel in the reference image, i.e. the number of voxels the structure spans on average along each axis). The fuzzy sets have also been updated. This fixes the problem with very low or very high resolution images.

    • Make segmentation geometry update more robust. Models imported into segmentation (with labelmap as master representation). After that segmentation geometry was modified. This caused Slicer to crash, as GUI update was attempted before labelmap was fully initialized. Fix the problem by preventing display updates during segmentation resampling using StartModify/EndModify.

SegmentStatistics

  • Fixes

    • Improved SegmentStatistics usability.

      • Automatically create parameter node and select segmentation node when switching to the module.

      • Create output table automatically if none is selected.

      • Collapse advanced section by default.

Terminologies

  • Fixes

    • Filter out duplicate types in terminology selector.

    • Make anatomic region expand button blink 3x.

  • Features

    • Highlight anatomy option in terminology selector. If the anatomic region panel is collapsed but the selected type supports anatomy information then the expand button is briefly highlighted to let the user know there are extra options available. If it’s not available then the expand button is disabled (if still collapsed) until a type is selected that supports it.

VectorToScalarVolume

  • Fixes

    • Improve VectorToScalarVolume usability. Improve input selection checks and move luminance to the top of the method combobox so that it is selected by default when the parameter node is deleted.

Volume Rendering

  • Fixes

    • Optimize volume rendering clipping plane smoothness. Default ClippedVoxelIntensity was extremely large and did not result in completely smooth surface in all cases (probably due to numerical errors).

    • Fix volume rendering ROI reset. When volume rendered node’s transform was changed, ROI was reset. This made it impossible to review clipped volume sequences or transform clipped volumes.

Editor (deprecated)

  • Fixes

    • Fix memory leak in vtkPichonFastMarching.

Infrastructure

Dependencies

VTK

  • Update to support python wrapping of VTKRenderingOpenVR.

  • Backport to Slicer/VTK fork selected fixes. See here for more details.

ITK

  • Future proofing for transition to ITK5 and C++11.

Custom Slicer application support

Slicer Application

  • Make custom application version more accessible.

  • Scripted modules in custom applications can easily access application version and repository information using new methods in qSlicerCoreApplication.

  • Both Slicer core and custom application version is logged.

  • For custom applications, now the main application’s repository revision is displayed in “About dialog” (and not Slicer core’s revision).

Build-System

  • Fixes

    • Fix DEFAULT_SETTINGS_FILE support in slicerMacroBuildApplication macro.

    • Initialize revisionUserSettings using default settings. This ensures that default settings are used to initialize both userSettings and revisionUserSettings. This is particularly useful when creating slicer custom application.

    • Fix logic discovering bundled extension superbuild directory and external project names for bundled superbuild extension.

    • Document support for “SuperBuild-type” extension in CMakeLists.txt.

  • Features

    • Support excluding bundled extension external projects. Setting the variable <extension_name>_EXTERNAL_PROJECT_EXCLUDE_ALL to TRUE prevents Slicer build system from considering the extension dependencies. This is particularly useful when (1) an extension support to be built as both a standalone project or a Slicer extension and (2) external projects from the extension are either not needed when bundled into Slicer or conflicting with Slicer ones.

    • Support restricting list of external project dependencies for bundled extension of superbuild type. By setting “<extension_name>_EXTERNAL_PROJECT_DEPENDENCIES” to a list of , it allows to constrain the list of external project dependencies appended to Slicer_DEPENDENCIES. This is particularly useful when not all external projects found in an extension superbuild folder should be added as Slicer dependency.

Extensions

The Slicer extensions manager enables Slicer users to install more than 100 extensions written and contributed by their peers from around the world.

New

  • GeodesicSlicer: This extension calculates geodesic path in 3D structure. Moreover, thanks to this geodesic path, this module can draw an EEG 10-20 system, determine the projected scalp stimulation site (MRI guided brain stimulation without the use of a neuronavigation System) and correct the rTMS resting motor threshold by correction factor. See Announcement.

Improved

  • SlicerVirtualReality

    • Fix virtual reality picking error. When the pick position was close or inside non-selectable object, picking often failed because VTK’s cell picker found that actor. Now if a model, segmentation, or volume rendering node is not selectable. then it is completely excluded from picking.

    • Fix initialization of model displayable manager. The logic of adding actors for slice models was incorrect (not all slice models were added when all slice models were already in the scene - for example when a virtual reality view was created). Fixes KitwareMedical/SlicerVirtualReality#33