




Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Ejercicios visualización de datos
Tipo: Ejercicios
1 / 8
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





In [1]: import vtk vtk.VTK_VERSION Copia la siguiente función en tu notebook para poder ver la visualización como resultado vtk_show(renderer) saca un captura y la muestra en el notebook Esto no bloquea la interfaz, no como renderWindowInteractor.Start() que hasta que no se cierra la ventana no deja al notebook ejecutar nada más In [2]: from IPython.display import Image def vtk_show(renderer, width= 600 , height= 450 ): """ Takes vtkRenderer instance and returns an IPython Image with the rendering. """ renderWindow = vtk.vtkRenderWindow() renderWindow.SetOffScreenRendering( 1 ) renderWindow.AddRenderer(renderer) renderWindow.SetSize(width, height) renderWindow.Render() windowToImageFilter = vtk.vtkWindowToImageFilter() windowToImageFilter.SetInput(renderWindow) windowToImageFilter.Update() writer = vtk.vtkPNGWriter() writer.SetWriteToMemory( 1 ) writer.SetInputConnection(windowToImageFilter.GetOutputPort()) writer.Write() data = memoryview(writer.GetResult()) return Image(data)
In [3]: coneSource = vtk.vtkConeSource() coneSource.SetResolution( 10 ) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(coneSource.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderWindow.Render() renderWindowInteractor.Start() Out[1]: '8.2.0'
In [4]: vtk_show(renderer) Out[4]:
Utiliza un Cilindro como Source Cambiando las propiedades de color del actor consigue una imágen como la siguiente
Cambia el estilo de interacción a vtkInteractorStyleTrackballCamera Añade un observer al interactor que escuche por 'LeftButtonPressEvent' y cambie el color del cilindro a uno aleatorio
Carga las posiciones, conexiones y radio de los átomos y píntalos todos como en la figura. Una posibilidad sería crear tres funciones, parsePoints , parseScalars y parseConnections. Cada una abriría su fichero, leería y parsearía la información y crearía los vtkPoints , vtkFloatArray y vtkCellArray tal como se describe a continuación: Crea un sólo vtkPolyData y rellenalo con los datos: SetPoints para los átomos. Todos los puntos están en atoms-coordinates.txt Hay que rellenar un vtkPoints SetLines para las conexiones. Todos las conexiones están en atoms-radius.txt Hay que rellenar un vtkCellArray Cada conexión requiere meter una nueva Cell de 2 puntos con InsertNextCell(2) y a continuación meter los dos puntos de la conexión con InsertCellPoint GetPointData().SetScalars para los radios Todos los radios están en atoms-connections.txt Hay que rellenar un vtkFloatArray Combina vtkSphereSource y vtkGlyph3D para generar todas las esferas vtkGlyph3D tiene un método SetSourceConnection al que se le pasaría la salida del source para que pueda replicar una espera por cada punto del PolyData Colorea las esferas según su radio con vtkColorTransferFunction Pinta las conexiones con vtkTubeFilter Si le cambiais el color a algún actor pero pinta otros colores diferentes es posible que sea el mapper que esté pintando sus escalares.Para que no los pinte es útil la función ScalarVisibilityOff Calcula el boundingBox con vtkOutlineFilter y píntalo junto con los demás actores
Carga el dataset "asymmetric.tiff". Es un stack de imágenes donde el background vale 0 y los vóxeles de cada objeto están marcados con un número correlativo, donde cada objeto tiene un número diferente y todos los vóxeles del mismo objeto el mismo número. A este tipo de datos se le llama labelmap y se usa mucho para representar el resultado de una segmentación de imágenes. Debería tener 15 objetos diferentes. Con GetScalarRange() obten el rango de etiquetas en el labelmap Haz un renderizado volumétrico utilizando las clases: vtkPiecewiseFunction para poner la opacidad del background a 0 y de todos los objetos a 1 vtkColorTransferFunction para asignar un color diferente a cada objeto, eg: interpolarlos desde rojo el primer objeto al azul el último objeto vtkVolumeProperty establece el color y la opacidad de los vóxeles Añade el volúmen a un mapper ( vtkGPUVolumeRayCastMapper ) y este a su vez a un actor ( vtkVolume )
Renderiza el "One-third_resolution_stack.tif" como el widget vtkImagePlaneWidget Pon su orientazón al Eje Z Añadele el Interactor y muéstalo con EnabledOn Usa como transfer function vtkDiscretizableColorTransferFunction Para generar colores distinguibles para objetos correlativos usa vtkColorSeries y su GetColorRepeating
Renderiza el mismo dataset "asymmetric.tif" esta vez convirtiendo a malla el labelmap utilizando Marching Cubes Haz lo mismo con "symmetric.tif" Colorea todos los objetos de symmetric de rojo y los de asymmetric de verde