2009 Winter Project Week ChangeTracker

From NAMIC Wiki
Jump to: navigation, search
Home < 2009 Winter Project Week ChangeTracker
ChangeTracker analysis result

Key Investigators

  • Andriy Fedorov, SPL
  • Jim Miller, GE
  • Karthik Krishnan, Kitware
  • Marcel Prastawa, SCI
  • Wendy Plesniak, SPL
  • Luis Ibanez, Kitware
  • Curtis Lisle, Knowledgevis
  • Steve Pieper, Isomics


ChangeTracker is a software tool for quantification of the subtle changes in pathology. The module provides a workflow pipeline that combines user input with the medical data. As a result we provide quantitative volumetric measurements of growth/shrinkage together with the volume rendering of the tumor and color-coded visualization of the tumor growth/shrinkage.

The objective at this meeting is to determine the status of the Slicer3 components needed for enhanced functionality of ChangeTracker, identify new uses of ChangeTracker, and propose the tentative roadmap for ChangeTracker evolution for the next 6 months.

Approach, Plan

We consider the following improvements to ChangeTracker:

  • Extending the interface to allow analysis of more than two images
  • Volume rendering of tumor segmentation: visualization and 3d widget for volume cropping
  • Using Lightbox for tumor progression visualization
  • Robustness of initial tumor segmentation. Currently, we use user-guided thresholding. It must be quick, with minimum input from the user. Discuss possible approaches with Marcel, other groups in tumor segmentation research.
  • Consider error handling interface issues in execution of an external module (how to properly handle registration errors?)


  • Tumor segmentation:discussed with Luis and Karthik capabilities of LesionSizingToolkit: potentially very useful for improved accuracy of meningioma segmentation. Currently in the process of evaluating the performance of the feature detection on meningioma data
  • Volume rendering: worked with Karthik, Will, Curt and Steve on fine-tuning label data volume rendering (see below for details). Evaluated different approaches for visualizing tumor and growth results.
  • CompareView for results visualization: worked with Jim to implement changes to configure the layout with CompareView. Found a workaround to the problem we found in CompareView initialization (thanks, Steve!)
  • Module error handling: discussed with Jim changes to the module error handling in Slicer (see below for the proposed modifications)
  • Time-series analysis functionality in Slicer: 5-year development roadmap within NAC project. Following discussions with Wendy and Steve, currently there are no specifications or finalized plans. Advantages: improved memory efficiency and data access. Short term solution -- augmenting ChangeTracker with the additional wizard step to specify the number of timepoints.
  • Longitudinal lesion analysis in Lupus: put together a requirements document with the desired features in ChangeTracker (or ChangeTracker derivative)

"Customer" projects

Relevant projects of interest

Volume rendering of label data

We investigated the behavior of volume rendering on the sample data from tumor growth analysis. We identified that it is crucial to use nearest neighbor interpolation for label volume rendering. It appears that the behavior of the opacity mapping function is rather unexplained (see the screenshots):

  • although the input label map contains only three intensity values (background 0, shrinking 12 and growth 14), the cut-off location of the opacity mapping for the shrinking label affects rendering
  • the results of volume rendering are drastically different from the surface recovered with marching cubes (see the screenshots)

Programmatic initialization of the opacity transfer function for two-label data:

  vtkPiecewiseFunction* opacity = vtkPiecewiseFunction::New();
  double* imgRange  =   this->Render_Image->GetPointData()->GetScalars()->GetRange();
  opacity->AddPoint(imgRange[0], 0.0);
  opacity->AddPoint(min - .1, 0.0);
  opacity->AddPoint(min, 1., .5, 1.);
  opacity->AddPoint(min+0.1, 0.);
  opacity->AddPoint(max-0.1, 0.);
  opacity->AddPoint(max, 1., .5, 1.);
  if (max < imgRange[1]) {
    opacity->AddPoint(max + .1, 0.);
    if (max+.1 < imgRange[1]) {
      opacity->AddPoint(max+.1, 0.);
      opacity->AddPoint(imgRange[1], 0);

The datasets for testing are available here, and the transfer function can be seen on the screenshots.

Current solutions/workarounds we consider: use surface rendering from Marching cubes instead of volume rendering.

Initial transfer function
Transfer function showing interpolation artifacts (note the difference in opacity mapping; nearest interpolation is used in both cases)

Module error handling in Slicer

Problem: current implementation of Slicer does not handle the case when a module is executed as a shared library, and fails with an exception. Currently, the user will not be notified about the problem that occured during module execution. Also, if a module is executed from within another module, there is no mechanism to catch the exception and try to determine what was the source of the problem.

Proposed solution:

  • (1) augment the MRMLCommandLineModuleNode with a bool flag that will instruct the module logic whether the exception should be re-thrown or not (this can be done only in the same-thread (ApplyAndWait()) execution mode)
  • (2) add the code in CommandLineModuleLogic to set the execution status to error if an exception occurs


  • E.Konukoglu, W.M.Wells, S.Novellas, N.Ayache, R.Kikinis, P.M.Black, K.M.Pohl. Monitoring Slowly Evolving Tumors. Proc. of 5th IEEE International Symposium on Biomedical Imaging: From Nano to Macro 2008, pp.812-815 link