20
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 Slicer3 plugins Common architecture for interactive and batch processing

Embed Size (px)

Citation preview

Page 1: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

Slicer3 plugins

Common architecture for interactive and batch processing

Page 2: National Alliance for Medical Image Computing  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

Page 3: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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

Page 4: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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

Page 5: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

Example module

http://www.nitrc.org/projects/slicer3examples/

Page 6: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

Configuring example modules

… from a Slicer3 installation … from a Slicer3 build

Page 7: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

Building the example modules

Page 8: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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

Page 9: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

Running the modules

Page 10: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

ExampleModule.xml

Page 11: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

ExampleModule.cxx

Page 12: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

ExampleModule.cxx

Page 13: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

CMakeLists.txt

Page 14: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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

Page 15: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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

Page 16: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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

Page 17: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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"]

Page 18: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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

Page 19: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

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.

Page 20: National Alliance for Medical Image Computing  Slicer3 plugins Common architecture for interactive and batch processing

National Alliance for Medical Image Computing http://na-mic.org

Slicer3 Plugins

Common architecture for interactive and batch processing