Institut für Computervisualistik Universität Koblenz 05.07.2012
Inhaltsverzeichnis 1 Motivation 2 Volumendaten 3 Pipeline 4 Transferfunktionen 5 Gradienten 6 Volumenvisualisierung 7 IVR 8 DVR
Wissenschaftliche Visualisierung Visualisierung, Exploration und Analyse von Datensätzen Datensätze stammten aus Messungen oder aus Simulationen von real-world Phenomenen Bsp.: Strömungssimulation um Fahrzeuge, Generierung von Modellen aus Sensordaten, Medizin
Anwendung - Archäologie Figure: Uni Siegen Figure: Uni Erlangen
Anwendung - Ingenieurwesen Figure: Uni Siegen Figure: TU Wien
Anwendung - Medizin Figure: VRVIS Figure: Uni Koblenz ;-)
Ziele Wissen aus Daten/Simulationen extrahieren Exploration der Daten (Suche ohne spezifische Hypothese) Hypothesentesten, basierend auf Messungen, Simulationen und deren Visualisierung Präsentation von Ergebnissen
Volumen - Definition Volumen - Definitionen Volumendatensatz Eine Menge V von Samples (x,y,z,v) Repräsentieren den Wert v an einer gegebenen 3D Position (x,y,z) Voxel (Volume Element), Analogie zu Pixel (Picture Element) Volumenvisualisierung Volumendatensatz = 3D Skalarfeld, auch möglich 3D Vektorfeld... Volumenvisualisierung = Extrahieren von bedeutsamen Informationen aus Volumendaten
Volumen - Definition Volumen - Definitionen Volumendatensatz Eine Menge V von Samples (x,y,z,v) Repräsentieren den Wert v an einer gegebenen 3D Position (x,y,z) Voxel (Volume Element), Analogie zu Pixel (Picture Element) Volumenvisualisierung Volumendatensatz = 3D Skalarfeld, auch möglich 3D Vektorfeld... Volumenvisualisierung = Extrahieren von bedeutsamen Informationen aus Volumendaten
Volumen - Definition Volumen - Definitionen 2D Anordnung auf einem 2D Grid Horizontale und vertikale Richtungen gleiche Distanzen pixel distance Konstante Abstände ermöglichen Positionsbestimmung durch pixel distance * index
Volumen - Definition Volumen - Definitionen 3D Volumendaten kombinieren einzelne Bilder zu einer 3D Repräsentation Anordnung auf einem 3D Grid Voxel befinden sich an den Gitternetzpunkten Acht benachbarte Voxel bilden eine Volume Cell
Volumen - Definition Volumen - Definitionen 3D Abstand zwischen Slices slice distance Drei Abstände in die jeweilige Richtung voxel spacing Position eines Voxels V i,j,k bestimmt aus den Distanzwerten und dem voxel index (i, j, k)
Volumen - Definition Volumen - Definitionen 3D Pixel distance == slice distance isotroper Datensatz Pixel distance! = slice distance anisotroper Datensatz Medizinische Scans, meist anisotrope Datensätze Bsp. 0.8398, 0.8398, 3.2
Trilineare Interpolation Interpolation Interpolation Volumendatensätze sind nur an diskreten Gitternetzpunkten definiert In vielen Fällen werden Sample Points in einer Volumenzelle benötigt
Trilineare Interpolation Interpolation Nearest Neighbour Interpolation Wert eines Sample Points gleich dem Wert des am nächsten liegenden Grid Points Resultat: Niedrige Qualität, keine guten, kontinuierlichen Interpolationsergebnissen zwischen benachbarten Voxeln
Trilineare Interpolation Trilineare Interpolation Trilinear Interpolation - Schritt 1 4 lineare Interpolationen bestimmen den gewichteten Sample Point zwischen den benachbarten Ecken einer Volumenzelle (x,y oder z-richtung) Ergebnis = blaue Punkte
Trilineare Interpolation Trilineare Interpolation Trilinear Interpolation - Schritt 2 Ergebnisse von 2 solchen Interpolationen werden linear interpoliert und formen das Ergebnis der bilinearen Interpolation Ergebnis = grüne Punkte
Trilineare Interpolation Trilineare Interpolation Trilinear Interpolation - Schritt 3 Beide Ergebnisse der bilinearen Interpolation werden linear interpoliert und bilden das Endergebnis Finales Ergebnis der trilinearen Interpolation = roter Punkt
Volumenrendering-Pipeline
Transferfunktionen Mapping Skalarwerte in Volumendaten haben keine direkten visuellen Eigenschaften Werte resultieren aus Messungen und repräsentieren physikalische Eigenschaften Frage: Wie tragen die einzelnen Voxel zum finalen Bild bei? Gesucht: Mapping von Voxelwerten auf optische Eigenschaften (Farbe und Opazität) Klassifizierung: Identifizierung von Merkmalen
Transferfunktionen Transferfunktion (TF) Abbildung von der Menge der Attribute in die Menge der visuellen Eigenschaften Einem Eingabewert muss ein eindeutiger Ausgabewert zugeordnet werden Beispiel: Skalare in Grauwerte: f : R R Skalare in RGB-Farben: f : R R 3 Richtungsvektoren in RGB-Farben: f : R 3 R 3
Transferfunktionen Transferfunktion in der Praxis Standard: Mapping von Skalarwerten zu RGBα Werten (Farbe + Opazität) Kein individuelles Mapping, Funktionen geben den Intensitäswert für einen gesamten Rang an TF-Bestimmung sehr aufwändig, Knotenpunkte und deren Werte festlegen Manuelle Bestimmung von TF sehr komplex und mühsam Radiologische Workstations bieten Presets, vordefinierte TF für bestimmte Datentypen und klinische Fragestellungen, speziell für CT wichtig
Einstellen einer Transferfunktion
Transferfunktionen Transferfunktion Forschungsgegenstandt Mustererkennung Farbwertzuweisung nich nur basierend auf Voxelskalarwert Merhdimensionale Transferfunktionen, bsp. Gradientmagnitude einbeziehen Vorwissen in Gestaltung der Transferfunktion einwirken lassen
Gradienten Normale Für die Beleuchtung werden die Normalen der Vertices benötigt Normalisierte Vektoren, orthogonal zur Tangentialebene In Volumendatensätzen Es exisitert keine direkte Oberfläche und auch keine Normale Ziel: Konstruktion eines Äquivalents für die Samplingpunkte
Gradienten Normale Für die Beleuchtung werden die Normalen der Vertices benötigt Normalisierte Vektoren, orthogonal zur Tangentialebene In Volumendatensätzen Es exisitert keine direkte Oberfläche und auch keine Normale Ziel: Konstruktion eines Äquivalents für die Samplingpunkte
Gradienten - Berechnung Gradient Gradient = Normale auf Isoflächen Bildverarbeitung = Gradient gibt Richtung und Betrag der größten Änderung an Kantendetektion
Gradienten - Berechnung Gradientenvektor Erste Ableitung eines 3D Skalarfeldes f = (f x, f y, f z ) = ( f x, f y, f z ) Wird üblicherweise durch Zentraldifferenzen berechnet Gradientenvektor D 000,x V 100 V 100 D 000 = D 000,y = V 010 V 0 10 D 000,z V 001 V 00 1
Gradienten - Speicherung Vorberechnung der Gradienten Gesamte Gradientenberechnung in einem Vorverarbeitungsschritt durchführen Für jeden Voxel wird der Gradient berechnet Gradienten werden in 2D oder 3D Texturen gespeichert Gradientenzugriff als Texture-Fetch
Gradienten - Texturen Texturen Wenn nur die normalisierte Gradientenrichtung bötig ist: x-, y-, z-komponenten des Gradients als RGB-Tripel in RGB Textur Texturen Wenn auch Gradientenmagnitude benötigt wird, RGBA-Textur
Gradienten - On-the-Fly On-the-Fly Berechnung der Gradienten, nur wenn sie benötigt werden Langsamer als vorberechnete Gradienten Aber: bei großen Volumendatensätzen fällt der benötigte Speicher durch Gradientenvolumen weg Berechnung im Fragmentshader durch Zentraldifferenzen Sechs zusätzliche Texture-look-ups der Nachbarn sehr teuer Deswegen vorher Opazität des Samples abfragen Gradientenberechnung und folgendes Shading nur wenn der Opazitäswert hoch ist
Gradienten - On-the-Fly On-the-Fly Berechnung der Gradienten, nur wenn sie benötigt werden Langsamer als vorberechnete Gradienten Aber: bei großen Volumendatensätzen fällt der benötigte Speicher durch Gradientenvolumen weg Berechnung im Fragmentshader durch Zentraldifferenzen Sechs zusätzliche Texture-look-ups der Nachbarn sehr teuer Deswegen vorher Opazität des Samples abfragen Gradientenberechnung und folgendes Shading nur wenn der Opazitäswert hoch ist
Gradienten - On-the-Fly On-the-Fly Berechnung der Gradienten, nur wenn sie benötigt werden Langsamer als vorberechnete Gradienten Aber: bei großen Volumendatensätzen fällt der benötigte Speicher durch Gradientenvolumen weg Berechnung im Fragmentshader durch Zentraldifferenzen Sechs zusätzliche Texture-look-ups der Nachbarn sehr teuer Deswegen vorher Opazität des Samples abfragen Gradientenberechnung und folgendes Shading nur wenn der Opazitäswert hoch ist
Gradienten - On-the-Fly Fazit Gradientenvorberechnung kann nur auf einer statischen Transferfunktion basieren Zur Laufzeit ist es nicht möglich die Transferfunktion zu ändern, ohne die Gradienten neu zu berechnen Bei on-the-fly Gradientenberechnung, kann die Transferfunktion jederzeit verändert werden Gradienten können auf klassifizierten Daten berechnet werden
Volumenvisualisierung Volumenvisualisierung Volumendaten = große Anzahl an Voxel Ziel: Visuelle Repräsentation der Volumendaten finden Projektion aller Voxel auf die Bildebene Es wird nicht wie gewohnt nur eine Oberfläche dargestellt, sondern ein gesamtes Volumen
Volumenvisualisierung Indirekte Volumenvisualisierung Zwischenschritt für die Visualisierung Bestimmung eines Polygonmesh Isosurfaces Polygone werden gerendert, anstatt die Daten selbst Direkte Volumenvisualisierung Volumendatensatz wird direkt visuell dargestellt Keine Generierung von Metadaten
Indirektes Volumenrendering Surface Extraction Strukturen in Volumendaten, heben sich normalerweise von ihrer Umgebung ab Grenze, durch unterschiedliche Pixelintensitäten Isovalue teilt das Volumen in inside und outside Isosurface Resultierende Oberfläche Surface-Based Volume Rendering Repräsentation dieser Grenze
Indirektes Volumenrendering Surface Extraction Strukturen in Volumendaten, heben sich normalerweise von ihrer Umgebung ab Grenze, durch unterschiedliche Pixelintensitäten Isovalue teilt das Volumen in inside und outside Isosurface Resultierende Oberfläche Surface-Based Volume Rendering Repräsentation dieser Grenze
Isosurface IVR Surface-Based Volume Rendering Repräsentation der Grenze i(x) = V (x) τ = 0, mit x = Voxelposition, τ = Isovalue
Marching Cubes Marching Cubes Marching Cubes Klassische Polygon Isosurface Extrahierung Generierung von Metadaten Triangulierung für jede Volumenzellen Verwendung einer Look-Up Tabelle
Marching Cubes Marching Cubes Marching Cubes - Algorithmus Für jede Volumenzelle: Bestimme ob 8 Voxel der Zelle innerhalb, außerhalb oder auf dem Isosurfaces liegen 8-Bit Codierung pro Voxelzelle Entsprechend die Triangulierung auslesen
Marching Cubes Marching Squares Marching Squares Marching Squares (2D Variante) (in Übung) statt Volumen hier 2D-Darstellung
Direktes Volumenrendering Direktes Volumenrendering Erinnerung: Erstellung einer 2D Repräsentation ohne Generierung von Metadaten
Volume Rendering Integral Volume Rendering Integral Physikalische Basis Rendering: Interaktion von Licht, Objekten und dem dazwischenliegenden Medium Annahme: Licht breitet sich in geraden Linien aus Solange bis eine Interaktion mit dem Licht und einem Medium stattfindet Interaktion von Licht und Medium Emission: Material emittiert Licht, strahlt Licht aus Absorbtion: Material absorbiert Licht, Licht wird reduziert Streuung: Die Richtung des Lichts wird verändert
Volume Rendering Integral Volume Rendering Integral Physikalische Basis Rendering: Interaktion von Licht, Objekten und dem dazwischenliegenden Medium Annahme: Licht breitet sich in geraden Linien aus Solange bis eine Interaktion mit dem Licht und einem Medium stattfindet Interaktion von Licht und Medium Emission: Material emittiert Licht, strahlt Licht aus Absorbtion: Material absorbiert Licht, Licht wird reduziert Streuung: Die Richtung des Lichts wird verändert
Volume Rendering Integral Physikalisches Modell Emission-Absorption Model Am Häufigsten verwendetes pyhsikalisches Modell Scattering und indirekte Beleuchtung werden vernachlässigt Guter Kompromiss zwischen Allgemeingültigkeit und Berechnungsperformance Realisierung im Volume Rendering Integral
Volume Rendering Integral Volume Rendering Integral Wie bestimmt man die Strahlungsenergie entlang des Strahles? I (s) = I (s 0 )e τ(s 0,s) I (s) Strahlungsdichte, die beim Betrachter ankommt I (s 0 ) Initiale Strahlungsdichte e τ(s0,s) Absorbtion entlang des Strahles
Volume Rendering Integral Volume Rendering Integral Wie bestimmt man die Strahlungsenergie entlang des Strahles? I (s) = I (s 0 )e τ(s0,s) s + q( s)e τ( s,s) d s s 0 q( s) Aktive Emission an Punkt s e τ( s,s) Absorbtion entlang s s
Volume Rendering Integral Volume Rendering Integral Ziel Numerische Approximation des Volume Rendering Integrals Raycasting Erzeuge Samples entlang des Sichtstrahls Approximiere so das Integral durch Aufsummieren Sekundärstrahlen sind sehr teuer
2D Texture Mapping 2D Texture Mapping Übersicht Verwendung von: 2D Texturen + bilineare Interpolation Volumen wird in mehreren 2D Texturen gespeichert Texture Mapping auf geometrische Primitive (Proxy Geometry) Texture Setup: Wie wird das Volumen in 2D Texturen unterteilt? Geometry Setup: Wie wird die Proxy Geometry platziert?
2D Texture Mapping Object Order Figure: Ziel: Bestimme für jeden Pixel den Farbwert aus dem Volumen
2D Texture Mapping 2D Texture Mapping Proxy Geometry Proxy Geometry: Polygone, Stack von Object Aligned Slices Beschreiben die Bounding Box des Volumendatensatzes
2D Texture Mapping Texture Setup Interaktive Rotation Frage: Wie wird das Volumen in 2D Texturen unterteilt? Problem: View Strahl kann zwischen Slices schauen Polygone werden nicht geschnitten
2D Texture Mapping Texture Setup Interaktive Rotation Slicing Achse entsprechend der aktuellen View-Richtung wählen 3 Stacks von Texturen für jede Hauptachse Winkel zwischen Slicing Normalen und View-Ray entscheidet über Texturmapping
2D Texture Mapping Geometry Setup Interaktive Rotation Wie wird die Proxy Geometry gezeichnet? Berechnung der View-Richtung in Weltkoordinaten Inverse Modelview Matrix * (0, 0, 1) Maximale, absolute Komponente des transformierter View Vektor bestimmt den Slice-Stack Bsp.: View Vektor = ( 1, 0, 0) zeichne Proxy Geometry an der negativen x-achse ausgerichtet
2D Texture Mapping Rendering Rendering Bei der Raserisierung wird jedem Fragment ein Texturwert zugewiesen Keine trilineare Interpolation! Erinnerung: Texturwerte RGBα aus Transferfunktion Durch Compositing wird Pixelfarbwert berechnet
2D Texture Mapping Compositing Übersicht Ziel: Pixelfarbwert bestimmen Iterative Berechnung des diskreten Volume Rendering Integrals Sehstrahlen werden vom Augpunkt aus durch das Volumen verfolgt und akkumuliert Individuelle Beiträge einzelner Voxel tragen zum endgültigen Pixel-Farbwert bei Entscheidung: Front-to-Back oder Back-to-Front
2D Texture Mapping Compositing Übersicht Ziel: Pixelfarbwert bestimmen Iterative Berechnung des diskreten Volume Rendering Integrals Sehstrahlen werden vom Augpunkt aus durch das Volumen verfolgt und akkumuliert Individuelle Beiträge einzelner Voxel tragen zum endgültigen Pixel-Farbwert bei Entscheidung: Front-to-Back oder Back-to-Front
2D Texture Mapping Back-to-Front Compositing Back-to-Front Blending: Gewichtete Summe aus Source und Destination formt neuen Destination Wert Source Werte des neuen Fragments aus der Transferfunktion Destination Werte die schon im Framebuffer stehen C dst C src + (1 α src ) C dst g l E n a b l e (GL BLEND ) ; glalphafunc (GL ONE, GL ONE MINUS SRC ALPHA ) ;
2D Texture Mapping Back-to-Front Compositing Problem: Color Bleeding OpenGL-Blending eigentlich: C dst α src C src + (1 α src ) C dst Annahme associated colors: Farbwerte sind schon mit ihrer Opazität multipliziert, sonst Color-Bleeding
2D Texture Mapping Back-to-Front Compositing Problem: Color Bleeding Vertex A (1,0,0,0), Vertex B (0,0,1,1), Vertex AB ( 1 2, 0, 1 2, 1 2 ) Lösung: Vor Texturinterpolation RGB α
2D Texture Mapping Front-to-Back Compositing Front-to-Back Negativ: Accumulierte α- Werte müssen gespeichert werden C dst (1 α dst) C src + C dst α dst (1 α dst) α src + α dst g l E n a b l e (GL BLEND ) ; glalphafunc (GL ONE MINUS DST ALPHA, GL ONE ) ;
2D Texture Mapping MIP - Maximum Intensity Projection MIP Suche den Samplepunkt mit größten Intensität Einsatz: Angiographie, Einsatz von Kontrastmittel zur Extrahierung von Gefäßen In der Standard OpenGL Blending Funktion nicht vorhanden OpenGL Extension glblendequationext(gl MAX EXT) C dst max(c dst, C src )
2D Texture Mapping 2D Texturing - Fazit Vorteile Einfach, gute Performance Nachteile 3 Slice Sets müssen gespeichert werden Aliasing Artefakte an den Kanten des Slicing Polygons Sampling Rate zu gering Lösung: Sampling Rate erhöhen mehrere Slices einfügen Interpolation zusätzlicher Slices aus dem Volumen speichern redundanter Informationen, Speicherverschwendung
2D Texture Mapping 2D Texture-Mapping - Fazit