Upload
magee-berger
View
93
Download
1
Embed Size (px)
DESCRIPTION
Slicer3 plugins. Common architecture for interactive and batch processing. User Desktop. Slicer 3.0. Algorithms. ITK. VTK. Slicer Modules. Scripts of Slicer Mods. VTK Apps Using ITK. Batch Programs. Non-NAMIC Cmd tools. BatchMake. BIRN Grid Wizard. The grand vision…. User - PowerPoint PPT Presentation
Citation preview
National Alliance for Medical Image Computing http://na-mic.org
Slicer3 plugins
Common architecture for interactive and batch processing
National Alliance for Medical Image Computing http://na-mic.org
The grand vision…
UserDesktopAlgorithms ITK VTK Slicer
Modules
VTK AppsUsing ITK
Scripts ofSlicer Mods
BatchPrograms
Non-NAMICCmd tools BatchMake
BIRN GridWizard
Slicer 3.0
National Alliance for Medical Image Computing http://na-mic.org
Common architecture for interactive and batch processing
UserDesktopAlgorithms ITK VTK Slicer
Modules
VTK AppsUsing ITK
Scripts ofSlicer Mods
BatchPrograms
Non-NAMICCmd tools BatchMake
BIRN GridWizard
Slicer 3.0
National Alliance for Medical Image Computing http://na-mic.org
Each module has …
… an entry in the module menu
… a panel of user interface controls
National Alliance for Medical Image Computing http://na-mic.org
Example module
http://www.nitrc.org/projects/slicer3examples/
National Alliance for Medical Image Computing http://na-mic.org
Configuring example modules
… from a Slicer3 installation … from a Slicer3 build
National Alliance for Medical Image Computing http://na-mic.org
Adding example modules to Slicer3
… from a Slicer3ExampleModules installation
… from a Slicer3ExampleModules build
* Slicer3 restart required
National Alliance for Medical Image Computing http://na-mic.org
Communicating status (easy)
#include "vtkPluginFilterWatcher.h"
...
vtkMarchingCubes *cubes = vtkMarchingCubes::New();
cubes->SetInput(reader->GetOutput());
vtkPluginFilterWatcher watchCubes(cubes, "Generate Isosurface", CLPProcessInformation, .5, 0.0);
vtkDecimatePro *decimate = vtkDecimatePro::New();
decimate->SetInput(cubes->GetOutput());
vtkPluginFilterWatcher watchDecimate(decimate, "Reduce Triangle Count", CLPProcessInformation, .5, 0.5);
decimate->Update();
VTK
#include "itkPluginFilterWatcher.h
...
typedef itk::MedianImageFilter<ImageType,ImageType> FilterType;
FilterType::Pointer median = FilterType::New();
itk::PluginFilterWatcher watchMedian(median, "Denoise Image", CLPProcessInformation);
Median->Update();
ITK
National Alliance for Medical Image Computing http://na-mic.org
Communicating status (hard)
<filter-start> <filter-name> name of program section or algorithm </filter-name> <filter-comment> description of program section or algrotihm </filter-comment> </filter-start>
<filter-progress> floating number from 0 to 1 </filter-progress>
<filter-end> <filter-name> name of program section or algorithm </filter-name> <filter-time> execution time </filter-time> </filter-end>
Executable
extern "C" { struct ModuleProcessInformation { /** Inputs from calling application to the module **/ unsigned char Abort; /** Outputs from the module to the calling application **/ float Progress; char ProgressMessage[1024]; void (*ProgressCallbackFunction)(void *); void *ProgressCallbackClientData; double ElapsedTime; } }
Shared object
National Alliance for Medical Image Computing http://na-mic.org
Python modules
XML = """<?xml version="1.0" encoding="utf-8"?> <executable> <category>Filtering.Denoising</category> ...
def toXML(): return XML;
def Execute ( inputVolume, outputVolume, conductance=1.0, timeStep=0.0625, iterations=1 ): print "Executing Python Demo Application!" Slicer = __import__ ( "Slicer" ); slicer = Slicer.Slicer() in = slicer.MRMLScene.GetNodeByID ( inputVolume ); out = slicer.MRMLScene.GetNodeByID ( outputVolume );
filter = slicer.vtkITKGradientAnisotropicDiffusionImageFilter.New() filter.SetConductanceParameter ( conductance ) filter.SetTimeStep ( timeStep ) filter.SetNumberOfIterations ( iterations ) filter.SetInput ( in.GetImageData() ) filter.Update() out.SetAndObserveImageData(filter.GetOutput()) return
National Alliance for Medical Image Computing http://na-mic.org
Parameters
<integer> | <float> | <double> | <boolean> | <string> | <integer-vector> | <float-vector> | <double-vector> | <string-vector> | <integer-enumeration> | <float-enumeration> | <double-enumeration> | <string-enumeration> | <file> | <directory> | <image>[type="scalar|label|tensor|diffusion-weighted|vector|model"] | <geometry> [type="fiberbundle|model"] | <point>[multiple="true|false"] [coordinateSystem="lps|ras|ijk"] | <region>[multiple="true|false"] [coordinateSystem="lps|ras|ijk"]
National Alliance for Medical Image Computing http://na-mic.org
Parameter description
<name> * C++ variable name of the parameter
<description> * Help message for parameter
<label> * GUI label for the parameter
<default> Default value
<flag> * Single character flag, e.g. –f
<longflag> * Single word flag, e.g. --outputImage
<constraints> Block around minimum/maximum/step. Trigger a slider to be used.
<minimum> Minimum parameter value
<maximum> Maximum parameter value
<step> Step size
<channel> * Input or output parameter (image, geometry, file, directory)
<index> * Position of a parameter without a flag. Starts at 0
<enumeration> * Block around element
<element> * Choice value for an enumeration
* Required tags
* Required under certain conditions
National Alliance for Medical Image Computing http://na-mic.org
Behind the scenes
• Tasks queued for processing thread• Three types of modules:
– executable,
– shared object, and
– Python modules
• Scalar images sent via files for executables and memory* for shared objects and python
• Vector images, tensor images, geometry, tables, transforms sent via files
• Scalars, file names, directories, fiducials, regions sent via command line
* VTK-based modules using scalar images are only supported as executable (command line) modules.