Page MenuHomePhabricator

2020 Week 25 (Late June)
Updated 1,106 Days AgoPublic

Previous changelogNext changelog

NOTE: This is the first merge back from the develop branch into the master branch since we introduced git-flow. These merge commits will be accompanied by curated changelogs. As it is the first changelog, it reflects everything noteworthy that happened since April 2018 that was not already part of the last MITK release v2018.04.2. Over 400 tickets were resolved in that time, hence we focus on the highlights and breaking changes including migration hints.

🛠 Third-party dependency changes

Several dependencies were upgraded to newer versions, removed, or introduced:

DependencyOld versionNew version
Boost1.681.70
cpprestsdk2.10.10
CMake3.103.14.5
CTKfc06bedc (Aug 10, 2018)78341aba (Dec 07, 2019)
DCMQId067f81c (Jun 26, 2018)ea4f0809 (Jan 23, 2020)
DCMTK29f9de10 (Jun 15, 2018)3.6.5
GDCM2.6.33.0.4
freeglut2.8.1
ITK4.13.1e53d1d94 (May 22, 2020)
MatchPoint24ef6072 (Apr 13, 2018)f2a64255 (May 02, 2019)
OpenCV3.4.13.4.8
OpenIGTLink54df50de (Aug 21, 2014)3.0
Qt5.11.15.12
Raptor2.0.15
Rasqal0.9.32
Redland1.0.17
SimpleITK9d510bef (Mar 1, 2018)
zlib66a753051.2.11

✨ New features

New selection concept and UI

The QmitkNodeSelectionDialog is the main widget to be used to select data nodes from the data storage. It is a popup dialog that can be included in any other widget, such as the QmitkSingleNodeSelectionWidget or the QmitkMultiNodeSelectionWidget. It uses a tab widget that holds different data storage inspectors. A data storage inspector shows the (possibly filtered) data nodes of the data storage and allows to select one or more nodes. The selection can be accepted inside the node selection dialog and it is then sent to the including widget.

Screenshot of a selection dialog

Generally, the selection mechanism was designed to be a local selection mechanism per default. Local means that any selection is only valid for the including widget, view, or plugin. However, it is possible to use a QmitkModelViewSelectionConnector and a QmitkSelectionServiceConnector to connect the global selection bus to the selection model of a widget. There are two different modes:

  • SetAsSelectionProvider allows to send a model selection that has been sent by QmitkModelViewSelectionConnector::CurrentSelectionChanged()
  • AddPostSelectionListener allows to receive a bus selection that was received by QmitkModelViewSelectionConnector::SetCurrentSelection()

For an example, see QmitkDataStorageViewerTestView.cpp. More information will be available on the MITK developer manual concepts page (T24771).

New image statistics (preview)

The image statistics (ImageStatistics and ImageStatisticsUI modules as well as the QmitkImageStatisticsView provided by the org.mitk.gui.qt.measurementtoolbox plugin) have been refactored on both the back end and the front end. The rework is not yet finished as the current state just ensures that we have no regression. It does, however, already reveal the potential of the new infrastructure.

More details can be found in T27510: [MITKDoc] Add/revise developers documentation for new statistics back-/frontend.

Back end

Statistics results are now stored (as by default hidden helper objects) in the data storage. They are reused to reduce the number of recalculations. The statistics are attributed with meta information regarding the computation (e.g. number of bins or “ignore zeros”), but also the state of computation (e.g. if it is pending or up-to-date). They are also associated with the data source (e.g. image and segmentation) by a StatisticsToImageRelationRule and StatisticsToMaskRelationRule. The generation is supported by the newly introduced class “family” based on QmitkDataGeneratorBase, e.g. QmitkImageStatisticsDataGenerator ensures up-to-date statistics for any specified image-mask pair.

Some of the benefits of the new back end are:

  • Statistics are faster now (in particular for large masks or 3d+t images) as calculations are cached and can be reused
  • No more superfluous recalculation for the same image or image-mask pair
  • The generation of statistics and its usage can be decoupled, so the same statistic can be used by several views
  • The generation of statistics is efficiently threaded in the background
  • The infrastructure will be able to unify similar types of calculations (e.g. dose statistics for radiation therapy)
  • The introduction of the generation status allows UIs to be more responsive

Front end

The Image Statistics view now uses the new QmitkImageStatisticsTreeModel in conjunction with Qt views to show statistic results. QmitkImageStatisticsTreeModel monitors the data storage and reacts to any change of statistics objects in the storage. It allows a representation of the data similar to the old statistics tables. In the future, the view-model concept will allow to represent the statistics data in a more flexible way (e.g. one specific statistic value like mean, images as rows and masks as column).

Some benefits of the new front end are:

  • It is now possible to display the statistics of multiple images at once
  • Statistics are generated for all selected image-mask pairs with congruent geometry
  • The statistic values are now displayed in a table instead of a list and can be directly copied to spreadsheet software like Microsoft Excel
  • Outdated values (e.g. because of a planar figure was moved or a segmentation was modified) are now highlighted and automatically updated
  • The UI of the histogram has been improved and is now aware of the application theme

DICOM image reader

  • The DICOM image reader only reads DICOM files that are in the same image block as the selected file, instead of loading all image blocks of the containing directory. For example, drag'n'dropping a DICOM file into the MITK Workbench will only load the image that the file is part of. Drag'n'drop the directory itself into the MITK Workbench to get the old behavior.
  • The DICOM image reader only condenses images with the same series instance UID into a 3d+t image, instead of condensing everything with fitting geometry. Old behavior can be enabled by setting onlyCondenseSameSeries to false in your configuration XML or through the SetOnlyCondenseSameSeries() method of ThreeDnTDICOMSeriesReader.
  • The DICOM image reader now stores meta data about the reading process in loaded data instances to improve provenance tracking of processed data. The following information is stored:
Property nameDescription
MITK.IO.reader.DICOM.configurationPath to the property containing the name of the DICOM reader configuration used to read the data
MITK.IO.reader.DICOM.filesPath to the property containing the files the dicom reader used in a TemporoSpatialProperty
MITK.IO.reader.DICOM.PixelSpacingInterpretationStringPath to the property containing PixelSpacingInterpretationString for the read data
MITK.IO.reader.DICOM.PixelSpacingInterpretationPath to the property containing PixelSpacingInterpretation for the read data
MITK.IO.reader.DICOM.ReaderImplementationLevelStringPath to the property containing ReaderImplementationLevelString for the read data
MITK.IO.reader.DICOM.ReaderImplementationLevelPath to the property containing ReaderImplementationLevel for the read data
MITK.IO.reader.DICOM.GantyTiltCorrectedPath to the property containing the indicator of the gantry tilt was corrected when reading the data
MITK.IO.reader.DICOM.3D+tPath to the property containing the indicator of the data was read as 3D+t
MITK.IO.reader.DICOM.gdcmPath to the property containing the version of GDCM used to read the data
MITK.IO.reader.DICOM.dcmtkPath to the property containing the version of DCMTK used to read the data

Other readers

  • Meta information about the reading process is now stored in loaded data instances to improve provenance tracking of processed data. The following information is stored:
Property nameDescription
MITK.IO.reader.descriptionPath to the property containing the name of the reader used
MITK.IO.reader.versionPath to the property containing the version of mitk used to read the data
MITK.IO.reader.mime.namePath to the property containing the mine name detected used to read the data
MITK.IO.reader.mime.categoryPath to the property containing the mime category detected to read the data
MITK.IO.reader.inputlocationPath to the property containing the input location used by the reader if loaded by file
MITK.IO.reader.options.*Path to the properties containing the reader options used to read the data

Rendering

  • Depth peeling was reintroduced for 3d renderers (including support for volumes) for highly improved rendering of overlapping translucent objects
  • Anti-aliasing was reintroduced (using Fast Approximate Anti-Aliasing (FXAA)) for all renderers by default. It is managed by RenderingManager. RenderingTestHelper disables anti-aliasing for robust image comparisons in rendering tests.

New apps

  • Fuse3Dto4DImageMiniApp: Fuse n 3d images and fuse them to a single 3d+t image with n time steps
  • FileConverter: Convert data into specific file format
  • ImageTypeConverter: Cast image to another image with different pixel type
  • ResampleImage: Resample image with custom spacing, mapping, and interpolation
  • And many more...

Custom MITK revision description

  • By default, MITK uses the latest Git tag like "v2018.04.2" as revision description in application window titles, about dialogs, and package names
  • This can be overriden by the value of the MITK_CUSTOM_REVISION_DESC CMake cache variable

Auto-cleaning external projects on updates

  • Updates of external projects like CTK, ITK, or VTK were difficult to get right in existing MITK builds as sometimes old build artifacts, header files, or configuration files had to be removed manually to successfully build MITK again
  • The MITK_AUTOCLEAN_EXTERNAL_PROJECTS CMake cache variable was introduced to automate this process, as soon as a corresponding CMakeExternals/*.cmake file was modified since the last build (OFF by default, but highly recommended)

Visual Studio project folders

  • All MITK targets are now categorized in folders like Applications, Modules, or Plugins
  • MITK extension targets have their own root folders

Fixed-size planar figures

  • PlanarCircle and PlanarDoubleEllipse allow the explicit setting of fixed diameters now

Model fitting / pharmacokinetic modelling

  • A simple semi-quantitative 2-step-linear model was added

BaseData: Serialization of unique IDs

Compressed serialization for TemporoSpatialStringProperty

  • The JSON serialization format of TemporoSpatialStringProperty supports compression now
  • Attributes tmax and zmax can be used to indicate that a value is the same for all time points in a slice or for all slices

Rendering tests on headless Linux clients

  • Rendering tests on headless Linux clients can be easily activated with the MITK_XVFB_TESTING CMake cache variable
  • By default, this will prepend testdriver calls with xvfb-run --auto-servernum, resulting in having a virtual frame buffer available for rendering tests
  • On Ubuntu, install Xvfb with sudo apt install xvfb
  • Having a notoriously buggy history on different Linux distributions, the command can be customized with MITK_XVFB_TESTING_COMMAND, to call scripts with alternative names for example

CTest subprojects in MITK extensions

  • MITK extensions can add CTest subprojects through a list called MITK_CTEST_SUBPROJECTS in their optional CMake/CTestSubprojectList.cmake file

Custom multi widget with render window management

🔥 API-breaking changes

Render window names

  • The render window names stdmulti.widget[1-4] were changed to stdmulti.widget[0-3]. For example, the standard 3d render window now is stdmulti.widget3 instead of stdmulti.widget4.
WARNING: This may fail silently as it is only a change of literal strings!

Data selection in segmentation

Since we migrated all segmentation views to the new selection concept and UI (see the "New features" section above), a few obsolete classes regarding selection were removed:

  • QmitkToolReferenceDataSelectionBox
  • QmitkToolRoiDataSelectionBox
  • QmitkToolWorkingDataSelectionBox

Please migrate to the new selection concept. You find plenty of examples in the repository, in particular within the segmentation views, as they originally used the removed classes.

DICOM image reader

  • See the "New features" section above

DataNode

  • The dysfunctional Clone() method was removed from DataNode

Unique ID generation

  • UIDGenerator now uses boost::UUID, making the optional lengthOfRandomPart parameter of its constructor obsolete

Python

  • MITK_USE_Python CMake variable was renamed to MITK_USE_Python3
  • On macOS, CMAKE_FRAMEWORK_PATH can be used to find a specific version of Python

RenderingManager and rendering mode

  • Access to the rendering manager was unified to the static method RenderingManager::GetInstance() (remove any parameters of type RenderingManager from function calls that generate corresponding compiler errors)
  • The rendering mode was removed as it represented different independent concepts (remove any parameters of type BaseRenderer::RenderingMode::Type from function calls that generate corresponding compiler errors)

CommandLineParser

  • CommandLineParser::<Input|Output>File was replaced by CommandLineParser::File

Level window

  • LevelWindowManager::RecaluclateLevelWindowForSelectedComponent() was renamed to RecalculateLevelWindowForSelectedComponent()

QmitkStdMultiWidget and QmitkStdMultiWidgetEditor

  • The level window slider is now controlled by StdMultiWidgetEditor
  • QmitkMultiWidgetLayoutManager was introduced to change the layout of multi widgets. It supports more general layouts and reacts dynamically, depending on the selected/active render window widget. For example, to enlarge a specific render window widget or to move a specific render window to the left.
  • The enum IRenderWindowPartStrategy moved into WorkbenchUtil
  • These methods of QmitkStdMultiWidget were removed:
    • SetWidgetPlaneModeToSlicing()
    • SetWidgetPlaneModeToRotation()
    • SetWidgetPlaneModeToSwivel()
    • SetWidgetPlanesLocked()
    • SetWidgetPlanesRotationLocked()
    • SetWidgetPlanesRotationLinked()
    • EnableStandardLevelWindow()
    • DisableStandardLevelWindow()

Qt-related variables removed from dashboard scripts

  • QT5_INSTALL_PREFIX and QT_BINARY_DIR were removed. Add the Qt path to the PATH environment variable instead. For example, right in the dashboard script like set(ENV{PATH} "$ENV{PATH}...").

Auto-load modules not allowed as link-time dependencies anymore

  • mitk_create_module() and mitk_create_plugin() now ensure that module dependencies are not auto-load dependencies, meant to to loaded only during runtime

Removed modules and plugins

The following legacy modules and plugins were removed without successors:

  • GPGPU
  • PlanarFigureSegmentation
  • RDF
IMPORTANT: MITK Diffusion moved into a separate MITK extension.

Previous changelogNext changelog

Tags
None
Referenced Files
F1646878: depthpeeling.mp4
Jun 29 2020, 12:07 PM
F1646868: selectiondialog.png
Jun 29 2020, 11:47 AM
Last Author
kislinsk
Last Edited
Mar 8 2021, 9:20 AM

Event Timeline

This comment was removed by kislinsk.
kislinsk edited the content of this document. (Show Details)
kislinsk edited the content of this document. (Show Details)
kislinsk edited the content of this document. (Show Details)
kislinsk published a new version of this document.

MITK is a great image processing tool that is very popular in our research group. Thank you guys for making/maintaining such an amazing open source project!
Any time schedule to upgrade ITK and VTK to latest version (ITK5.1 & VTK9)?

VTK 9 upgrade is basically finished already but we also need to upgrade/contribute to ACVD, which needs quite some changes to continue working with VTK. See T27461: Update MITK to use VTK 9.

@nolden started a task for ITK 5.1: T27437: Migrate MITK to use ITK 5.x .

The changes from ITK 4.x to 5.x are quite cumbersome and do require some time to accomplish. Thank you again!