Difference between revisions of "Documentation/Labs/OpenGLFilters"

From Slicer Wiki
Jump to: navigation, search
Line 52: Line 52:
 
* handle the I/O communication between the <code>vtkImageData</code> and the GPU Texture using fully the VTK shader infrastructure, since the shader infrastructure is already available in VTK (safe binding, automatic versioning, etc... http://www.vtk.org/Wiki/Shader_In_VTK).
 
* handle the I/O communication between the <code>vtkImageData</code> and the GPU Texture using fully the VTK shader infrastructure, since the shader infrastructure is already available in VTK (safe binding, automatic versioning, etc... http://www.vtk.org/Wiki/Shader_In_VTK).
 
* child classes will handle different approach (e.g. multipass/iterative filtering).
 
* child classes will handle different approach (e.g. multipass/iterative filtering).
 +
 +
Ken Martin provided this structure in VTK: [https://gitlab.kitware.com/ken-martin/vtk/commit/c3a6dfa9023d905151ee61eb83f58bef765d0e2e]
  
 
=== Next steps ===
 
=== Next steps ===

Revision as of 16:52, 5 July 2016

Home < Documentation < Labs < OpenGLFilters

Overview

Here we summarize some efforts for enabling image processing (filtering/smoothing) in VTK/Slicer using OpenGL.

The reason behind this page is trying to coordinate the various projects regarding this subject.

Meetings

9th June 2016

Attended by: Davide Punzo, Jean-Christophe Fillion-Robin, Ken Martin, Utkarsh Ayachit and Robert Maynard

Based on an original idea of Steve Pieper


In order to implement efficient filtering, OpenGL solution seems the best that fits our needs:

  • no requirement on external library (CUDA or OpenCL).
  • performance boosting is fairly good to allow almost interactive filtering up to volume of ~10^8 voxels.

2016.06.09 SlicerAstro CPU-vs-GPU Filtering.png
Source: Denoising HI sources: an investigation of adaptive and interactive filters (submitted)



Use Case

Based on the Steve Pieper implementation of the classes:

vtkOpenGLTextureImage
vtkOpenGLShaderComputation

here an Use case:

https://github.com/Punzo/SlicerAstro/tree/master/AstroSmoothing/Logic
https://www.overleaf.com/read/jbxxsqtctpgv

Full integration in VTK

For a full integration of the openGLfilters pipeline in VTK, it will be ideal to have a general purpose class:

VTKOpenGLImageAlgorithm

this class will have the duty to:

  • handle the I/O communication between the vtkImageData and the GPU Texture using fully the VTK shader infrastructure, since the shader infrastructure is already available in VTK (safe binding, automatic versioning, etc... http://www.vtk.org/Wiki/Shader_In_VTK).
  • child classes will handle different approach (e.g. multipass/iterative filtering).

Ken Martin provided this structure in VTK: [1]

Next steps

  • Talk with Steve and getting his feedback.
  • Ken will be very happy to contribute a base class vtkOpenGLImageAlgorithm
    • Timeline: in 2-3 weeks after his vacation
    • Most likely derived from vtkImageAlgorithm, the class will integrate feature from VTK/Rendering/OpenGL/vtkGaussianBlurPass.h to facilitate the use of custom shaders to implement GPU based filters.

References