Arquitectura de VTK

The Visualization Toolkit es un sistema orientado a objetos. La clave para utilizar VTK eficientemente es tener un buen conocimiento de los modelos de objetos fundamentales. Con esto, es mucho más fácil combinar estos objetos para construir aplicaciones.

VTK está constituido por dos modelos de objetos: Graphics Model y Visualization Model.

Graphics model
Los objetos principales que componen el graphics model son los siguientes:
  • vtkActor, vtkActor2D, vtkVolume ( subclases de vtkProp y vtkProp3D)
  • vtkLight
  • vtkCamera
  • vtkProperty, vtkProperty2D
  • vtkMapper, vtkMapper2D (subclases de vtkAbstractMapper)
  • vtkTransform
  • vtkLookupTable, vtkColorTransferFunction (subclases de vtkScalarsToColors)
  • vtkRenderer
  • vtkRenderWindow
  • vtkRenderWindowInteractor
Al combinar estos objetos creamos una “escena”.

Los “props” representan las cosas que vemos en escena. Los que son utilizados en 3D son del tipo vtkProp3D y los representados es 2D son del tipo vtkActor2D. Los props no representan directamente su geometría, sino que ésta es referida a “mappers”, los cuales son responsables de la representación de datos (entre otras cosas). Los props también se refieren a una propiedad del objeto. La propiedad del objeto controla la apariencia del prop (color, efecto de luces, representación de la renderización, etc).

Los “actores” y “volúmenes” tienen un objeto de transformación interna (vtkTransform). Este objeto encapsula una matriz de transformación 4x4 que controla la posición, orientación y escala del prop.

Las “luces” (vtkLight) se usan para representar y manipular la iluminación de la escena. Solo se emplean en 3D.

La “cámara” (vtkCamera) controla cómo la geometría 3D es proyectada en imagen 2D durante el proceso de renderización. Tiene varios métodos para posicionar y orientar. Además controla la perspectiva de la proyección y la visión estéreo. Esto no es necesario en 2D.
El “mapper” (vtkMapper) junto con el “lookup table” (vtkLookupTable) son usados para transformar y renderizar geometría. El mapper proporciona la interfaz entre el pipeline de visualización y el graphics model. VtkLookupTable es una subclase de vtkScalarsToColors, también lo es vtkColorTransferFunction, la cual se usa para renderizar volúmenes. Las subclases de vtkScalarsToColors son responsables de “mapear” los valores de los datos a color.


Visualization model 
 
La función del “pipeline gráfico” consiste en transformar datos gráficos en imágenes, y la del “pipeline de visualización” en crear esos datos gráficos a partir de la información necesaria; es decir, el pipeline de visualización es el encargado de construir la representación geométrica que será renderizada por el pipeline gráfico.

VTK emplea dos tipos básicos de objetos en esta tarea:

  • vtkDataObject
  • vtkProcessObject

Los “data objects” representan datos de varios tipos. La clase vtkDataObject puede interpretarse como un conjunto genérico de datos. A los datos que tienen una estructura formal se les llama “dataset” (de la clase vtkDataSet). 

Los data objects consisten en una estructura (de puntos y celdas) geométrica y topológica, así como en unos atributos de datos que pueden ser, por ejemplo, escalares o vectores. Los atributos de datos pueden ser asociados con los puntos o celdas del dataset. Las celdas son agrupaciones topológicas de puntos, que forman las unidades del dataset y se usan para interpolar información entre puntos. 


Datasets empleados por VTK

Los “process objects”, también llamados filtros, operan en los data objects para generar nuevos data objects. Representan los algoritmos del sistema. Process y data objects se conectan para formar los pipelines de visualización. 

Un ejemplo de ello es la siguiente figura, en la que las flechas representan la dirección del flujo de datos:

 Pipeline de visualización


Existen varios tipos importantes de process objects:
 Process objects

Los “fuentes” son objetos que generan datos leyendo (reader objects) o construyendo uno o más data objects (procedural source objects).

Los “filtros” pueden tener varios data objects en la entrada, y generar uno o más data objects en la salida.

Los “mappers” transforman los data objects en datos gráficos, los cuales son renderizados por la máquina gráfica.

Es necesario llevar a cabo varios pasos para la construcción del pipeline de visualización:
Primero, la topología se construye usando variaciones de los métodos que asignan a la entrada de un filtro la salida de otro filtro. Por ejemplo, en C++ se haría de la siguiente forma:

aFilter -> SetInput ( anotherFilter -> GetOutput( ) ) ;

Segundo, debemos tener mecanismos para controlar la ejecución del pipeline.

Solo necesitaremos ejecutar las partes del pipeline necesarias para actualizar la salida.

Tercero, el ensamblaje del pipeline requiere que sólo aquellos objetos compatibles entre sí puedan enlazarse con los métodos SetInput() y GetOutput().

Finalmente, debemos decidir si conservar o no los data objects una vez que el pipeline es ejecutado. Los dataset de visualización suelen ser bastante grandes, lo que es necesario tener en cuenta para la aplicación con éxito de las herramientas de visualización.





Fuente:
Desarrollo de algoritmos de procesamiento  de  imágenes con VTK 
Autor: Ignacio Berzal Moreno