22
NA-MIC National Alliance for Medical Image Computing http://na-mic.org Slicer and ITK Steve Pieper, PhD Raul San Jose, PhD Alex Yarmarkovich, PhD

Slicer and ITK

  • Upload
    maren

  • View
    54

  • Download
    1

Embed Size (px)

DESCRIPTION

Slicer and ITK. Steve Pieper, PhD Raul San Jose, PhD Alex Yarmarkovich, PhD. Overview. Embedding ITK vtkITK framework Filtering Example Generic Reader Example. How to use ITK?. “Conventional Way”: Develop your own application. My application. Rendering Library. GUI. My Algorithm. - PowerPoint PPT Presentation

Citation preview

Page 1: Slicer and ITK

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

Slicer and ITK

Steve Pieper, PhD

Raul San Jose, PhD

Alex Yarmarkovich, PhD

Page 2: Slicer and ITK

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

Overview

• Embedding ITK– vtkITK framework

• Filtering Example

• Generic Reader Example

Page 3: Slicer and ITK

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

How to use ITK?• “Conventional Way”: Develop your own application

My application

Rendering LibraryGUI

ITK pipeline

My Algorithm

My classes

Page 4: Slicer and ITK

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

How to use ITK?

• “Embedding”: Develop inside your platform (Slicer way)

My platform

Rendering Module(vtk)

GUI Module

Core Library (vtk)

Library wrappers

ITK Pipeline

ITK

Page 5: Slicer and ITK

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

Slicer and ITK

• Data Flow: VTK – ITK – VTK

VTK ITK VTK

vtkImageExport itk::VTKImageImport

itk::VTKImageExport vtkImageImport

Page 6: Slicer and ITK

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

vtkITK: Overview

VTK ITK VTK

vtkImageExport itk::VTKImageImport

itk::VTKImageExport vtkImageImport

itk::MyFilter

vtkITKMyFilter

Page 7: Slicer and ITK

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

vtkITK: Base classes

vtkITKImageToImageFilter

vtkITKImageToImageFilter2DFF

vtkITKImageToImageFilterUSUS

vtkImageExport

vtkImageImport

vtkITKImageToImageFilterF2F2

vtkITKImageToImageFilterF3F3

vtkITKImageToImageFilterFF

itk::VTKImageExport<itk::Image<float>,3>>

itk::VTKImageImport<itk::Image<float>,3>>

vtkITKMyFilter

vtkImageToImageFilter

Page 8: Slicer and ITK

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

vtkITK: Example

• Case: Perform a edge-preserving filtering as a preprocessing before segmentation.

• Algorithm: Anisotropic diffusion process.

• Code: itk::GradientAnisotropicDiffusionImageFilter.http://www.itk.org/Doxygen16/html/classitk_1_1GradientAnisotropicDiffusionImageFilter.html

Page 9: Slicer and ITK

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

vtkITK: Wrapping

#include "vtkITKImageToImageFilterFF.h"#include "itkGradientAnisotropicDiffusionImageFilter.h"#include "vtkObjectFactory.h"

class VTK_EXPORT vtkITKGradientAnisotropicDiffusionImageFilter : public vtkITKImageToImageFilterFF

{ public: static vtkITKGradientAnisotropicDiffusionImageFilter *New();

vtkTypeRevisionMacro(vtkITKGradientAnisotropicDiffusionImageFilter, vtkITKImageToImageFilterFF);

Page 10: Slicer and ITK

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

vtkITK: Wrapping void SetConductanceParameter ( double value ) { DelegateITKInputMacro ( SetConductanceParameter, value ); };

double GetConductanceParameter () { DelegateITKOutputMacro(GetConductanceParameter) ; };

double GetTimeStep () { DelegateITKOutputMacro(GetTimeStep) ; };

m_Filter.GetPointer()->SetConductanceParameter(value)

Page 11: Slicer and ITK

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

vtkITK: Wrappingprotected: //BTX typedef itk::GradientAnisotropicDiffusionImageFilter<Superclass::InputImageType, Superclass::InputImageType> ImageFilterType; vtkITKGradientAnisotropicDiffusionImageFilter() : Superclass ( ImageFilterType::New() )

{}; ~vtkITKGradientAnisotropicDiffusionImageFilter() {}; ImageFilterType* GetImageFilterPointer() { return dynamic_cast<ImageFilterType*>

( m_Filter.->GetPointer() ); //ETXprivate: vtkITKGradientAnisotropicDiffusionImageFilter(const

vtkITKGradientAnisotropicDiffusionImageFilter&); // Not implemented. void operator=(const vtkITKGradientAnisotropicDiffusionImageFilter&); // Not

implemented.};vtkStandardNewMacro(vtkITKGradientAnisotropicDiffusionImageFilter);

Page 12: Slicer and ITK

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

Slicer ModuleITKFilters.tcl

• Modules methods: core methods– proc ITKFiltersInit– proc ITKFiltersBuildGUI– proc ITKFiltersBuildVTK– proc ITKFiltersEnter– proc ITKFiltersExit

• Other methods: callback methods– proc ITKFiltersApply – …..

Page 13: Slicer and ITK

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

Slicer Moduleproc ITKFiltersInit

set m ITKFilters

set Module($m,author) “NAMIC people"

set Module($m,row1List) "Help Main" set Module($m,row1Name) "{Help} {Main}" set Module($m,row1,tab) Main

set Module($m,procGUI) ITKFiltersBuildGUI set Module($m,procVTK) ITKFiltersBuildVTK set Module($m,procMRML) ITKFiltersUpdateGUI set Module($m,procEnter) ITKFiltersEnter set Module($m,procExit) ITKFiltersExit

Page 14: Slicer and ITK

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

Slicer Moduleproc ITKFiltersInit

set ITKFilters(filters) " GradientAnisotropicDiffusionImageFilter “

set ITKFilters($filter,params) "SetConductanceParameter

SetNumberOfIterations \ SetTimeStep" set param SetConductanceParameter set ITKFilters($filter,$param) 1 set ITKFilters($filter,$param,text) "Conductance" set ITKFilters($filter,$param,maxmin) "1 10“ set ITKFilters($filter,$param,res) 0.1 set ITKFilters($filter,$param,widget) "scale"

Page 15: Slicer and ITK

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

Slicer Module

proc ITKFiltersBuildGUI

set fMain $Module(ITKFilters,fMain) set f $fMain

foreach frame "Top Middle Floating Bottom" { frame $f.f$frame -bg $Gui(activeWorkspace) pack $f.f$frame -side top -padx 0 -pady $Gui(pad) -fill x } …..

Page 16: Slicer and ITK

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

Slicer Moduleproc ITKFiltersBuildGUI

"scale" { eval {label $fwidget.l$param -text $ITKFilters($filter,$param,text)

\ -width 12 -justify right } $Gui(WLA) eval {entry $fwidget.e$param -justify right -width 4 \ -textvariable ITKFilters($filter,$param) } $Gui(WEA) eval {scale $fwidget.s$param \ -from [lindex $ITKFilters($filter,$param,maxmin) 0] \ -to [lindex $ITKFilters($filter,$param,maxmin) 1] \ -variable ITKFilters($filter,$param)\ -orient vertical \ -resolution $ITKFilters($filter,$param,res) } $Gui(WSA) pack $fwidget.l$param $fwidget.e$param $fwidget.s$param \ -side left -padx $Gui(pad) -pady 0 }

Page 17: Slicer and ITK

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

Slicer Moduleproc ITKFiltersApply

#Preparing INPUT and OUTPUT volumeIf {$v2 == -5} { set name [Volume($v1,node) GetName] set v2 [DevCreateNewCopiedVolume $v1 "" ${name}_filter ] set node [Volume($v2,vol) GetMrmlNode] Mrml(dataTree) RemoveItem $node set nodeBefore [Volume($v1,vol) GetMrmlNode] Mrml(dataTree) InsertAfterItem $nodeBefore $node MainUpdateMRML } else { set v2name [Volume($v2,node) GetName] set continue [DevOKCancel "Overwrite $v2name?"] if {$continue == "cancel"} { return 1 } # They say it is OK, so overwrite! Volume($v2,node) Copy Volume($v1,node) }

Page 18: Slicer and ITK

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

Slicer Moduleproc ITKFiltersApply

#Caster vtkImageCast _cast _cast SetOutputScalarTypeToFloat _cast SetInput [Volume($v1,vol) GetOutput] _cast Update #Create Object vtkITK$filter _filter foreach param $ITKFilters($filter,params) { _filter $param $ITKFilters($filter,$param) } _filter SetInput [_cast GetOutput]

Page 19: Slicer and ITK

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

Slicer Moduleproc ITKFiltersApply

_filter AddObserver StartEvent MainStartProgress _filter AddObserver EndEvent MainEndProgress _filter AddObserver ProgressEvent "MainShowProgress _filter" _filter Update#Assign output [Volume($v2,vol) GetOutput] DeepCopy [_filter GetOutput] #Destroy pipeline _cast Delete _filter SetOutput "" _filter Delete

Page 20: Slicer and ITK

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

Demo

Page 21: Slicer and ITK

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

Enjoy!

Page 22: Slicer and ITK

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

vtkConnectVTKITK

VTK ITK VTK

itkMyFilterFF

CableSwig

vtkImageExport itk::VTKImageImport

itk::VTKImageExport vtkImageImport

ITK

vtkConnectVTKITK Slicer Module