+ All Categories
Home > Documents > Slicer and ITK

Slicer and ITK

Date post: 30-Jan-2016
Category:
Upload: maren
View: 46 times
Download: 1 times
Share this document with a friend
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
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
Transcript
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


Recommended