Presentation is loading. Please wait.

Presentation is loading. Please wait.

NA-MIC National Alliance for Medical Image Computing Slicer and ITK Raul San Jose.

Similar presentations


Presentation on theme: "NA-MIC National Alliance for Medical Image Computing Slicer and ITK Raul San Jose."— Presentation transcript:

1 NA-MIC National Alliance for Medical Image Computing http://na-mic.org Slicer and ITK Raul San Jose

2 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.

3 National Alliance for Medical Image Computing http://na-mic.org How to use ITK? Way 1: Develop your own application My application Rendering Library GUI ITK pipeline My Algorithm My classes

4 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 Module GUI Module Core Library Library wrappers ITK Pipeline ITK

5 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.

6 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:

7 National Alliance for Medical Image Computing http://na-mic.org Slicer and ITK Data Flow: VTK – ITK – VTK VTKITK VTK vtkImageExport itk::VTKImageImport itk::VTKImageExport vtkImageImport

8 National Alliance for Medical Image Computing http://na-mic.org Slicer and ITK Data Flow: ITK – VTK ITKVTK vtkDataObject itk::ImportImageContainer

9 National Alliance for Medical Image Computing http://na-mic.org Slicer and ITK Data Flow: VTK – ITK VTKITK vtkDataObject itk::ImportImageFilter

10 National Alliance for Medical Image Computing http://na-mic.org vtkITK: Overview VTK ITK VTK vtkImageExport itk::VTKImageImport itk::VTKImageExport vtkImageImport itk::MyFilter vtkITKMyFilter

11 National Alliance for Medical Image Computing http://na-mic.org vtkITK: Base classes vtkITKImageToImageFilter vtkITKImageToImageFilter2DFF vtkITKImageToImageFilterUSUS vtkImageExport vtkImageImport vtkITKImageToImageFilterF2F2 vtkITKImageToImageFilterF3F3 vtkITKImageToImageFilterFF itk::VTKImageExport,3>> Itk::VTKImageImport,3> > vtkITKMyFilter vtkImageToImageFilter

12 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

13 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);

14 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)

15 National Alliance for Medical Image Computing http://na-mic.org vtkITK: Wrapping protected: //BTX typedef itk::GradientAnisotropicDiffusionImageFilter<Superclass::InputImageType, Superclass::InputImageType> ImageFilterType; vtkITKGradientAnisotropicDiffusionImageFilter() : Superclass ( ImageFilterType::New() ){}; ~vtkITKGradientAnisotropicDiffusionImageFilter() {}; ImageFilterType* GetImageFilterPointer() { return dynamic_cast ( m_Filter.->GetPointer() ); //ETX private: vtkITKGradientAnisotropicDiffusionImageFilter(const vtkITKGradientAnisotropicDiffusionImageFilter&); // Not implemented. void operator=(const vtkITKGradientAnisotropicDiffusionImageFilter&); // Not implemented. }; vtkStandardNewMacro(vtkITKGradientAnisotropicDiffusionImageFilter);

16 National Alliance for Medical Image Computing http://na-mic.org Slicer Module ITKFilters.tcl Modules methods: core methods –proc ITKFiltersInit –proc ITKFiltersBuildGUI –proc ITKFiltersBuildVTK –proc ITKFiltersEnter –proc ITKFiltersExit Other methods: callback methods –proc ITKFiltersApply –…..

17 National Alliance for Medical Image Computing http://na-mic.org Slicer Module proc 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

18 National Alliance for Medical Image Computing http://na-mic.org Slicer Module proc 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"

19 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 } …..

20 National Alliance for Medical Image Computing http://na-mic.org Slicer Module proc 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 }

21 National Alliance for Medical Image Computing http://na-mic.org Slicer Module proc ITKFiltersApply #Preparing INPUT and OUTPUT volume If {$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) }

22 National Alliance for Medical Image Computing http://na-mic.org Slicer Module proc 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]

23 National Alliance for Medical Image Computing http://na-mic.org Slicer Module proc 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

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

25 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


Download ppt "NA-MIC National Alliance for Medical Image Computing Slicer and ITK Raul San Jose."

Similar presentations


Ads by Google