Laborübung Visualisierung WS 2003/04
Weidlich Andrea - 0026715
Emsenhuber Gerlinde - 0026580


Überblick
Das Programm dient dazu, Volumensdaten, wie sie z.B. bei einem CT entstehen, mittels eines Ray-Casting Algorithmus wie er im Paper "Display of Surfaces from Volume Data" von Marc Levoy beschrieben wird, darzustellen. Folgende Funktionalität wurde implementiert:
  • Darstellung der Slices in den drei Hauptrichtungen
  • Volumerendering:
    First Hit/Average/Maximum Intensity Projection/Compositing Modus
  • Bearbeiten der Transferfunktion
  • Interaktive Einstellung der Blickrichtung


Benutzerführung
Slicing | Volumerendering |
Bearbeiten der Transferfunktion


Nach dem Starten des Programms wird folgendes Fenster angezeigt:
Um einen Datensatz zu laden, muss zunächst der Button "General" angeklickt werden; daraufhin wird das entsprechende Dialogfenster angezeigt. Dort kann man mittels anklicken des Load - Buttons einen Datensatz auswählen.

Slicing
Die Slices des Datensatzes werden in den drei kleineren Fenstern neben dem Hauptfenster in x-, y- und z-Richtung dargestellt. Mithilfe der Slider rechts neben den Fenstern kann die Tiefe im Datensatz verändert werden; die Tiefe des betrachteten Slices wird im Eingabefeld unter dem Slider angezeigt und kann auch von dort aus verändert werden.

Durch einen Linksklick auf ein bestimmtes Slice kann man dieses vergrößert im Hauptfenster anzeigen. Die Einstellung des Zoomfaktors erfolgt im General-Dialog, ebenso die Auswahl der Interpolationsmethode. Folgende Interpolationsmethoden sind möglich:
  • Voxel: Bei diesem Verfahren werden nur die Voxel dargestellt
  • Nearest Neighbour: An jeder Position wird der dichtewert des am nächsten liegenden Voxels dargestellt.
  • Bilinear: An jeder Position wird der Dichtewert aus den vier benachbarten Voxel interpoliert.
  • Bicucbic: An jeder Position wird der Dichtewert aus den sechzehn benachbarten Voxel interpoliert.
Grundsätzlich werden die Slices durch Grauwerte dargestellt, es ist aber möglich, eine benutzerdefinierte Transferfunktion auf sie anzuwenden. Dazu  muss zuerst im Slicing - Dialog die Option "Use Transfer Function" ausgewählt werden. Danach kann die Transferfunktion bearbeitet werden: Bearbeiten der Transferfunktion

Volumerendering
Durch klicken auf den gleichnamigen Button wird der Volumerendering - Dialog angezeigt. Um den das Rendern des Datensatzes zu starten, muss der Render - Button betätigt werden. Sobald der Rendervorgang gestartet  wurde, kann er abgebrochen werden, indem der Benutzer einmal linksklickt.
Es sind vier verschiedene Modi implementiert, die durch auswählen des entsprechenden Radiobuttons im Unterpunkt "Rendering" ausgewählt werden können.
  • First Hit:
    Bei diesem Verfahren wird für jeden Blickstrahl der erste Dichtewert, der getroffen wird, dargestellt, sofern er über einem vom Benutzer anzugebenden Schwellenwert liegt. Der Schwellwert kann über das Eingabefeld "Treshold Value" gesteuert werden. Beispielbilder
  • Average:
    Entlang eines jeden Blickstrahls wird der Mittelwert aller gesampelten Dichtewerte berechnet und dargestellt. Beispielbilder
  • MIP:
    Maximum Intensity Projection - Hier wird für jeden Blickstrahl der maximale Dichtewert ermittelt und anschließend dargestellt. Beispielbilder
  • Compositing:
    Bei diesem Verfahren spielen die in der Transferfunktion eingestellten Alphawerte eine Rolle: Die Werte, die sich entlang des Blickstrahls ergeben,  werden mit einem "Resttransparenzfaktor" multipliziert und aufsummiert. Dabei ist der Resttransparenzfaktor anfangs eins (d.h. der erste Wert wird mit voller Intensität dargestellt), wird jedoch immer geringer, je tiefer der Blickstrahl in den Datensatz eindringt, da die Alphawerte, die sich an den Samplepositionen ergeben, von der Resttransparenz abgezogen werden. Um das Verfahren zu beschleunigen, wird abgebrochen, so bald  die Resttransparenz kleiner als 0.05 wird, da sich Werte die mit einem so kleinen Faktor multipliziert werden kaum noch auf das Ergebnis auswirken. Beispielbilder

 
Zusätzlich kann man zwischen zwei verschiedenen Interpolationsmethoden wählen:
  • Nearest Neighbour Interpolation:
    Bei dieser Interpolationsmethode wird an jeder Samplingposition der Dichtewert des am nächsten liegenden Voxels bestimmt und verwendet. Die Methode ist meistens schneller als die Trilineare Interpolation, liefert dafür aber zum Teil Bilder von geringerer Qualität.
  • Trilineare Interpolation:
    Hier wird der Dichtewert an einer Samplingposition aus den Dichtewerten der acht benachbarten Voxel (Cell) bestimmt. Da die Interpolation zwischen den acht Dichtewerten zeitaufwendig ist, dauert die Trilineare Interpolation länder als die Nearest Neighbour Interpolation, dafür sind die Ergebnisbilder besser.
Einstellung der Blickrichtung:
Die Einstellung der Blickrichtung ist auf zwei verschiedene Arten möglich:
  •  Erstens kann der Rotationswinkel um die x-, y- und z-Achse durch die gleichnamigen Slider im Punkt "View" verändert werden.
  • Es gibt jedoch noch eine andere, intuitivere Methode, die Blickrichtung zu ändern: Dafür wird mit der Maus ein Vektor über das Bild des Datensatzes gezogen, der die Rotation um die x- und y-Achse angibt. Dies funktioniert folgendermaßen: Die Stelle, an der die linke Maustaste niedergedrückt wird, bestimmt den Anfangspunkt des Vektors. Danach wird die Maus, ohne die tast loszulassen, bis zum gewünschten Endpunkt gezogen; dort wird die maustaste losgelassen. Die absolute Position von Anfangs- und Endpunkt spielen dabei keine Rolle, nur die richtung und die Länge des Vektors sind wichtig: abhängig von Länge und Richtung des Vektors verändert sich die Blickrichtung. Wird zum Beispiel ein horizontaler Vektor nach links gezogen, wird die Blickrichtung je nach Länge des Vektors mehr oder weniger um die y-Achse nach rechts rotiert, d.h. man hat den Eindruck, der Datensatz würde um die y-Achse nach links rotiert. Ein vertikaler Vektor entspricht einer Rotation um die x-Achse, und ein schräger Vektor einer Mischung aus x- und y-Rotation.
Einstellung des Zoomfaktors: Der Zoomfaktor kann im General-Dialog eingestellt werden, über den Slider mit der Beschriftung "Zoom".

Bearbeiten der Transferfunktion
Damit die Transferfunktion verwendet wird, muss die Option "Use Transfer Function" im Volumerendering - Dialog ausgewählt werden. Die Transferfunktion wird folgendermaßen auf den Datensatz angewendet: Für jeden Dichtewert können in der Transferfunktion der Farb- und Alphawert (Transparenz) ermittelt werden. Diese Werte werden zum darstellen des Datensatzes verwendet.
Um die Transferfunktion bearbeiten zu können, muss der Button mit der Aufschrift "Transfer Function" betätigt werden; daraufhin öffnet sich ein eigenes Dialogfenster:
Das weiße Fenster stellt ein Histogramm der Dichtewerte im Datensatz dar. Dabei werden die niedrigsten Dichtewerte, beginnend bei Null links, die höchsten Dichtewerte bis maximal 4095 rechts dargestellt.
  • Bearbeiten des Farbverlaufes:
    Unter dem Histogramm wird der Farbverlauf der Transferfunktion angezeigt: Wenn die Transferfunktion zum ersten mal nach dem Starten des Programms bearbeitet wird, ist das einfach ein Verlauf von Schwarz (niedrigster Dichtewert) nach Weiß (höchster Dichtewert). Durch Linksklicken auf eine bestimmte Stelle wird entweder ein euer Punkt eingefügt, oder, falls sich dort bereits ein Punkt befindet, wird dieser ausgewählt, und kann danach durch ziehen der Maustaste verschoben werden. Durch Doppelklicken auf einen Punkt kann man dessen Farbe verändern; durch einen Rechtsklick wird er gelöscht.
  • Bearbeiten der Transparenzfunktion:
    Ebenso wie für die Farbe kann auch für die Transparenz ein Verlauf angegeben werden; dieser Verlauf wird im Histogrammfenster angezeigt. Das Einfügen und Löschen von Punkten funktioniert wie beim Farbverlauf durch einen Links- bzw. Rechtsklick. Um den Wert an einem Punkt einzustellen, wird dieser mit der Maus im Fenster nach oben oder unten gezogen: wird ein Punkt nach oben gezogen, wird seine Transparenz verringert, d.h. er wird undurchsichtiger, wird er nach unten gezogen, wird seine Transparenz erhöht.

eine einfache Transferfunktion
 

Beispielbilder
vergrößerte Version

First Hit, trilineare Interpolation

First Hit, nearest neighbour Interpolation

Average, trilineare Interpolation

Average, nearest neighbour Interpolation

MIP, trilineare Interpolation

MIP, nearest neighbour Interpolation

Compositing, trilineare Interpolation

Compositing, nearest neighbour Interpolation