Difference between revisions of "Slicer3:UIDesign:WorkingProblems:BCAnalysis:PET"
(Created page with 'Back to Project Overview = SUV Analysis for Breast Cancer =') |
|||
(44 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Back to [[Slicer3:UIDesign#Working_problem:_CTSC:_Facilitating_Breast_Tumor_Analysis_Workflow_in_Slicer | Project Overview]] | Back to [[Slicer3:UIDesign#Working_problem:_CTSC:_Facilitating_Breast_Tumor_Analysis_Workflow_in_Slicer | Project Overview]] | ||
− | = SUV Analysis for | + | = SUV Analysis = |
+ | |||
+ | == Goal== | ||
+ | |||
+ | 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 | ||
+ | |||
+ | == Approach == | ||
+ | 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. | ||
+ | * ... | ||
+ | |||
+ | == Resources == | ||
+ | [[image:PETSUV.jpg|thumb|center|500px|Display guide]] | ||
+ | |||
+ | [[media:PETResponseSlides.ppt | case study MS PPT Slides shows tumor ]] | ||
+ | |||
+ | [[media:HowToReadPETDICOMFiles.doc | MS Word document with DICOM tags for SUV ]] | ||
+ | |||
+ | == Slicer Display progress (shown from early to latest) == | ||
+ | [[image:PETCTInSlicer1.png|thumb|center|500px|Initial view in Slicer (w/o volume rendering)]] | ||
+ | |||
+ | [[image:RonsPETCTVolumeRender.png|thumb|center|500px|Ron's PETCT in Slicer: GPU Raycasting (GLSL) with Gradient Magnitude Opacity Modulation]] | ||
+ | |||
+ | [[image:DraftPETCTModule1.png|thumb|center|600px|Draft module (w/o display) DICOM Tags missing?]] | ||
+ | |||
+ | [[image:DraftPETCTVWithoutolumeRender.png|thumb|center|500px| Latest with new PET heat color LUT and SUV computation from DICOM header information.]] | ||
+ | |||
+ | [[image:DraftPETCTVWithInverseGrey.png|thumb|center|500px| Pre-TX: Latest with inverse Grey display and manual parameter entry.]] | ||
+ | |||
+ | [[image:DraftPETCTVWithInverseGreyPostTX.png|thumb|center|500px| Post-TX Latest with inverse Grey display and auto parameter entry.]] | ||
+ | |||
+ | [[image:ValidatedPreTX.png|thumb|center|500px| Pre-TX Latest with heat display display and additional (yellow) VOI specified in liver. Matching computed SUVmax from commercial package.]] | ||
+ | |||
+ | [[image:ValidatedPostTX.png|thumb|center|500px| 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). | ||
+ | |||
+ | == '''STATUS''' == | ||
+ | * 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. | ||
+ | |||
+ | == '''KNOWN BUGS / USABILITY PROBLEMS''' == | ||
+ | * 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 == | ||
+ | |||
+ | [[media:PETCTPresentation.ppt | Slides for Volumetric Analysis (in progress) ]] |
Latest revision as of 18:22, 8 March 2010
Home < Slicer3:UIDesign:WorkingProblems:BCAnalysis:PETBack to Project Overview
Contents
SUV Analysis
Goal
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
- extract parameters from dicom header including
- Compute SUV of followup
- extract parameters from dicom header including
- concentration
- injected activity
- patient weight
- Compute SUV again.
- use maximum value
- extract parameters from dicom header including
- 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
Approach
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.
- ...
Resources
case study MS PPT Slides shows tumor
MS Word document with DICOM tags for SUV
Slicer Display progress (shown from early to latest)
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).
STATUS
- 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.
KNOWN BUGS / USABILITY PROBLEMS
- 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.