National Alliance for Medical Image Computing Slicer3 plugins Common architecture for interactive...

20
National Alliance for Medical Image Computing http://na-mic.org Slicer3 plugins Common architecture for interactive and batch processing

Transcript of National Alliance for Medical Image Computing Slicer3 plugins Common architecture for interactive...

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