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
Building the example modules
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
Running the modules
National Alliance for Medical Image Computing http://na-mic.org
ExampleModule.xml
National Alliance for Medical Image Computing http://na-mic.org
ExampleModule.cxx
National Alliance for Medical Image Computing http://na-mic.org
ExampleModule.cxx
National Alliance for Medical Image Computing http://na-mic.org
CMakeLists.txt
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.
National Alliance for Medical Image Computing http://na-mic.org
Slicer3 Plugins
Common architecture for interactive and batch processing