VolVis
Aufgabe & Lösung
Die Aufgabe bestand darin den Raycasting-Algorithmus,
wie er im Paper "Display of Surfaces from Volume Data"
von Marc Levoy beschrieben wird, zu implementieren.
Anfänglich entschieden wir uns für eine Implementation
in Java, da es hier einfach ist GUI zu bauen und auch
Klassen für Matrizen- und Vektorrechungen vordefiniert
sind. Ein erster Prototyp sah ziemlich vielversprechend
aus, zeigte aber bald die Grenzen die wir uns durch Java
aufhalsten auf.
Schliesslich entschieden wir uns spontan dazu auf C++
umzusteigen. Die neue Version setzt auf die
Qt-Bibliothek für das GUI vorraus.
Implementiert wurde konkret folgendes:
-
Grayscale Transferfunction
Intensitätswerte werden gleichverteilt auf Grauwerte
abgebildet.
-
Simple Transferfunction
Intensitätswerte werden anhand einer Polylinie
abgebildet. Die Definition erfolgt in einer STFD
Datei, die folgendes enthält: 1. Zeile: Anzahl der
Linien, 2. Zeile: Sample Werte, 3. Zeile: Alpha-Werte
für Sample Werte, 4.-6. Zeile: RGB-Farbwerte für
Linien.
-
Triangle Transferfunction
Hier kann interaktiv über den Wertebereich der Samples
eine Transferfunktion definiert werden, in denen man
mit hilfe von Dreiecken angibt welche Farbe
bzw. Transparenz ein bestimmter Bereich haben soll
Die Definitionen können zur einfacheren handhabung in
TTFD Dateien gespeichert bzw. von diesen geladen werden.
-
Slice-Darstellung
In der Slice-Darstellung kann man durch die Slices
des Volumens browsen, als Transferfunktion eignet
sich hier die Grayscale-Transerfunction gut.
-
3D-Rendering
Das eigentliche Ziel des Ganzen, das Volumen
dreidimension zu Visualisieren wird hier
erreicht. Es stehen zwei Qualitätsstufen zur
Auswahl. Low-Res berechnet nicht alles sonderen nur
einen Teil des Bildes, man gewinnt aber schon einen
ungefähren Eindruck ob die Transferfunktion passt und
kann den View-Up Vektor einstellen. Mit High-Res
wird dann jedes Pixel des erzeugten Bildes separat
gecastet.
Bilder
Ressourcen
Links
|