Taller No. 8: Segmentación por regiones con VTK & BBTK · Retome el script de visualización...

7
Taller No. 8: Segmentación por regiones con VTK & BBTK Universidad de los Andes Ingeniería de Sistemas y Computación ISIS-4804 Procesamiento y Análisis de Imágenes Profesores: Marcela Hernández ([email protected]) / Daniel Mejía (dan- [email protected]) Monitora: Mónica Lozano ([email protected]) Objetivo: Segmentar interactivamente una escanografía 3D y visualizar la imagen segmentada en 2D (corte por corte) y en 3D (surface rendering) utilizando cajas BBTK que usan clases de VTK. Instrucciones: 1. Descargue de SICUA el paquete bbUtilities (bbUtilities.zip) junto con su dll (bbUtilities.dll). Allí encontrará las siguientes cajas: - JPEGReader - JPEGWriter - BMPReader - BMPWriter - ImageThreshold2 - ImageReader2: Envoltura de la clase vtkImageReader, cuya documentación puede ser consultada en la página web de vtk (http://www.vtk.org). 2. Descargue de SICUA los siguientes scripts que le servirán de guía durante el taller: testSurfaceWithImageReader.bbs y MPRSegmentation.bbs. 3. Descargue de SICUA la imagen sobre la cual se va a trabajar en el taller (head.zip) y descomprímala en el subdirectorio BBTK\more\data\imagen. 4. Desarrolle los 3 pasos que se describen a continuación. 5. Una vez finalizado el taller, haga la entrega habitual por SICUA. Nombre OBLIGATORIAMENTE sus scripts de entrega tal y como se indica en los siguientes pasos y figuras.

Transcript of Taller No. 8: Segmentación por regiones con VTK & BBTK · Retome el script de visualización...

Taller No. 8: Segmentación por regiones con VTK & BBTK Universidad de los Andes Ingeniería de Sistemas y Computación ISIS-4804 Procesamiento y Análisis de Imágenes Profesores: Marcela Hernández ([email protected]) / Daniel Mejía ([email protected]) Monitora: Mónica Lozano ([email protected])

 Objetivo: Segmentar interactivamente una escanografía 3D y visualizar la imagen segmentada en 2D (corte por corte) y en 3D (surface rendering) utilizando cajas BBTK que usan clases de VTK. Instrucciones: 1. Descargue de SICUA el paquete bbUtilities (bbUtilities.zip) junto con su dll

(bbUtilities.dll). Allí encontrará las siguientes cajas: - JPEGReader - JPEGWriter - BMPReader - BMPWriter - ImageThreshold2 - ImageReader2: Envoltura de la clase vtkImageReader, cuya documentación puede

ser consultada en la página web de vtk (http://www.vtk.org).

2. Descargue de SICUA los siguientes scripts que le servirán de guía durante el taller: testSurfaceWithImageReader.bbs y MPRSegmentation.bbs.

3. Descargue de SICUA la imagen sobre la cual se va a trabajar en el taller (head.zip) y

descomprímala en el subdirectorio BBTK\more\data\imagen. 4. Desarrolle los 3 pasos que se describen a continuación. 5. Una vez finalizado el taller, haga la entrega habitual por SICUA. Nombre

OBLIGATORIAMENTE sus scripts de entrega tal y como se indica en los siguientes pasos y figuras.

PRIMER PASO: Desarrollar un script bbs (llamado testImageReader_<loginEstudiante>.bbs) que permita visualizar los cortes 2D del volumen original

Las cajas BBTK que se utilizarán en esta parte son: • ImageReader2: para leer la imagen (el volumen). • Viewer2D: para visualizar el volumen. • Slider: para escoger el corte 2D del volumen que se desea visualizar.

La apariencia final de esta primera aplicación debe ser la siguiente (Fig. 1):

Figura 1 – Apariencia final de la aplicación correspondiente al script testImageReader_<loginEstudiante>.bbs

 

 

SEGUNDO PASO: Desarrollar un script bbs (llamado testThreshold_3D_2D_<loginEstudiante>.bbs) que permita segmentar interactivamente el volumen original y visualizar el resultado en cortes 2D y en superficie 3D

Retome el script de visualización desarrollado en el punto anterior y adicione las siguientes cajas BBTK: • ImageThreshold: para realizar la umbralización de la imagen. • Slider: para permitir al usuario escoger el umbral inferior para la segmentación. • Slider: para permitir al usuario escoger el umbral superior para la segmentación. • Slider: para permitir al usuario escoger el isovalor que se utilizará para generar la superficie

3D a partir del volumen segmentado. • Surface: para generar la superficie 3D correspondiente a la región segmentada del volumen. • Viewer3D: para visualizar objetos tridimensionales.

La apariencia final de esta segunda aplicación debe ser la siguiente (Fig. 2):

Figura 2 – Apariencia final de la aplicación correspondiente al script testThreshold_3D_2D_<loginEstudiante>.bbs Note que hay dos visualizadores diferentes: uno para visualizar el volumen corte por corte (2d) y otro para visualizar la superficie 3D del volumen segmentado.

AYUDA: para crear la superficie 3D guíese por el script bbs llamado testSurfaceWithImageReader que se encuentra en SICUA adjunto a este enunciado. Revise detalladamente la línea: connect viewer.Renderer surface.Renderer y explique qué hace esta línea.

TERCER PASO: Desarrollar un script bbs (llamado MPRSegmentation <loginEstudiante>.bbs) que permita segmentar un volumen utilizando el algoritmo de crecimiento de regiones a partir de un punto semilla seleccionado interactivamente por el usuario

Las cajas BBTK que se utilizarán en esta parte pertenecen al paquete maracasvisu y son las siguientes: • MPR: es una caja que permite visualizar cortes axiales, sagitales y coronales de un volumen

(Fig. 3).

Figura 3 – Planos de orientación o cortes de un volumen.

• SegmentationConnectivity: es una envoltura de la clase vtkImageSeedConnectivity, que se encarga de segmentar una imagen por medio del método de crecimiento de regiones a partir de un punto semilla.

La apariencia final de esta tercera aplicación debe ser la siguiente (Fig. 4 y Fig. 5):

Figura 4 – Apariencia final de la aplicación correspondiente al script MPRSegmentation_ <loginEstudiante>.bbs en modo de visualización 4-View

Figura 5 – Apariencia final de la aplicación correspondiente al script MPRSegmentation_ <loginEstudiante>.bbs en modo de visualización Clipping

AYUDA: • El punto semilla requerido para el algoritmo de crecimiento de regiones es escogido por el

usuario en la misma ventana MPR, haciendo doble clic en alguna de las vistas (axial, coronal o sagital) y corresponde a la intersección de los ejes que aparecen en color rojo. Revise la documentación de la caja MPR del paquete maracasvisu para ver cómo se obtiene dicho punto. En especial, revise las siguientes salidas detenidamente: - Salida Point - Salida Renderer

• Para construir este tercer script del taller, parta del siguiente esqueleto de script llamado MPRSegmentation.bbs (que se encuentra en SICUA adjunto a este enunciado) y complételo de forma tal que se obtenga el pipeline mostrado en la Fig. 6. Las instrucciones para completar este script se encuentran bajo la forma de comentarios dentro del mismo.

Figura 6 – Pipeline completo de segmentación (así debe quedar el pipeline del script

MPRSegmentation.bbs una vez usted lo haya completado)

MPRSegmentation.bbs load std load vtk load wx load maracasvisu load Utilities new Sizer sizerA new Split mainSplit #MPR new MPR mpr #Reading the image new ImageReader2 reader set reader.xExtent "0 255" set reader.yExtent "0 255" set reader.zExtent "1 93" include bbPrependDataPath new PrependDataPath pdp set pdp.In "imagen\headsq" connect pdp.Out reader.FilenamePrefix connect reader.Out mpr.In #Inicialice la caja del filtro de segmentación de tipo SegmentationConnectivity y nómbrela segmentationconnectivity #Cree la superficie de tipo Surface y nómbrela surface #Inicialice la superficie (surface) con los siguientes valores: # Opacidad= 0.3 # IsoValue =100 #Title new StaticText staticTextThreshold set staticTextThreshold.In "Threshold" #Slider threshold new SliderMinMax sliderThreshold set sliderThreshold.Orientation 1 set sliderThreshold.InW 300 set sliderThreshold.InH 80 set sliderThreshold.InMax 6000 set sliderThreshold.InMin 0 set sliderThreshold.InMaxShow 6000 set sliderThreshold.InMinShow 1200 set sliderThreshold.ShowActual false #Threshold for segmentation new ConcatStrings concatstringsThreshold set concatstringsThreshold.In2 " "

#Point information new StaticText staticTextMPRpoint new ConcatStrings mensaje set mensaje.In1 "Punto: " connect mpr.Point mensaje.In2 connect mensaje.Out staticTextMPRpoint.In #Segmentation #Asigne la imagen leída (salida de reader) a la caja de segmentación (entrada de segmentationconnectivity) #Asigne el punto escogido en el MPR (salida Point del mpr) a la caja de segmentación (entrada PositionXYZ de segmentationconnectivity) #Asigne el volumen segmentado que arroja la caja de segmentación (salida del segmentationconnectivity) a la superficie creada anteriormente (entrada de surface) #Ponga la superficie (surface) en el render del MPR. En otras palabras, conecte el Renderer de surface con el Renderer de mpr connect sliderThreshold.OutStart concatstringsThreshold.In1 connect sliderThreshold.OutEnd concatstringsThreshold.In3 connect concatstringsThreshold.Out segmentationconnectivity.ThresholdMinMax #Boton new CommandButton commandButton set commandButton.In "exec staticTextMPRpoint; exec segmentationconnectivity; exec surface" set commandButton.Label "Segmentar" #Interface connect mainSplit.WinChild sizerA.WinParent connect mainSplit.WinChild mpr.WinParent connect sizerA.WinChild staticTextThreshold.WinParent connect sizerA.WinChild sliderThreshold.WinParent connect sizerA.WinChild commandButton.WinParent connect sizerA.WinChild staticTextMPRpoint.WinParent #graph of the pipeline graph print $pdp.Out$ e xec mainSplit