From Slicer Wiki
Jump to: navigation, search
Home < Slicer3:UIDesign:WorkingProblems:BCAnalysis:PET

Back to Project Overview

SUV Analysis


Goal is to accommodate basic RECIST assessment for cancer treatment (Response Evaluation Criteria In Solid Tumors).

Specifically for PET/CT analysis, develop appropriate visualization of PET/CT Fusion, and a module for computing Standardized Uptake Value (SUV).

PET SUV Analysis Workflow

  • Segment the tumor by hand (ROI or VOI, can be simple circle or ellipsoid)
  • Compute SUV of baseline
    • extract parameters from dicom header including
      • concentration
      • injected activity
      • patient weight
      • Standardized uptake value, SUV, (also referred to as the dose uptake ratio, DUR) is calculated as a ratio of tissue radioactivity concentration (e.g. in units kBq/ml) at time t, CPET(t) and injected dose (e.g. in units MBq) at the time of injection divided by body weight (e.g. in units kg). SUVbw = CPET(t) / (Injected dose / Patient's weight)
    • use maximum value SUVmax
  • Compute SUV of followup
    • extract parameters from dicom header including
      • concentration
      • injected activity
      • patient weight
      • Compute SUV again.
    • use maximum value
  • Normalize ROI by SUVmax
  • Resport parameters of interest
    • SUVmax_baseline,
    • SUVmax_followup,
    •  % change
  • For multiple tumors, report
    • sum of SUV_baselines
    • sum of SUV_followup
    • percent change


Started a PET_SUV module in Slicer that

  • lets you choose a pre-treatment pet volume
  • lets you choose a post-treatment CT volume (if present)
  • lets you choose pre & post-treatment label maps.
  • displays them in FG/BG with correct LUT
  • pulls parameters of interest for SUV calculation from DICOM header
  • has entry widget for parameters missing from header
  • computes measures of interest as described above.
  • no special viewer for now.
  • ...


Display guide

case study MS PPT Slides shows tumor

MS Word document with DICOM tags for SUV

Slicer Display progress (shown from early to latest)

Initial view in Slicer (w/o volume rendering)
Ron's PETCT in Slicer: GPU Raycasting (GLSL) with Gradient Magnitude Opacity Modulation
Draft module (w/o display) DICOM Tags missing?
Latest with new PET heat color LUT and SUV computation from DICOM header information.
Pre-TX: Latest with inverse Grey display and manual parameter entry.
Post-TX Latest with inverse Grey display and auto parameter entry.
Pre-TX Latest with heat display display and additional (yellow) VOI specified in liver. Matching computed SUVmax from commercial package.
Post-TX Latest with heat display display and additional (yellow) VOI specified in liver. Matching computed SUVmax from commercial package.

Running questions for Ron/Jeffrey

  • Results format?
  • Can save to file wait?
  • In test above, suvmax and suvmean were higher for post-tx. hmm.

Approach & notes

  • Fixed dicom tag reading (nuclear medicine tags are nested!) Use gdcm::File to dig down...
 // Nuclear Medicine DICOM info:
 0054,0016  Radiopharmaceutical Information Sequence:
   0018,1072  Radionuclide Start Time: 090748.000000
   0018,1074  Radionuclide Total Dose: 370500000
   0018,1075  Radionuclide Half Life: 6586.2
   0018,1076  Radionuclide Positron Fraction: 0
  • SUV computation:
 For each label value/color:
 create a binary volume that includes only that label
 use that binary as a stencil on the PET volume
 if the number of voxels in the stenciled image > 0
   get the maximum Cpet
   get the mean Cpet
   (no max_mean yet)
   computes SUVmax (DONE)
   computes SUVmean (DONE)
   computes SUVmin (DONE)
   updates display (DONE)
  • no unit conversion yet (assumes MBq/ml) (unit conversion too, DONE)
  • will work for single or multiple tumors under one label
  • can be made to work for different labels, if want to assess tumors separately.
  • wire up display panel inside module (create custom PETCT LUT ) (DONE)
  • get good volume render for slides. (sent Questions to Yanling & Curt on 10/14/2009)
  • custom LUT and scaling (created vtkMRMLPETProceduralColorNode with two types of PET (heat, which corresponds to rgb file sent from jeff, and rainbow) DONE)
  • test and verify SUV calculation (jeff, see figure below -- right order of magnitude...)
  • add unit correction (convert among Ci, Bq, and kg, lb, etc. DONE)
  • detect vendor and use special calculations for Philips (permission from Jeff to ignore Phillips )
  • improve overall usability (always, always)
  • Update nuclear medicine parameters from DICOM automatically when PET volume is selected. (DONE)
  • Allow manual override (manual setting) of key parameters in the computation in case PET volume is not DICOM. (DONE)

Notes from Yanling on volume rendering:

From your module, if you create a vtkMRMLVolumeRenderingScenario node, a vtkMRMLVolumeRenderingParametersNode, fit in all parameters, and add the scenario node into MRML scene, then volume rendering module should able to detect the nodeAdded event and init volume rendering pipeline based on parameters in the parameters node. To set parameters from a module other than VolumeRendering, use VolumeRendering GUI to set parameters and select rendering technique and save the scene then check how parameters should be set by opening the scene file in an editor.

To show/hide volume rendering via checkbutton: On the misc tab there's a show/hide button for volume rendering and corresponding code is in void vtkSlicerVolumeRenderingHelper::ProcessPauseResume(void).


  • Module is working and checked into Slicer's svn trunk. Needs to be batted around by users (like Ron).
  • Volume rendering must still be switched on -- but VR module is a moving target right now... so checkbox to turn on/off vr is disabled -- questions about how to proceed are in to Curt & Yanling.
  • Need to put units (g/ml) on all SUV computation results!
  • must validate with additional datasets.
  • would LIKE to add opacity to the transfer function -- (sent question to Nicole about this.).
  • see latest screen shots above.


  • Volume rendering switch currently disabled.
  • propagateVolumeSelection after touching node selectors auto-fits data to win -- so annoying! must fix.
  • need to add g/ml units to computation result!!!
  • stupid color range slider does not initialize to span the range by default...
  • need "max" "min" labels on the range slider.

PPT files

Slides for Volumetric Analysis (in progress)