VIS- und Uni-Logo
Blindversion home uni university suche search sitemap sitemap kontakt contact
unilogo University of Stuttgart
Institute for Visualization and Interactive Systems

Sopra

german VersionPrintversionBlind Version
 

Sorry, this document is only available in German.

SoPra Volume Renderer WS 00/01


 
 
Betreuer: Klaus Engel, Manfred Weiler

Bearbeiter: Stefan Kombrink, Dennis Geldec, Zissis Siantidis, Azeddine Ben Amor Ayadi

Aushang
 
 

1. Was ist Volume Rendering?
2. Aufgabenstellung
3. Know-How
4. Bedienung des Programms
5. Download

Technischer Überblick
 
 

1. Was ist Volume Rendering?

Volume Rendering ist eine Technik zum Visualisieren von dreidimensionalen Datensätzen. Diese können z.B. aus der Medizin stammen und dort MR oder CT-gescant sein. Oder aus der Technik, wo solche Datensätze durch Berechnung bzw. Simulation entstehen. Solche Scanner gibt es z.B. in der Medizin. Diese Scanner erzeugen einen Datensatz, in dem alle gescannten Informationen gespeichert werden. Mit solchen Datensätzen arbeitet dieser Volume Renderer.

2. Aufgabenstellung

Unsere Aufgabe war es, ein bereits bestehendes DirectX Windows-Programm, das einen Datensatz liest und darstellt, um einige Funktionen zu erweitern, die da wären:
  1. Benutzung von hardwarebeschleunigten Alpha-Paletten auf GeForce-Grafikkarten
  2. Unterstützung von Paletten in Software mittels 32bit-RGBA-Texturen
  3. Bereitstellen eines Dialogs zur interaktiven Modifikation der Transferfunktion
  4. die Möglichkeit, Clip-Ebenen zu definieren und zu modifizieren
  5. einige weitere kleine Besonderheiten (Histogramm, Stretch, ...)

3. Know-How

Wie funktioniert dieses Programm? Zunächst einmal muß geklärt werden, wie so ein Datensatz eigentlich aussieht. Das von einem medizinischen Scanner erzeugte Resultat (also der Datensatz) ist ein 3D-Feld von Skalarwerten. Dieses 3D-Feld wird repräsentiert als Stapel von 2D-Schichtbildern, die, übereinander gelegt, das Volumen ergeben. Das Volumen wird also in ganz viele Scheiben "zerschnitten". Jeder Pixel dieser Bilder ist ein 8-bit Wert. Alle diese Bilder zusammen ergeben den Datensatz.

Unser Programm liest einen solchen Datensatz ein und erzeugt für jedes dieser Bilder eine Textur. Diese Texturen werden ganz dicht übereinander im Raum dargestellt. Da bestimmte Werte dieser Bilder als durchsichtig gelten, entsteht auf diese Weise genau das vorher gescannte Volumen. Für die Darstellung auf dem Bildschirm benötigen wir noch eine sog. Transferfunktion. Dies ist eine Funktion, die jeden Skalarwert des Datensatzes auf ein Format abbildet, mit dem die Grafikkarte etwas anfangen kann, in unserem Programm auf einen RGBA 32bit-Wert (teilt sich auf in vier 8-bit-Farbkanäle: rot, grün, blau, alpha) Es handelt sich hierbei also um eine Funktion, die einen 8-bit Wert als Eingabe akzeptiert und einen 32-bit Wert als Ausgabe liefert. Dieser 32-bit Wert enthält alle für den Monitor (bzw. Grafikkarte) notwendigen Farbinformationen und ist folgendermaßen aufgebaut:

8 bits : Rot-Anteil (0..255)
8 bits : Grün-Anteil (0..255)
8 bits : Blau-Anteil (0..255)
8 bits : Alpha-Wert (0..255) (zuständig für Transparenz)
 

Alpha-Wert:
Wie schon weiter oben erwähnt, gelten manche Werte in den Texturen als durchsichtig. Das Maß der Durchsichtigkeit kann ziemlich präzise definiert werden. Ein Pixel kann also nicht einfach nur durchsichtig oder nicht durchsichtig sein, sondern auch z.B. halbdurchsichtig. Wie durchsichtig, das wird durch diesen Alpha-Wert bestimmt. Dabei bedeutet Null, der Pixel ist überhaupt nicht zu sehen, und 255, der Pixel überdeckt alles dahinterliegende vollkommen. 128 bedeutet also, man mischt die Farbe dieses Pixels und des dahinterliegenden jeweils zur Hälfte.

Das interaktive Modifizieren dieser Transferfunktion stellt ein wichtiges Hilfsmittel dar, verschiedene Betrachtungen an z.B. einem gescannten Menschenkopf durchzuführen. So kann man z.B. die Transferfunktion so gestalten, daß die gescannten Werte, die Gewebe und andere Weichteile repräsentieren, als vollkommen durchsichtig dargestellt werden. Auf diese Weise kann man also nur den Knochen betrachten. Oder man interessiert sich nur für ein bestimmtes Gewebe und "blendet" alles andere aus.

Eine andere Funktionalität, die beim Betrachten solcher Datensätze eine große Rolle spielt, ist die Möglichkeit, Ebenen zu benutzen, die das Volumen "durchschneiden" und so tieferen Einblick ermöglichen. Diese Ebenen werden "clip planes" genannt.
 


Es kann ebenfalls sehr nützlich sein, mehrere clip planes gleichzeitig zu verwenden.
 

4. Bedienung des Programms

Gleich bei Programmstart wird der Benutzer aufgefordert, den Datensatz auszusuchen, der geöffnet werden soll. Hierbei handelt es sich um Dateien mit der Endung ".dat". Gleich nach dieser Auswahl wird untersucht, ob die Grafikhardware pelettierte Texturen unterstützt. Wenn ja, dann wird die Hardware-Unterstützung automatisch benutzt. Im "Options"-Menü läßt sich dies wieder abschalten.

Gleich danach wird der Datensatz dargestellt. Mit der Maus kann man den Datensatz drehen. Dazu muß man ihn "greifen" und die Maus mit gedrückter Maustaste bewegen. Hält man die Strg-Taste gedrückt und bewegt die Maus nach vorne und hinten, so kann man zoomen.
Links oben und links unten am Fensterrand sind Informationen in gelber Schrift sichtbar.
Bedeutung:

Links oben: 21.53 fps (492x454x32)

21.53 fps = frames per second, die Anzahl der berechneten Bilder pro Sekunde
(492x454x32) = das Fenster hat gerade eine Größe von 492 mal 454 Pixeln und eine Farbtiefe von 32bit

Links unten: 128x128x53(64)-hw palettes

128x128x53(64) = Die Ausmaße des Datensatzes in Pixeln, Breite x Tiefe x Höhe (Höhe gerundet auf die nächste Zweierpotenz)
hw palettes = erscheint dies, so werden gerade hardwareunterstützte Paletten benutzt

Im Menü "Options" kann man die Hintergrundfarbe ändern.

Will man nun die Transferfunktion betrachten und modifizieren, so muß man das "Palette Editor"-Fenster einblenden. Dies geschieht im Menü "View". Das "Palette Editor"-Fenster sieht so aus:
 


Das Koordinatensystem (das schwarze Quadrat) in diesem Fenster ist exakt 256 Pixel breit und 256 Pixel hoch. Auf der x-Achse sind die Datensatz-Werte abgetragen, also die Eingangswerte der Transferfunktion, die ja alle im Bereich 0..255 liegen. Jeder Eingangswert wird auf einen RGBA-Wert abgebildet, also 4 Werte im Intervall 0..255. Da wir aber nur eine y-Achse haben, müssen wir 4 Graphen benutzen, die wir entsprechend gefärbt haben (im oberen Bild sieht man sie deswegen nicht, weil sie alle exakt übereinander liegen):
 
 


Mit der Maus kann man nun die Transferfunktion ändern. Klickt man auf eine beliebige Stelle im Koordinatensystem, so verändert man diejenigen Graphen, die direkt unter dem Koordinatensystem per Häkchen aktiviert sind. Auf diese Weise kann man z.B. nur den Alpha-Wert modifizieren, indem man die Häkchen vor Red, Green und Blue entfernt. Mit "Select All" werden alle Häkchen wieder gesetzt (ist als Abkürzung gedacht) bzw. wieder entfernt. Mit "Reset" werden alle 4 Graphen wieder auf "Ursprungsgerade" gesetzt, also Grauwerte. Mit "Load Palette" bzw. "Save Palette" kann man Paletten laden und speichern, um später nicht wieder die mühseligen Modifikationen vornehmen zu müssen. Es fällt auf, das sich das Ändern der Transferfunktion sofort auf das dargestellte Volumen auswirkt. Hat man zu langsame Hardware, so möchte man vielleicht zuerst mal die Transferfunktion ändern und den Zeitpunkt des Anwendens dann selbst bestimmen. Hierzu deaktiviert man das "Auto-Apply" Häkchen (der "Apply" Button ist jetzt nicht mehr grau und somit drückbar). Die Änderungen an der Transferfunktion werden nun erst dann sichtbar, wenn die Schaltfläche "Apply" gedrückt wird. Dies ist vor allem dann nützlich, wenn die Hardware palettierte Texturen nicht unterstützt und die Darstellung somit sehr langsam ist.

Die clip planes lassen sich im Menü "Clip Planes" aktivieren. Man kann jede einzelne clip plane einzeln hinzuschalten. Die sichtbaren clip planes bekommen im Menu "Clip Planes" ein Häkchen. Will man nun eine clip plane modifizieren, so muß man sie "anwählen". Dies geschieht im Menü "Interaction Mode". Mit "Toggle Selection" (oder Ctrl+x) wird umgeschaltet zwischen gesamtes Volumen und clip planes. Was gerade aktiv ist, kann man an der weißen Farbe der Umrandung erkennen: Ist das Volumen aktiv, so sind die Kanten des umgebenden Würfels weiß, ist eine clip plane aktiv, so ist ihre Umrandung weiß. Das, was gerade weiß ist, kann man mit der Maus bewegen. Das Modifizieren einer clip plane funktioniert genauso wie das Modifizieren des Volumens (s.o.). Sind mehrere clip planes eingeschaltet und möchte man zur nächsten clip plane wechseln, drückt man die Taste TAB. Will man wieder das gesamte Volumen anwählen, um es beispielsweise zu drehen, so drückt man wieder Ctrl+x und das gesamte Volumen erhält wieder den Focus.

Hinweis:
Auf Grafikkarten mit nVidia-Chipsatz können nur 2 clip planes gleichzeitig dargestellt werden.

5. Download

Volume Renderer 1.0 + Testdatensatz (276 KB)