Slicer and ITK
-
Upload
jillian-orr -
Category
Documents
-
view
35 -
download
1
description
Transcript of Slicer and ITK
NA-MICNational Alliance for Medical Image Computing http://na-mic.org
Slicer and ITK
Raul San Jose
National Alliance for Medical Image Computing http://na-mic.org
Foreword• ITK as a library of “source code”
– “Box” of structured reusable source code.
– Library compile when you compile your application. • What did I miss in my C++ book?
– Standard Template Library (STL) framework: containers and iterators.
– Template.– Typename.– Typedef.
• ITK push the envelope of software design into abstraction.
National Alliance for Medical Image Computing http://na-mic.org
How to use ITK?
• Way 1: Develop your own application
My application
Rendering LibraryGUI
ITK pipeline
My Algorithm
My classes
National Alliance for Medical Image Computing http://na-mic.org
How to use ITK?• Way 2: Develop inside your platform (Slicer way)
My platform
Rendering ModuleGUI Module
Core Library Library wrappers
ITK Pipeline
ITK
National Alliance for Medical Image Computing http://na-mic.org
How to make the wrapper?
• Low level: as another object of your library.– Each ITK filter/pipeline is seen as another class of
your library.
• High level: wrapper into other languages as tcl/tk, phyton or java.– ITK supports this approach through CableSwig.
National Alliance for Medical Image Computing http://na-mic.org
Slicer and ITK
TCL / TK(GUI, VTK Interface)
3D Slicer
VTK ITK
wrapper
vtkITK
vtkConnectVTKITK
• Architecture:
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
National Alliance for Medical Image Computing http://na-mic.org
Slicer and ITK
• Data Flow: ITK – VTK
ITK VTK
vtkDataObjectitk::ImportImageContainer
National Alliance for Medical Image Computing http://na-mic.org
Slicer and ITK
• Data Flow: VTK – ITK
VTK ITK
vtkDataObject itk::ImportImageFilter
National Alliance for Medical Image Computing http://na-mic.org
vtkITK: Overview
VTK ITK VTK
vtkImageExport itk::VTKImageImport
itk::VTKImageExport vtkImageImport
itk::MyFilter
vtkITKMyFilter
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
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
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);
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)
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);
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 – …..
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
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"
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 } …..
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
}
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) }
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]
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
National Alliance for Medical Image Computing http://na-mic.org
Demo
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