Visualisierung

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

foot1_thumb.png
foot2_thumb.png
foot3_thumb.png
head1_thumb.png
head2_thumb.png
head3_thumb.png
lobster1_thumb.png
lobster2_thumb.png
lobster3_thumb.png
teapot1_thumb.png
teapot2_thumb.png
teapot3_thumb.png
x-mas-tree1_thumb.png
x-mas-tree2_thumb.png

skull1_thumb.png
skull2_thumb.png

fuel_thumb.png
fuel2_thumb.png

neghip1_thumb.png
nucleon_thumb.png
silicium1_thumb.png

Ressourcen

  • Sourcecode (kontaktiere die Übungsleitung) (GPG-Signature)
  • Benutzerdokumentation PS PDF

Links