LU Visualisierung 2008
Im Rahmen der Visualisierung LU 2008 wurde eine Applikation entwickelt, die Bilder aus Volumendaten mittels
Raycasting berechnet. Der grundsätzliche Raycasting Algorithmus ist in dem Paper "Volume Rendering. Display of Surfaces
from Volume Data" von Marc Levoy beschrieben.
Die Applikation bietet zwei verschiedene Ansichten für Volumen Datensätze:
- Slicing: Einzelne Schichten des Volumen können in X-, Y- und Z-Richtung betrachtet werden.
- Direct Volume Rendering: 3D Darstellung der Volumendaten. Wobei der Datensatz frei rotierbar ist und zusätzliche
Render-Einstellungen (zb: Composting modes, Beleuchtungsparameter) eingestellt werden können.
Die Applikation wurde in C++ und OpenGL unter Windows-XP mit Visual Studio Express 2008 entwickelt. Eine Portierung auf andere Plattformen
sollte mit geringem Aufwand möglich sein, da der Source-Code Plattform unabhängig geschrieben und portable Bibliotheken verwendet
wurden.
Weitere verwendete Bibliotheken und Tools:
- wxWidget - GUI Toolkit.
- wxFormBuilder - WYSIWYG GUI Erstellung für wxWidget.
- cmldev - Mathematik-Bibliothek.
- GLee - OpenGL extension loader.
- CG - Shading language.
- doxygen - Source code Dokumentation.
Im folgenden Teil wird die Benutzung der Applikation beschrieben.
3.1 Menü
- "File->Load": Laden eines Volumendatensatzes. Nach dem Start sind die meistens Interaktionsmöglichkeiten deaktiviert
und können erst nach dem Laden eines Volumendatensatzes verwendet werden.
- "File->Export Image": Speichern eines Direct Volume Renderings in einem Bild. Das Exportieren ist in den Formaten
*.bmp, *.jpg, *.png und *.tif möglich. Als Standardauflösung wird die GLCanvas-Größe (Bereich in dem der Volumendatensatz angezeigt
wird) verwendet, wobei die Höhe und Breite des Bildes auf eine 2er Potenz hochskaliert wird um Probleme mit OpenGL-Texturen zu vermeiden.
Durch anhängen der Bildabmessungen im Dateinamen kann in anderen Auflösungen exportiert werden. Das Format für den Dateinamen
ist: "dateiname-x.bmp", zB "lobster-512x256.png"
- "File-Quit": Beendet die Applikation.
- "Transfer Function->New": Erzeugt eine neue Transferfunktion.
- "Transfer Function->Load": Laden einer Transferfunktion aus einer Datei (*.tf).
- "Transfer Function->Save": Speichern der aktuellen Transferfunktion in einer Datei (*.tf).
- "Camera->Flip X": Spiegelt die X-Koordinate der Kamera.
- "Camera->Flip Y": Spiegelt die Y-Koordinate der Kamera.
- "Camera->Flip Z": Spiegelt die Z-Koordinate der Kamera.
- "Camera->Reset": Setzt die Kamera auf die Ausgangsposition.
- "Settings->Background Color": Setzt die Hintergrundfarbe für den GLCanvas Bereich, in dem das Slicing und Direct
Volume Rendering stattfinden.
- "Settings->Ambient Color": Einstellen der Ambient Lichtfarbe für Direct Volume Rendering im Phong-Lighting Modus.
- "Settings->Diffuse Color": Einstellen der Diffuse Lichtfarbe für Direct Volume Rendering im Phong-Lighting Modus.
- "Settings->Specular Color": Einstellen der Specular Lichtfarbe für Direct Volume Rendering im Phong-Lighting Modus.
3.2 Transfer Function
Mit Hilfe der Transferfunktion können einzelnen Dichtewerten des Volumendatensatzes durch setzen eines Keyframes eine Farbe und
Transparenz zugeordnet werden. Die Transparenz korrespondiert mit der Y-Achse und der Farbwert wird im Keyframe angegeben. Die beiden
Einstellungen werden über den gesamten Bereich linear interpoliert, wobei die Farbinterpolation unterhalb der Transferfunktion
visualisiert wird.
Nach dem Laden eines Volumen Datensatzes wird im Transfer Function Bereich ein Histogramm mit den aufsummierten Dichtewerten angezeigt.
Die Dichtewerte sind auf der X-Achse aufsteigend sortiert, dh. niedrige Dichtewerte befinden links und hohe Dichtewerte rechts. Zur
besseren Darstellung sind die Häufigkeiten auf der Y-Achse logarithmisch skaliert.
Transferfunktion-Keyframes können mit der Linken Maustaste gesetzt und per Drag and Drop im Transferfunktions-Bereich verschoben werden.
Für das erste und letzte Keyframe ist die Y-Achsen Bewegungen beschränkt, eine Veränderung der X-Richtung ist bei diesen beiden nicht
möglich.
Für das nachträgliche ändern der Farbe eines Keyframes oder das Löschen eines Keyframes muss dieses mit der linken Maustaste aktiviert
werden (Maustaste ist gedrückt). Durch darauffolgendes drücken der Taste "C" auf der Tastatur kann der Farbwert angepasst und mit der
Taste "D" entfernt werden.
Über den Menüpunkt Transfer function kann eine Transferfunktion aus einer Datei geladen und in einer Datei gespeichert werden.
3.3 Slice View
Im GLCanvas werden die drei Hauptschichten des Volumen in der X-, Y- und Z-Richtung angezeigt. Durch verändern der Schieberegler im
Slicing-Tab können einzelne Schichten angezeigt werden. Mit dem Tab Slice View und Volume View kann zwischen den beiden Darstellungsarten
gewechselt werden.
3.4 Volume View
Im Volume View wird der Volumendatensatz durch Raycasting dargestellt. Im GLCanvas Bereich kann durch das Bewegen der Maus mit gedrücktem
linken Mausbutton der Datensatz frei rotiert werden. Mit dem Mausrad kann der Zoombereich variiert werden.
Im Clipping Bereich kann entlang der Hauptachsen durch verändern der Left-, Right-, Buttom-, Top-, Front- und Back-Schieberegler
Teile des Volumendatensatz ausgeblendet werden.
Im Rendering Bereich können verschiedenen Rendering Paramter gesetzt werden, welche einen Einfluss auf die Darstellung des
Volumendatensatzes haben.
In der Auswahlbox Combination wird die Kombination der einzelnen Dichtewerte entlang des Blickstrahles eingestellt.
-
Compositing: Front to back compositing. Der Farb- und Transparenzwert für den Dichtwert wird aus der Transferfuntion ermittelt.
-
First Hit: Darstellung der Oberflächen. Bei einem festen Schwellwert wird der Raycasting-Vorgang abgebrochen.
Der Farb- und Transparenzwert für den Dichtwert wird ebenfalls aus der Transferfuntion ermittelt.
-
MIP: Maximum Intenstiy Projection. Es wird der höchste vorkommende Dichtewert entlang des Blickstrahles verwendet und
als Grauwert dargestellt.
-
X-Ray: Es wird der durchschnittliche Dichtewert entlang des Blickstrahles verwendet und als Grauwert dargestellt.
In der Auswahlbox Lighting wird der Beleuchtungsmodus festgelegt.
-
None: Die Beleuchtung ist deaktiviert und es wird lediglich der Farbwert aus der Transferfunktion für die Anzeige
verwendet.
-
Phong: Die Beleuchtung wird mit dem Phong-Lighting-Model berechnet. Unter dem Menüpunkt Settings kann die
Ambient-, Diffuse- und Specular-Farbe gesetzt werden. Weiters sind die Einstellungen Light direction (für die Richtung
des Lichtvektors) und Specular Highlight (für den Koeffizienten des Specular Highlights) relevant.
- Step size:Schrittweite der Sample-Punkte entlang des Blickstrahles durch den Volume Datensatz. Achtung:Da die
maximale Iterationsanzahl für eine for-Schleife im Shader auf 1024 beschränkt ist kann es bei sehr kleiner Schrittweite passieren, dass
der Volumendatensatz nicht vollständig durchwandert wird.
- Light direction: Durch Eingabe eines Vektors kann die Richtung des Lichtes variert werden. Dabei müssen die einzelnen
Komponenten des Vektors mit Beistrich getrennt sein. zB: 0,0,-1
- Specular highlight: Setzt den Koeffizienten für das Specular Highlight bei der Phong Beleuchtung.
download
.-"""-.
/= \
|- /***\ |
|=( 0.0 ) |
\ \ - / /
/_______\ Erstellt (Gemütszustand: Müde) von Christoph Johann Winklhofer, WS-2008, herrjohann(-AT-)lavabit.com