The Visualization Toolkit (VTK)sgpwe.izt.uam.mx/files/users/uami/jrja/VTKOverview.pdf · 2013. 1....

Preview:

Citation preview

The Visualization Toolkit (VTK)The Visualization Toolkit (VTK)

Visión general

The Visualization ToolkitThe Visualization ToolkitUna visión generalUna visión general

William J. SchroederWilliam J. Schroeder

Kitware, Inc.Kitware, Inc.

AgendaAgenda

• Tecnología VTK Tecnología VTK – AntecedentesAntecedentes

– El Modelo GráficoEl Modelo Gráfico– El Modelo de VisualizaciónEl Modelo de Visualización– Rendering de Volumen Rendering de Volumen

• Proceso VTK Proceso VTK – Open SourceOpen Source– Proceso de DesarrolloProceso de Desarrollo

AgendaAgenda

• Tecnología VTK Tecnología VTK – AntecedentesAntecedentes

– El Modelo GráficoEl Modelo Gráfico– El Modelo de VisualizaciónEl Modelo de Visualización– Rendering de Volumen Rendering de Volumen

• Proceso VTK Proceso VTK – Open SourceOpen Source– Proceso de DesarrolloProceso de Desarrollo

VisualizaciónVisualización

Una definición para visualizaciónUna definición para visualización– Mapeo de datos o información hacia imágenes u Mapeo de datos o información hacia imágenes u

otras entradas sensoriales (tacto, sonido, olfato, otras entradas sensoriales (tacto, sonido, olfato, gusto)gusto)

– Emplea (engrana) el sistema de percepción Emplea (engrana) el sistema de percepción humanohumano

– Simple, potencia efectivaSimple, potencia efectiva• Datos complejos• Datos voluminosos

Campos RelacionadosCampos Relacionados

– Mapeado

– Gráficas 3D

– Renderizado de Volumen

– Haptics (tecnología del tacto)

– Juegos / Entretenimiento

– GUI's 3D

– Realidad virtual

– Mapeado

– Gráficas 3D

– Renderizado de Volumen

– Haptics (tecnología del tacto)

– Juegos / Entretenimiento

– GUI's 3D

– Realidad virtual

• Visualización- Científica- Información- Financiera- Datos- Multivariada

• Procesamiento de Imágenes

• Gráficas 2D

• Gráficas estadísticas

• Visualización- Científica- Información- Financiera- Datos- Multivariada

• Procesamiento de Imágenes

• Gráficas 2D

• Gráficas estadísticas

Ejemplo de AplicacionesEjemplo de Aplicaciones

Científica, médica, financiera, información, ...Científica, médica, financiera, información, ...

Simulación

MédicaCT / MRI / Ultrasonido

Negocios

Modelado

Ejemplo de AplicacionesEjemplo de Aplicaciones

Mapeado / GeofísicoMapeado / Geofísico

TendenciasTendencias

• El mercado de gráficas 3D esta creciendoEl mercado de gráficas 3D esta creciendo– Los juegos manejan el hardwareLos juegos manejan el hardware– VRML (Virtual Reality Modeling Languaje), aplicaciones VRML (Virtual Reality Modeling Languaje), aplicaciones

webweb– Realidad VirtualRealidad Virtual– Estándares Gráficos (OpenGL, Direct3D)Estándares Gráficos (OpenGL, Direct3D)– Datos Digitales / 3D Datos Digitales / 3D

• Los datos están apabullando a los usuariosLos datos están apabullando a los usuarios– La visualización es una solución comprobadaLa visualización es una solución comprobada

• Los sistemas Open Source son confiablesLos sistemas Open Source son confiables– Igual de respetable que los comercialesIgual de respetable que los comerciales

Libro de textoLibro de texto

Ahora en cuarta ediciónAhora en cuarta ediciónAhora en cuarta ediciónAhora en cuarta edición

The Visualization ToolkitAn Object-Oriented Approach To 3D GraphicsWill Schroeder, Ken Martin, Bill LorensenISBN 0-13-954694-4Prentice Hall

La primera edición empezó en 1994

¿Qué es VTK?¿Qué es VTK?

Un juego de herramientas de visualizaciónUn juego de herramientas de visualización

– Diseñado e implementado usando principios Diseñado e implementado usando principios orientados a objetoorientados a objeto

– Biblioteca de clases en C++Biblioteca de clases en C++

– Vinculación automática conVinculación automática con Java, TCL, Python Java, TCL, Python

– Portátil entre Unix, Windows/NTPortátil entre Unix, Windows/NT

– Soporta gráficos 3D/2D, visualización, Soporta gráficos 3D/2D, visualización, procesamiento de imágenes, rendering de procesamiento de imágenes, rendering de volumenvolumen

Un juego de herramientas de visualizaciónUn juego de herramientas de visualización

– Diseñado e implementado usando principios Diseñado e implementado usando principios orientados a objetoorientados a objeto

– Biblioteca de clases en C++Biblioteca de clases en C++

– Vinculación automática conVinculación automática con Java, TCL, Python Java, TCL, Python

– Portátil entre Unix, Windows/NTPortátil entre Unix, Windows/NT

– Soporta gráficos 3D/2D, visualización, Soporta gráficos 3D/2D, visualización, procesamiento de imágenes, rendering de procesamiento de imágenes, rendering de volumenvolumen

Otras característicasOtras características

• Conteo de ReferenciasConteo de Referencias• Acceso a métodos Abstract / VirtualAcceso a métodos Abstract / Virtual

– Datos almacenados en tipo nativo (byte, short, int, etc.)Datos almacenados en tipo nativo (byte, short, int, etc.)– datos accesados en tipo nativo (con plantilla) o usando datos accesados en tipo nativo (con plantilla) o usando

una interface generica (float)una interface generica (float)

• Datos en MemoriaDatos en Memoria– algunos objectos leen pedazos (vtkSliceCubes)algunos objectos leen pedazos (vtkSliceCubes)– los datos de la tubería (pipeline -proyecto) pueden los datos de la tubería (pipeline -proyecto) pueden

transferir pedazos basados en limitaciones de memoriatransferir pedazos basados en limitaciones de memoria

VTK no es un SistemaVTK no es un Sistema

• Integrable (incrustable)Integrable (incrustable)– Participa con otro softwareParticipa con otro software

• SeparableSeparable– Puede partir otras “piezas”Puede partir otras “piezas”

• AdaptableAdaptable– No depende de la GUINo depende de la GUI– No depende de la biblioteca de renderizadoNo depende de la biblioteca de renderizado

Arquitectura VTK Arquitectura VTK

Propuesta HibridaPropuesta Hibrida– Compilada en C++ (algoritmos más rápidos)Compilada en C++ (algoritmos más rápidos)

– aplicaciones interpretadas (desarrollo rápido)aplicaciones interpretadas (desarrollo rápido)(Java, Tcl, Python)(Java, Tcl, Python)

– Un juego de herramientas (Un juego de herramientas (toolkit)toolkit)

núcleoC++

Interprete

Capa interpretadagenerada automáticamente

InterpretesInterpretes

• TclTcl• JavaJava• PythonPython

Los interpretesLos interpretes proporcionan plazo de entrega proporcionan plazo de entrega más rápido;más rápido;

Sufren de ejecución más lentaSufren de ejecución más lenta

Interprete Tcl Interprete Tcl

• Fuente vtkInt.tcl (define interprete GUI)Fuente vtkInt.tcl (define interprete GUI)

AgendaAgenda

• Tecnología VTKTecnología VTK – AntecedentesAntecedentes

– El Modelo GráficoEl Modelo Gráfico– El Modelo de VisualizaciónEl Modelo de Visualización– Rendering de Volumen Rendering de Volumen

• Proceso VTK Proceso VTK – Open SourceOpen Source– Proceso de DesarrolloProceso de Desarrollo

Modelo Gráfico Modelo Gráfico

Instancias de ventana de renderizado (vtkRenderWindow)

Instancias de Actor(vtkActor)

Instancias de Renderer (vtkRenderer)

Modelo Gráfico Modelo Gráfico

• RenderWindow – contiene la imagen finalRenderWindow – contiene la imagen final• Renderer – Renderer – dibuja dentro de la ventana de dibuja dentro de la ventana de

renderizadorenderizado• Actor - Actor - combina propiedades / geometríacombina propiedades / geometría• Lights - ilumina actoresLights - ilumina actores• Camera – renderiza la escenaCamera – renderiza la escena• Mappers – representan la geometríaMappers – representan la geometría• Transformaciones – posicionan los actoresTransformaciones – posicionan los actores

AgendaAgenda

• Tecnología VTKTecnología VTK – AntecedentesAntecedentes

– El Modelo GráficoEl Modelo Gráfico– El Modelo de VisualizaciónEl Modelo de Visualización– Rendering de Volumen Rendering de Volumen

• Proceso VTK Proceso VTK – Open SourceOpen Source– Proceso de DesarrolloProceso de Desarrollo

¿Qué es la tubería de ¿Qué es la tubería de Visualización?Visualización?

Una secuencia de objetos de Una secuencia de objetos de procesoproceso que operan sobre que operan sobre objetos de datosobjetos de datos para generar la geometría que se para generar la geometría que se puede renderizar por la máquina de gráficospuede renderizar por la máquina de gráficos

Datos

Filtro

Datos Al sistemagráfico

Datos

Datos Filtro Actor

ActorMapper

Mapper

Fuente

Modelo de Visualización Modelo de Visualización

• Objetos de Datos Objetos de Datos – representan datosrepresentan datos

– proporcionan acceso a datosproporcionan acceso a datos– calculan información particular para datoscalculan información particular para datos

(ejemplo, caja de contorno, derivadas)(ejemplo, caja de contorno, derivadas)

• Objetos de ProcesoObjetos de Proceso– ingieren, transforman, y sacan objetos de datosingieren, transforman, y sacan objetos de datos

– representan algoritmos de visualización representan algoritmos de visualización

Objetos de DatosObjetos de Datos

• Representan una “mancha” de datosRepresentan una “mancha” de datos– contiene instancia de vtkFieldDatacontiene instancia de vtkFieldData

– un arreglo de arreglosun arreglo de arreglos– sin estructura geométrica/topologicasin estructura geométrica/topologica– típicamente no se usa en tuberias (pero sus típicamente no se usa en tuberias (pero sus

subclases tales como vtkDataSet sí)subclases tales como vtkDataSet sí)

• Se pueden convertir a vtkDataSetSe pueden convertir a vtkDataSet– vtkDataObjectToDataSetFiltervtkDataObjectToDataSetFilter

Objetos de Datos / Conjuntos de DatosObjetos de Datos / Conjuntos de Datos

• vtkDataObject es una “mancha” de datosvtkDataObject es una “mancha” de datos– Contiene una instancia de vtkFieldDataContiene una instancia de vtkFieldData

• vtkDataSet es dato con geometría y estructura vtkDataSet es dato con geometría y estructura topológica; y con dato de topológica; y con dato de atributoatributo

Geometría& Topología

Data SetAtributos

Puntos& Celdas

Punto de DatoCelda de Dato

Modelo de Dataset Modelo de Dataset

• Un dataset es un objeto de datos con Un dataset es un objeto de datos con estructuraestructura

• La estructura consiste deLa estructura consiste de– celdas (e.g., polígonos, líneas, voxeles)celdas (e.g., polígonos, líneas, voxeles)– puntos (coordenadas x-y-z)puntos (coordenadas x-y-z)– celdas definidas por lista de conectividad refiriendo celdas definidas por lista de conectividad refiriendo

a los puntosa los puntos– representaciones implícitas representaciones implícitas – representaciones explícitasrepresentaciones explícitas

Celda

Puntos

Tipos de DatasetTipos de Dataset

vtkPolyData

vtkStructuredPoints

vtkStructuredGrid

vtkUnstructuredGrid

vtkRectilinearGrid

Atributos de conjunto de DatosAtributos de conjunto de Datos

• EscalaresEscalares - 1-4 valores ( - 1-4 valores (vtkScalarsvtkScalars))– Proporcionan un solo valor por punto o valores múltiples Proporcionan un solo valor por punto o valores múltiples

(color RGBA)(color RGBA)

• VectoresVectores - 3-vector ( - 3-vector (vtkVectorsvtkVectors))• TensoresTensores - 3x3 matriz simétrica ( - 3x3 matriz simétrica (vtkTensorsvtkTensors))• NormalesNormales – vector unitario ( – vector unitario (vtkNormalsvtkNormals))• Coordenadas de Textura Coordenadas de Textura 1-3D ( 1-3D (vtkTCoordsvtkTCoords))• Campo de DatosCampo de Datos (un arreglo de arreglos) (un arreglo de arreglos)

((vtkFieldDatavtkFieldData))

Objetos de Objetos de Proceso Proceso

Fuente

Mapper

Filtro1 o más salidas

1 o más salidas

1 o más entradas

1 o más entradas

Modelo de tubería de Ejecución Modelo de tubería de Ejecución

dirección de actualización (vía Update())

Fuente

Datos

Filtro

Datos

MapperRender()

dirección de flujo de datos (vía Execute())

Creando topología de tuberíaCreando topología de tubería

• aFilter->aFilter->SetInputSetInput( bFilter->( bFilter->GetOutputGetOutput());());

• El papel del chequeo de tipoEl papel del chequeo de tipo– SetInput() accepta el tipo de dataset o subclaseSetInput() accepta el tipo de dataset o subclase– C++ chequeo en tiempo de compilaciónC++ chequeo en tiempo de compilación– Interprete chequeo en tiempo de ejecuciónInterprete chequeo en tiempo de ejecución

• Decimación, suavizado, normalesDecimación, suavizado, normales• Implementado en C++Implementado en C++

Ejemplo de tuberíaEjemplo de tubería

vtkSmoothPolyDataFilter

vtkDecimatePro

vtkCyberReader

vtkPolyDataNormals

vtkPolyDataMapper

Nota: los objetos de datos nose muestran -> están implica-dos del tipo de salida delfiltro

Crea Lector & DecimadorCrea Lector & Decimador

vtkCyberReader *cyber = vtkCyberReader::New(); cyber->SetFileName("../../vtkdata/fran_cut”);

vtkDecimatePro *deci = vtkDecimatePro::New(); deci->SetInput( cyber->GetOutput() ); deci->SetTargetReduction( 0.9 ); deci->PreserveTopologyOn(); deci->SetMaximumError( 0.0002 );

vtkCyberReader *cyber = vtkCyberReader::New(); cyber->SetFileName("../../vtkdata/fran_cut”);

vtkDecimatePro *deci = vtkDecimatePro::New(); deci->SetInput( cyber->GetOutput() ); deci->SetTargetReduction( 0.9 ); deci->PreserveTopologyOn(); deci->SetMaximumError( 0.0002 );

Suavizador & Objetos Suavizador & Objetos GráficosGráficos

vtkSmoothPolyDataFilter *smooth = vtkSmoothPolyDataFilter::New(); smooth->SetInput(deci->GetOutput()); smooth->SetNumberOfIterations( 20 ); smooth->SetRelaxationFactor( 0.05 );

vtkPolyDataNormals *normals = vtkPolyDataNormals::New(); normals->SetInput( smooth->GetOutput() );

vtkPolyDataMapper *cyberMapper = vtkPolyDataMapper::New(); cyberMapper->SetInput( normals->GetOutput() );

vtkActor *cyberActor = vtkActor::New(); cyberActor->SetMapper (cyberMapper); cyberActor->GetProperty()->SetColor ( 1.0, 0.49, 0.25 ); cyberActor->GetProperty()->SetRepresentationToWireframe();

vtkSmoothPolyDataFilter *smooth = vtkSmoothPolyDataFilter::New(); smooth->SetInput(deci->GetOutput()); smooth->SetNumberOfIterations( 20 ); smooth->SetRelaxationFactor( 0.05 );

vtkPolyDataNormals *normals = vtkPolyDataNormals::New(); normals->SetInput( smooth->GetOutput() );

vtkPolyDataMapper *cyberMapper = vtkPolyDataMapper::New(); cyberMapper->SetInput( normals->GetOutput() );

vtkActor *cyberActor = vtkActor::New(); cyberActor->SetMapper (cyberMapper); cyberActor->GetProperty()->SetColor ( 1.0, 0.49, 0.25 ); cyberActor->GetProperty()->SetRepresentationToWireframe();

Más objetos gráficosMás objetos gráficos

vtkRenderer *ren1 = vtkRenderer::New();

vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer( ren1 );

vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor ::New(); iren->SetRenderWindow( renWin );

ren1->AddActor( cyberActor );ren1->SetBackground( 1, 1, 1 );renWin->SetSize( 500, 500 );

iren->Start();

vtkRenderer *ren1 = vtkRenderer::New();

vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer( ren1 );

vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor ::New(); iren->SetRenderWindow( renWin );

ren1->AddActor( cyberActor );ren1->SetBackground( 1, 1, 1 );renWin->SetSize( 500, 500 );

iren->Start();

ResultadosResultados

Antes(triángulos 52,260)

Después Decimacióny Suavizado

(triángulos 7,477)

Filtro visión general: FuentesFiltro visión general: Fuentes

LectoresLectores• vtkOBJReadervtkOBJReader• vtkBYUReadervtkBYUReader• vtkCyberReadervtkCyberReader• vtkDataSetReadervtkDataSetReader• vtkMCubesReadervtkMCubesReader• vtkPLOT3DReadervtkPLOT3DReader• vtkPolyDataReadervtkPolyDataReader• vtkRectilinearGridReadervtkRectilinearGridReader

• vtkSLCReader• vtkSTLReader• vtkStructuredGridReader• vtkStructuredPointsReader• vtkUnstructuredGridReader• vtkVolume16Reader• vtkFieldDataReader• vtkBMPReader• vtkPNMReader• vtkTIFFReader

FuentesFuentes

Fuentes ProcedimentalesFuentes Procedimentales• vtkEarthSourcevtkEarthSource• vtkConeSourcevtkConeSource• vtkCylinderSourcevtkCylinderSource• vtkDiskSourcevtkDiskSource• vtkLineSourcevtkLineSource• vtkOutlineSourcevtkOutlineSource• vtkPlaneSourcevtkPlaneSource• vtkPointSourcevtkPointSource• vtkTextSourcevtkTextSource

• vtkVectorTextvtkVectorText

• vtkSphereSource• vtkTexturedSphereSource• vtkAxes• vtkCursor3D• vtkProgrammableSource• vtkPointLoad

FiltrosFiltros

• vtkAppendFilter vtkAppendFilter

• vtkAppendPolyData vtkAppendPolyData • vtkBooleanTexturevtkBooleanTexture • vtkBrownianPointsvtkBrownianPoints • vtkCastToConcretevtkCastToConcrete • vtkCellCentersvtkCellCenters • vtkCellDataToPointData vtkCellDataToPointData • vtkCullVisiblePoints vtkCullVisiblePoints • vtkCleanPolyDatavtkCleanPolyData

• vtkClipPolyDatavtkClipPolyData

• vtkClipVolume• vtkConnectivityFilter• vtkContourFilter• vtkCutter• vtkDashedStreamLine• vtkDecimate• vtkDecimatePro• vtkDelaunay2D• vtkDelaunay3D• vtkDicers

Filtros (2)Filtros (2)

• vtkEdgePointsvtkEdgePoints

• vtkElevationFiltervtkElevationFilter• vtkExtractEdgesvtkExtractEdges• vtkExtractGeometryvtkExtractGeometry• vtkExtractGridvtkExtractGrid• vtkExtractTensorComponentsvtkExtractTensorComponents• vtkExtractUnstructuredGridvtkExtractUnstructuredGrid• vtkExtractVOIvtkExtractVOI• vtkExtractVectorComponentsvtkExtractVectorComponents• vtkFeatureEdgesvtkFeatureEdges

• vtkGaussianSplatter• vtkGeometryFilter• vtkGlyph3D• vtkHedgeHog• vtkHyperStreamline• vtkIdFilter• vtkLinearExtrusionFilter• vtkMaskPolyData• vtkOutlineFilter• vtkPointDataToCellData

Filtros (3)Filtros (3)

• vtkMaskPoints• vtkMaskPolyData• vtkMergeFilter• vtkMergePoints• vtkPolyDataNormals• vtkProbeFilter• vtkProgrammableAttributeDataFilter• vtkSelectVisiblePoints• vtkSpatialRepresentationFilter• vtkStreamLine

• vtkProgrammableFiltervtkProgrammableFilter

• vtkProjectedTexturevtkProjectedTexture• vtkRecursiveDividingCubesvtkRecursiveDividingCubes• vtkReverseSensevtkReverseSense• vtkRibbonFiltervtkRibbonFilter• vtkRotationalExtrusionFiltervtkRotationalExtrusionFilter• vtkShepardMethodvtkShepardMethod• vtkShrinkFiltervtkShrinkFilter• vtkShrinkPolyDatavtkShrinkPolyData• vtkSmoothPolyDataFiltervtkSmoothPolyDataFilter

Filtros (4)Filtros (4)

• vtkStreamPointsvtkStreamPoints

• vtkStrippervtkStripper• vtkStructuredGridGeometryFiltervtkStructuredGridGeometryFilter• vtkStructuredGridOutlineFiltervtkStructuredGridOutlineFilter• vtkStructuredPointsGeometryFiltervtkStructuredPointsGeometryFilter• vtkTensorGlyphvtkTensorGlyph• vtkTextureMapToBoxvtkTextureMapToBox• vtkTextureMapToCylindervtkTextureMapToCylinder• vtkTextureMapToPlanevtkTextureMapToPlane• vtkTextureMapToSpherevtkTextureMapToSphere

• vtkTexturedSphereSource• vtkThreshold• vtkThresholdPoints• vtkThresholdTextureCoords• vtkTransformFilter• vtkTransformPolyDataFilter• vtkTransformTextureCoords• vtkTriangleFilter• vtkTriangularTCoords• vtkTriangularTexture

Filtros (5)Filtros (5)

• vtkTubeFiltervtkTubeFilter

• vtkVectorDotvtkVectorDot• vtkVectorNormvtkVectorNorm• vtkVectorTopologyvtkVectorTopology• vtkVoxelModellervtkVoxelModeller• vtkWarpScalarvtkWarpScalar• vtkWarpTovtkWarpTo• vtkWarpVector vtkWarpVector

MappersMappers

Escritores• vtkIVWriter• vtkBYUWriter• vtkSTLWriter• vtkMCubesWriter• vtkPolyDataWriter• vtkRectilinearGridWriter• vtkStructuredGridWriter• vtkStructuredPointsWriter• vtkUnstructuredGridWriter• vtkFieldDataWriter• vtkBMPWriter

• vtkPNMWriter• vtkTIFFWriter

Mappers Gráficos• vtkPolyDataMapper• vtkDataSetMapper• (mappers de volumen - después)• (mappers de imagen - después)

Administración de DatosAdministración de Datos

¿Por qué es crítico del tamaño la ¿Por qué es crítico del tamaño la administración de datos?administración de datos?– Imágenes médicas (512x512x100x2 = 50Meg)Imágenes médicas (512x512x100x2 = 50Meg)

– Visualización científica Visualización científica – Dotos de video (fluoroscopía, ultrasonido)Dotos de video (fluoroscopía, ultrasonido)– X-ray digitalesX-ray digitales– Imágenes satelitalesImágenes satelitales

Data ManagementData Management

• Datos de CT de la mujer visible 870 MBytes 1734 rebanadas de 512x512x2

• Datos de CT de la mujer visible 870 MBytes 1734 rebanadas de 512x512x2

Cálculo de flujo: Cálculo de flujo: Robert Meakin Robert Meakin Visualización: Visualización: David Kenwright y David Kenwright y David Lane David Lane Numerical Aerodynamic Numerical Aerodynamic Simulation Division at Simulation Division at NASA Ames Research NASA Ames Research CenterCenter

• Bell-Boeing V-2 2 tiltrotor 140 Gbytes

• Bell-Boeing V-2 2 tiltrotor 140 Gbytes

EjemplosEjemplos

• Modelado de turbulencia (Ken Jansen RPI)Modelado de turbulencia (Ken Jansen RPI)

• 8.5 millones de tetrahedros, en 200 pasos de tiempo8.5 millones de tetrahedros, en 200 pasos de tiempo

• 150 million tetrahedra, en 2000 pasos de tiempo (pronto)150 million tetrahedra, en 2000 pasos de tiempo (pronto)

Conteo de ReferenciaConteo de Referencia

• Herramienta para minimizar el costo de Herramienta para minimizar el costo de memoria compartiendo el almacenamiento.memoria compartiendo el almacenamiento.

• Se permite que más de un objeto proceso se Se permite que más de un objeto proceso se refiera al mismo objeto de datos.refiera al mismo objeto de datos.

• Sólo cuando la cuenta de referencia es cero Sólo cuando la cuenta de referencia es cero se borra el objeto.se borra el objeto.

AgendaAgenda

• Tecnología VTKTecnología VTK – AntecedentesAntecedentes

– El Modelo GráficoEl Modelo Gráfico– El Modelo de VisualizaciónEl Modelo de Visualización– Rendering de VolumenRendering de Volumen

• Proceso VTK Proceso VTK – Open SourceOpen Source– Proceso de DesarrolloProceso de Desarrollo

Estructura de Datos de VolumenEstructura de Datos de Volumen

Regilla rectilínea regular 3D

vtkStructuredPoints:Dimensiones = (Dx, Dy, Dz)Espaciamiento = (Sx, Sy, Sz)

Estrategías de Rendering de Estrategías de Rendering de Volumen Volumen

Propuesta de orden-imagenPropuesta de orden-imagen: Atravesar la : Atravesar la imagen pixel-por-pixel y muestrear el imagen pixel-por-pixel y muestrear el volumen vía ray-casting.volumen vía ray-casting.

Ray CastingRay Casting

Estrategías de Rendering de Estrategías de Rendering de VolumenVolumen

Propuesta de orden-objeoPropuesta de orden-objeo: Atravesar el : Atravesar el volumen, y proyectar al plano de la imagen.volumen, y proyectar al plano de la imagen.

Salpicando (splatting)Salpicando (splatting)celda-por-celdacelda-por-celda

Mapeo de TexturaMapeo de Texturaplano-por-planoplano-por-plano

Funciones de TransferenciaFunciones de Transferencia

Las funciones de transferencia son la clave para renderizar volumenLas funciones de transferencia son la clave para renderizar volumen

Proceso Ray Casting Proceso Ray Casting

Funciones de Ray Cast Funciones de Ray Cast

Ray DistanceRay Distance

Sca

lar

Val u

eSca

lar

Val u

e

Una Una Función de Rayo Función de Rayo examina los examina los valores escalares encontrados a lo largo valores escalares encontrados a lo largo de un rayo, y produce un valor de pixel de un rayo, y produce un valor de pixel final de acuerdo a las propiedades del final de acuerdo a las propiedades del volumen, y de la función de volumen, y de la función de transferencia específica.transferencia específica.

Interpolación de valor escalarInterpolación de valor escalar

v = v = (1-x)(1-y)(1-z)S(0,0,0) +(1-x)(1-y)(1-z)S(0,0,0) +

(x)(1-y)(1-z)S(1,0,0) +(x)(1-y)(1-z)S(1,0,0) +

(1-x)(y)(1-z)S(0,1,0) +(1-x)(y)(1-z)S(0,1,0) +

(x)(y)(1-z)S(1,1,0) +(x)(y)(1-z)S(1,1,0) +

(1-x)(1-y)(z)S(0,0,1) +(1-x)(1-y)(z)S(0,0,1) +

(x)(1-y)(z)S(1,0,1) +(x)(1-y)(z)S(1,0,1) +

(1-x)(y)(z)S(0,1,1) +(1-x)(y)(z)S(0,1,1) +

(x)(y)(z)S(1,1,1)(x)(y)(z)S(1,1,1)

x

yz

(0,0,0)

(1,1,1)

v = S(rnd(x), rnd(y), rnd(z))

Vecino más cercano Trilineal

Interpolación de valor escalarInterpolación de valor escalar

Interpolación porInterpolación porVecino más cercanoVecino más cercano

InterpolaciónInterpolaciónTrilinealTrilineal

Función de Máxima IntensidadFunción de Máxima Intensidad

Distancia de Rayo Distancia de Rayo Valo

r esc

ala

rV

alo

r esc

ala

r

Valor escalarValor escalar

Op

aci

dad

Op

aci

dad

Valor escalar maximizadoValor escalar maximizado

Valor MáximoValor Máximo

Magnitud Gradiente Magnitud Gradiente

Op

aci

dad

Op

aci

dad

Función CompositeFunción Composite

Ray DistanceRay DistanceSca

lar

Valu

eS

cala

r V

alu

e

Scalar ValueScalar Value

Op

aci

t yO

paci

t y

Usa Usa αα-mezcla a lo largo del -mezcla a lo largo del rayo para producir un valor rayo para producir un valor RGBA final para cada pixel.RGBA final para cada pixel.

Gradient MagnitudeGradient Magnitude

Op

aci

t yO

paci

t y

Función de IsosuperficieFunción de Isosuperficie

Distancia Rayo Distancia Rayo Valo

r esc

ala

rV

alo

r esc

ala

r Valor IsosuperficieValor Isosuperficie

Para recorrido de Para recorrido de rayo en valor de rayo en valor de isosuperficie. Usa isosuperficie. Usa ecuación cúbica si ecuación cúbica si la interpolación es la interpolación es trilineal.trilineal.

Distancia de muestreoDistancia de muestreo

Tamaño pasoTamaño paso0.1 Unidad0.1 Unidad

Tamaño pasoTamaño paso1.0 Unidad1.0 Unidad

Tamaño pasoTamaño paso2.0 Unidad2.0 Unidad

Geometría Intermezclada Geometría Intermezclada

Potencial alto Potencial alto de proteína de de proteína de

hierrohierro

CT de rodilla CT de rodilla de la mujer de la mujer

visiblevisible

AgendaAgenda

• Tecnología VTK Tecnología VTK – AntecedentesAntecedentes

– El Modelo GráficoEl Modelo Gráfico– El Modelo de VisualizaciónEl Modelo de Visualización– Rendering de Volumen Rendering de Volumen

• Proceso VTKProceso VTK – Open SourceOpen Source– Proceso de DesarrolloProceso de Desarrollo

¿Por qué código abierto?¿Por qué código abierto?

• DivertidoDivertido– forma comunidadesforma comunidades

– involucra experiencia de pasatiempo / aprendizajeinvolucra experiencia de pasatiempo / aprendizaje

• RentableRentable – modelos de negocio exitoso – modelos de negocio exitoso– Red Hat, Inc. (Linux Support)Red Hat, Inc. (Linux Support)

– Cygnus SolutionsCygnus Solutions

– Usa Valor versus Valor de venta (modelo de Usa Valor versus Valor de venta (modelo de negocio orientado a servicio)negocio orientado a servicio)

• AltruismoAltruismo - sirve al planeta - sirve al planeta

¿Por qué código abierto?¿Por qué código abierto?

• Kick M$’s Butt (patear el trasero)Kick M$’s Butt (patear el trasero)

• Libertad intelectualLibertad intelectual– Ideas son propiedadIdeas son propiedad

– El territorio se esta reclamandoEl territorio se esta reclamando

– La libertad de expresión esta siendo controlada La libertad de expresión esta siendo controlada por otrospor otros

– ¡No renuncies a tu libertad!¡No renuncies a tu libertad!

¿Por qué código abierto?¿Por qué código abierto?

• Desarrollo de Software escalable Desarrollo de Software escalable – Eric Raymond Eric Raymond The Cathedral & The BazaarThe Cathedral & The Bazaar

““la revisión por par de open-source es el la revisión por par de open-source es el único método escalable para alcanzar alta único método escalable para alcanzar alta confiabilidad y calidad.”confiabilidad y calidad.”

• Microsoft Halloween DocumentsMicrosoft Halloween Documents– www.www.opensource.orgopensource.org

AgendaAgenda

• Tecnología VTK Tecnología VTK – AntecedentesAntecedentes

– El Modelo GráficoEl Modelo Gráfico– El Modelo de VisualizaciónEl Modelo de Visualización– Rendering de Volumen Rendering de Volumen

• Proceso VTKProceso VTK – Open SourceOpen Source– Proceso de DesarrolloProceso de Desarrollo

Proceso de DesarrolloProceso de Desarrollo

• Estilo / Metodología estándar C++ Estilo / Metodología estándar C++ • Documentación incrustada en el código (use Documentación incrustada en el código (use

Doxygen para generar HTML)Doxygen para generar HTML)• Use el sistema de control de código fuente CVSUse el sistema de control de código fuente CVS

– Permite ediciones simultáneasPermite ediciones simultáneas– Une archivos, señala conflicosUne archivos, señala conflicos

• Generador de envoltura automático (ver SWIG Generador de envoltura automático (ver SWIG en www.swig.org)en www.swig.org)

• Prueba de regresión diariaPrueba de regresión diaria

Proceso de prueba (Nightly, Proceso de prueba (Nightly, cada noche)cada noche)• Prueba de Regresión ~500 ejemplosPrueba de Regresión ~500 ejemplos• Chequeo de estiloChequeo de estilo• Checar PrintSelf()Checar PrintSelf()• Checar problemas de memoriaChecar problemas de memoria

– Leer/Escribir más alla de los límites de memoriaLeer/Escribir más alla de los límites de memoria

– Fugas de memoriaFugas de memoria

• Checar coberturaChecar cobertura– Correr alrededor de 75%Correr alrededor de 75%

– Si no esta cubierta, no trabajaSi no esta cubierta, no trabaja

Prueba de RegresiónPrueba de Regresión

• Comparar imagen generada contra imagen Comparar imagen generada contra imagen “correcta” estándar“correcta” estándar– Comparación pixel-por-pixelComparación pixel-por-pixel

– Se puede usar métrica de umbralSe puede usar métrica de umbral– Ajustada para efectos como difuminado (dithering)Ajustada para efectos como difuminado (dithering)– OpenGL es bastante flojo acerca de la calidad de OpenGL es bastante flojo acerca de la calidad de

imagenimagen

RecursosRecursos

• VTKVTK– www.kitware.com/vtk.htmlwww.kitware.com/vtk.html– vtkusers mailing listvtkusers mailing list– other resources (Sebastien Barre’s web pages)other resources (Sebastien Barre’s web pages)

• Eric Raymond Eric Raymond The Cathedral and the BazaarThe Cathedral and the Bazaar

• CVS DocumentationCVS Documentation

• www.opensource.orgwww.opensource.org

Recommended