slicer3 for developers – sonia pujol, ph.d. -1- national alliance for medical image computing...

46
Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning Laboratory Harvard Medical School

Upload: gavin-crabtree

Post on 27-Mar-2015

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-1-National Alliance for Medical Image Computing

Programming into Slicer3

Sonia Pujol, Ph.D.

Surgical Planning LaboratoryHarvard Medical School

Page 2: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-2-National Alliance for Medical Image Computing

Slicer3

• An end-user application for image analysis

• An open-source environment for software development

• A software platform that is both easy to use for clinical researchers and easy to extend for programmers

Page 3: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-3-National Alliance for Medical Image Computing

Learning objective

Following this course, you’ll be able

1) to plug-in an external program into Slicer3

2) to implement an image filter and to run the analysis from Slicer3

3) to write and run a test using the CTest tool

Page 4: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-4-National Alliance for Medical Image Computing

Material

This course requires a user compiled version of the Slicer3 softwareand the training dataset:

• Slicer 3 Software and building instructions

http://www.na-mic.org/Wiki/index.php/Slicer3:Downloads

http://www.na-mic.org/Wiki/index.php/Slicer3:Build_Instructions

• HelloWorld.zip archive

DisclaimerIt is the responsibility of the user of 3DSlicer tocomply with both the terms of the license and withthe applicable laws, regulations and rules.

Page 5: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-5-National Alliance for Medical Image Computing

Overview• Part A: integration of the HelloWorld program

into Slicer3

• Part B: implementation of a Discrete Gaussian filter within the HelloWorld module

• Part C: implementation of a test for the HelloWorld module

Page 6: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-6-National Alliance for Medical Image Computing

Part A:Integrating an

executable into Slicer3

Page 7: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-7-National Alliance for Medical Image Computing

Slicer3 Execution Model

• This course is based on the Execution Model which provides a mechanism for incorporating command line programs as Slicer modules.

• The Slicer modules are described using XML files which are used to generate the C++ command line code and the Graphical User Interface (GUI).

www.na-mic.org/Wiki/index.php/Slicer3:Execution_Model_Documentation

Page 8: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-8-National Alliance for Medical Image Computing

HelloWorld_CourseMaterial.tgz archive

unzip the HelloWorld.zip archive

spgr.*

(124 SPGR images)

HelloWorld.cxx

(application)

HelloWorld.xml

(Execution Model)

Page 9: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-9-National Alliance for Medical Image Computing

HelloWorld.xml<?xml version="1.0" encoding="utf-8"?><executable> <category> Demonstration</category> <title> Hello World</title> <description> Slicer Developer Course</description> <version> 1.0</version> <documentation-url></documentation-url> <license></license> <contributor> Sonia Pujol, Ph.D. </contributor> <acknowledgements> This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes

of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. </acknowledgements> <parameters> <label>Input/Output</label> <description>Input/output parameters</description> <image> <name>helloWorldInputVolume</name> <label>Input Volume</label> <channel>input</channel> <index>0</index> <default>None</default> <description>Input volume</description> </image> <image> <name>helloWorldOutputVolume</name> <label>Output Volume</label> <channel>output</channel> <index>1</index> <description>Output filtered</description> </image></parameters></executable>

Module Description

Module Parameters

Open the file HelloWorld.xml

Page 10: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-10-National Alliance for Medical Image Computing

Module Description<?xml version="1.0" encoding="utf-8"?>

<executable>

<category>

Demonstration</category>

<title>

Hello World</title>

<description>

Slicer Developer Course</description>

<version>

1.0</version>

<documentation-url></documentation-url>

<license></license>

<contributor> Sonia Pujol, Ph.D. </contributor>

<acknowledgements>

This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.

</acknowledgements>

Page 11: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-11-National Alliance for Medical Image Computing

Module Parameters<parameters> <label>Input/Output</label> <description>Input/output parameters</description> <image> <name>helloWorldInputVolume</name> <label>Input Volume</label> <channel>input</channel> <index>0</index> <default>None</default> <description>Input volume</description> </image> <image> <name>helloWorldOutputVolume</name> <label>Output Volume</label> <channel>output</channel> <index>1</index>

<default>None</default> <description>Output filtered</description> </image></parameters></executable>

Input Volume

Output Volume

A file that specifies

the image

Page 12: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-12-National Alliance for Medical Image Computing

Open the file HelloWorld.cxx

# include <iostream>

int main(int argc, char * argv []){ std::cout<< “Hello World !”<<std::endl; return 0 ;}

Modifying the source code

Page 13: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-13-National Alliance for Medical Image Computing

Modifying the source code

# include <iostream>

#include “HelloWorldCLP.h”

int main(int argc, char * argv [])

{

PARSE_ARGS;

std::cout<< “Hello World !”<<std::endl;

return EXIT_SUCCESS ;

}

Add the following lines to the file HelloWorld.cxx

Page 14: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-14-National Alliance for Medical Image Computing

Slicer architecture

Applications

Base

CMake

Libs

Modules

Resources

Scripts

Testing

.svn

Utilities

Slicer3

Slicer3-build

Slicer3-lib

Page 15: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-15-National Alliance for Medical Image Computing

Slicer architecture

Applications

Base

CMake

Libs

Modules

Resources

Scripts

Testing

.svn

Utilities

Slicer3

CLI

Copy the 2 files HelloWorld.cxx HelloWorld.xml

into the directory Slicer3\Applications\CLI

Page 16: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-16-National Alliance for Medical Image Computing

Slicer architecture

Applications

Base

CMake

Libs

Modules

Resources

Scripts

Testing

.svn

Utilities

Slicer3

CLI

Open the file CMakeLists.txt

into the directory Slicer3\Applications\CLI

Page 17: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-17-National Alliance for Medical Image Computing

Editing CMakeLists.txt – part 1

Add the following lines to CMakeLists.txt located in Slicer3/Applications/CLI (above the SUBDIRS lines):

SET (CLP HelloWorld)

SET (${CLP}_SOURCE ${CLP}.cxx)

GENERATECLP(${CLP}_SOURCE ${CLP}.xml)

GENERATECLP generates the file HelloWorldCLP.h for parsing the command line arguments.

‘CLP’ means Command Line Processing

Page 18: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-18-National Alliance for Medical Image Computing

Editing CMakeLists.txt – part 2

ADD_EXECUTABLE creates the stand-alone executable HelloWorld.exe that can be run from a command line.

Add the following lines to CMakeLists.txt located in Slicer3/Applications/CLI after the ‘GENERATECLP’ line you just added

ADD_EXECUTABLE(${CLP} ${${CLP}_SOURCE})

TARGET_LINK_LIBRARIES (${CLP} ITKIO ITKBasicFilters ITKCommon)

Page 19: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-19-National Alliance for Medical Image Computing

Mac/LinuxRun ‘make’ in the directory Slicer3-build/Applications/CLI

Windows• Step1: Select BuildBuild Slicer3 to build the solution

Slicer3.sln located in Slicer3-build/ • Step2: Close the solution Slicer3, and re-load it again in the

building environment• Step3: Select the solution HelloWorld, and launch

‘BuildHelloWorld’

Building Slicer3

Page 20: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-20-National Alliance for Medical Image Computing

Mac/LinuxRun ‘./Slicer3’ in Slicer3-build/

Windows

Run ‘./Slicer3.exe’ in Slicer3-build/

Running Slicer3

Page 21: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-21-National Alliance for Medical Image Computing

HelloWorld module in Slicer3

Select the category ‘Demonstration’, and the module ‘HelloWorld’ in the Modules menu

Page 22: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-22-National Alliance for Medical Image Computing

HelloWorld Module in Slicer3

The program ‘HelloWorld’ is now integrated into Slicer3

Page 23: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-23-National Alliance for Medical Image Computing

Part B:Implementing an

image filter

Page 24: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-24-National Alliance for Medical Image Computing

Goal

• In this section, we’ll implement a Gaussian smoothing operator to ‘blur’ the images and remove detail and noise.

• This implementation will allow us to run the filter on volumes loaded in Slicer, and to integrate the resulting filtered volumes as MRML nodes.

Page 25: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-25-National Alliance for Medical Image Computing

Discrete Gaussian Filter

Input volume Output volume

Variance

Discrete Gaussian Filter

Page 26: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-26-National Alliance for Medical Image Computing

<?xml version="1.0" encoding="utf-8"?><executable> <category> Demonstration</category> <title> Hello World</title> <description> Slicer Developer Example</description> <version> 1.0</version> <documentation-url></documentation-url> <license></license> <contributor> Sonia Pujol</contributor> <acknowledgements> This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health

through the NIH Roadmap for Medical Research, Grant U54 EB005149. </acknowledgements> <parameters> <label>Input/Output</label> <description>Input/output parameters</description> ….</parameters>

<parameters> <label>Discrete Gaussian Parameters</label>

<description>Parameters of the Discrete Gaussian Filter </description>

</parameters>

</executable>

Editing the file HelloWorld.xml

Add a new parameter group to HelloWorld.xml

Page 27: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-27-National Alliance for Medical Image Computing

Editing the file HelloWorld.xml<parameters>

<label>Discrete Gaussian Parameters</label>

<description>Parameters of the Discrete Gaussian Filter </description>

<double>

<name>variance</name>

<longflag>--variance</longflag>

<description>Variance ( width of the filter kernel) </description>

<label>Variance</label>

<default>0.5</default>

</double>

</parameters>

Add the parameter ‘variance’ which corresponds to the variance of the Discrete Gaussian Filter to HelloWorld.xml

Page 28: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-28-National Alliance for Medical Image Computing

Implementing I/O functionalities

Add the following lines to HelloWorld.cxx

#include <iostream>

#include "HelloWorldCLP.h"

int main(int argc, char * argv [])

{

PARSE_ARGS;

std::cout << "Hello World!" << std::endl;

return EXIT_SUCCESS ;

}

#include "itkImage.h"

#include "itkImageFileReader.h"

#include "itkImageFileWriter.h"

Page 29: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-29-National Alliance for Medical Image Computing

int main ( int argc, char * argv[]){

PARSE_ARGS;std::cout << "Hello World!" << std::endl;

typedef itk::Image<short,3> ImageType;typedef itk::ImageFileReader<ImageType> ReaderType;typedef itk::ImageFileWriter<ImageType> WriterType;ReaderType::Pointer reader = ReaderType::New();WriterType::Pointer writer = WriterType::New();

return EXIT_SUCCESS;}

Implementing Input/Output functionalities

Add the following command lines to set-up the reading and writing functionalities in the ‘main’ procedure in HelloWorld.cxx

Page 30: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-30-National Alliance for Medical Image Computing

int main ( int argc, char * argv[]){

PARSE_ARGS;std::cout << "Hello World!" << std::endl;typedef itk::Image< short, 3 > ImageType;typedef itk::ImageFileReader< ImageType > ReaderType;typedef itk::ImageFileWriter< ImageType > WriterType;ReaderType::Pointer reader = ReaderType::New();WriterType::Pointer writer = WriterType::New();

reader->SetFileName(helloWorldInputVolume.c_str() );writer->SetFileName (helloWorldOutputVolume.c_str());

return EXIT_SUCCESS;}

Implementing Input/Output functionalities

Set the input and output volumes parameters defined in HelloWorld.xml

Page 31: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-31-National Alliance for Medical Image Computing

#include "itkDiscreteGaussianImageFilter.h"int main ( int argc, char * argv[]){

PARSE_ARGS; std::cout << "Hello World!" << std::endl;typedef itk::Image< short, 3 > ImageType;typedef itk::ImageFileReader< ImageType > ReaderType;typedef itk::ImageFileWriter< ImageType > WriterType;ReaderType::Pointer reader = ReaderType::New();WriterType::Pointer writer = WriterType::New();reader->SetFileName( helloWorldInputVolume.c_str() );writer->SetFileName(helloWorldOutputVolume.c_str());

typedef itk::DiscreteGaussianImageFilter <ImageType, ImageType> FilterType; FilterType::Pointer filter = FilterType::New();

return EXIT_SUCCESS;}

Implementing the filter in HelloWorld.cxx

Implement the filter itk::DiscreteGaussianImageFilter

Page 32: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-32-National Alliance for Medical Image Computing

int main ( int argc, char * argv[]){

PARSE_ARGS;std::cout << "Hello World!" << std::endl;typedef itk::Image< short, 3 > ImageType;typedef itk::ImageFileReader< ImageType > ReaderType;typedef itk::ImageFileWriter< ImageType > WriterType;ReaderType::Pointer reader = ReaderType::New();WriterType::Pointer writer = WriterType::New();reader->SetFileName( helloWorldInputVolume.c_str() );writer->SetFileName (helloWorldOutputVolume.c_str());typedef itk::DiscreteGaussianImageFilter <ImageType, ImageType> FilterType;FilterType::Pointer filter = FilterType::New();try {

filter->SetInput(reader->GetOutput());

filter->SetVariance(variance);

writer->SetInput(filter->GetOutput());

writer->Update();

}

catch (itk::ExceptionObject &excep){

std::cerr << argv[0] << ": exception caught !" << std::endl;

return EXIT_FAILURE;}return EXIT_SUCCESS;}

Implementing the filter in HelloWorld.cxx

Add the following lines for the filter execution:

Page 33: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-33-National Alliance for Medical Image Computing

int main ( int argc, char * argv[]){

PARSE_ARGS;std::cout << "Hello World!" << std::endl;typedef itk::Image< short, 3 > ImageType;typedef itk::ImageFileReader< ImageType > ReaderType;typedef itk::ImageFileWriter< ImageType > WriterType;ReaderType::Pointer reader = ReaderType::New();WriterType::Pointer writer = WriterType::New();reader->SetFileName( helloWorldInputVolume.c_str() );writer->SetFileName (helloWorldOutputVolume.c_str());typedef itk::DiscreteGaussianImageFilter <ImageType, ImageType> FilterType;FilterType::Pointer filter = FilterType::New();

try {

filter->SetInput(reader->GetOutput());

filter->SetVariance(variance);

writer->SetInput(filter->GetOutput());

writer->Update();}

catch (itk::ExceptionObject &excep){

std::cerr << argv[0] << ": exception caught !" << std::endl;

return EXIT_FAILURE;}return EXIT_SUCCESS;}

Final Version of HelloWorld.cxx

- Linux and Mac:

Type make in Slicer3-build/- Windows: build Slicer3.sln

Page 34: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-34-National Alliance for Medical Image Computing

Mac/LinuxRun ‘./Slicer3’ in Slicer3-build/

WindowsRun ‘./Slicer3.exe’ in Slicer3-build/

Running Slicer3

Page 35: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-35-National Alliance for Medical Image Computing

Running the FilterGo in FileAdd Volume and load the dataset spgr.nrrd

Page 36: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-36-National Alliance for Medical Image Computing

Browse to the Category ‘Demonstration’ in the Modules menu, and select the module ‘HelloWorld’

Running the Filter

Page 37: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-37-National Alliance for Medical Image Computing

Select the input volume ‘spgr.nhdr’, the output volume ‘Create New’.Enter the value ‘0.9’ for the variance and click on Apply

Running the Filter

Page 38: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-38-National Alliance for Medical Image Computing

Slicer displays the filtered volume ‘HelloWorldVolume1’.

Running the Filter

Page 39: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-39-National Alliance for Medical Image Computing

Select the Foreground volume ‘spgr.nhdr’ and fade between the Background and Foreground images to visualize the effect of the filter.

Running the Filter

Page 40: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-40-National Alliance for Medical Image Computing

Part C: Testing

Page 41: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-41-National Alliance for Medical Image Computing

Goal• This section describes a simple example for testing that

the ‘help’ functionality of our newly implemented module ‘HelloWorld’ works correctly.

• CTest is a core element of Slicer3’s quality control system for software development.

http://www.cmake.org/Wiki/CMake_Testing_With_CTest

• The goal of ‘HelloWorldTest1’ is to test the following command:

./HelloWorld --help 

Page 42: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-42-National Alliance for Medical Image Computing

HelloWorld Test 1To implement this test, add the following lines to the CMakeLists.txt file located in the directory: Slicer3\Applications\CLI\CMakeLists.txt and build Slicer3

SET (SLICER_EXE ${Slicer3_BINARY_DIR}/Slicer3 )

IF (WIN32)

ADD_TEST(HelloWorldTest1 ${SLICER_EXE} --launch ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${CLP} --help)

ELSE(WIN32)

ADD_TEST(HelloWorldTest1 ${SLICER_EXE} --launch ${EXECUTABLE_OUTPUT_PATH}/${CLP} --help)

ENDIF (WIN32)

Page 43: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-43-National Alliance for Medical Image Computing

HelloWorld Test 1

SET( SLICER_EXE ${Slicer3_BINARY_DIR}/Slicer3 )

IF (WIN32)

ADD_TEST(HelloWorldTest1 ${SLICER_EXE} --launch ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${CLP} --help)

ELSE(WIN32)

ADD_TEST(HelloWorldTest1 ${SLICER_EXE} --launch ${EXECUTABLE_OUTPUT_PATH}/${CLP} --help)

ENDIF (WIN32)

Page 44: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-44-National Alliance for Medical Image Computing

Mac/LinuxIn Slicer3-build/ run

../Slicer3-lib/CMake-build/bin/ctest -R HelloWorldTest1

WindowsIn Slicer3-build/ run

../Slicer3-lib/CMake-build/bin/ctest.exe -R HelloWorldTest1

Running HelloWorldTest1

Page 45: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-45-National Alliance for Medical Image Computing

Running HelloWorldTest1

When the module successfully passes the test, the output below is generated:

Page 46: Slicer3 for developers – Sonia Pujol, Ph.D. -1- National Alliance for Medical Image Computing Programming into Slicer3 Sonia Pujol, Ph.D. Surgical Planning

Slicer3 for developers – Sonia Pujol, Ph.D.

-46-National Alliance for Medical Image Computing

Conclusion

• This course described functionalities for integrating, developing and testing external program within Slicer3.

• The Execution Model of Slicer3 provides a simple mechanism for incorporating command line programs as Slicer modules.

• www.slicer.org