
 |
 |
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:
-
Benutzung von hardwarebeschleunigten Alpha-Paletten
auf GeForce-Grafikkarten
-
Unterstützung von Paletten in Software mittels
32bit-RGBA-Texturen
-
Bereitstellen eines Dialogs zur interaktiven Modifikation
der Transferfunktion
-
die Möglichkeit, Clip-Ebenen zu definieren und
zu modifizieren
-
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)
|
|