Introduction Task Implementation Interface Documentation Screenshots Download
 
   Introduction

F�r die �bung "Visualisierung" an der TU-Wien wurde folgendes Programm entwickelt. Es handelt sich dabei um ein simples visualisierungs-Tool f�r Volumendatens�tze. Die folgenden Zeilen sollen einen kurzen �berblick �ber die Funktion des Programms geben und eventuell anderen helfen selbst ein solches Programm zu schreiben.

Autoren:
Jonathan Thaler
Dominic Windisch

 
   Task

Es soll ein Programm entwickelt werden, das Bilder aus Volumsdaten mittels Ray-casting berechnet. Die VisLU ist auf Volumsdaten beschr�nkt, die auf kartesischen dreidimensionalen Gittern gegeben sind. Diese Gitter werden zum Beispiel bei der Computertomographie erzeugt. Daher sind diese Daten und die dazugeh�rigen Visualisierungsmethoden ein wichtiger Bestandteil der modernen Medizin und werden im klinischen Alltag zur Diagnose, Operationsplanung u.�. eingesetzt.
Ray-casting ist ein gebr�uchliches Verfahren um ein Bild aus einem Volumsdatensatz zu berechnen ohne geometrische Primitive (Polygone, Trianglemeshes, etc.) aus den Volumsdaten zu generieren (solche Verfahren werden direct volume rendering Verfahren genannt). Um ein Bild mittels Ray-casting zu erzeugen wird pro Pixel ein Blickstrahl (ray) durch die Bildebene geworfen (casting). In Abbildung 2 ist die Idee von Ray-casting illustriert. Der Blickstrahl wird mit dem Volumen geschnitten. Das Gitter hat an den Voxelpositionen Informationen gespeichert (den Dichte Wert). Entlang des Blickstrahls wird an diskreten Samplepositionen die Dichte ausgewertet (interpoliert) und mittels einer Transferfunktion in Farben und Transparenzwerte �bersetzt. Jedes Sample hat also entsprechend der Transferfunktion eine Farbe und eine Transparenz. Der Gradient der (im Volumen gespeicherten) Dichtewerte wird verwendet um die Farbe zu schattieren. Die schattierten Farben (und die jeweils zugeh�rige Transparenzinformation) wird dann entsprechend der Compositing Formel zu der endg�ltigen Pixelfarbe gemischt.
Der genaue Algorithmus ist im Paper "Display of Surfaces from Volume Data" von Marc Levoy beschrieben.

Das Beispiel wird in zwei Phasen implementiert. Die erste Phase endet mit dem 1.Zwischengespräch, die zweite Phase mit der 1.Abgabe.

  • In der ersten Phase soll ein graphisches user interface (GUI) erstellt werden, dass alle nötigen Komponenten enthält um die Parameter der Algorithmen einstellen zu können (auch die Transferfunktion soll schon einstellbar sein!). Weiters soll die Funktionalität, die einzelnen Schichten des Volumsdatensatzes in den drei Hauptrichtungen darstellen zu können, implementiert werden.
  • In der zweiten Phase soll ein Ray-casting Algorithmus (wie er z.B. im Paper "Display of Surfaces from Volume Data" von Marc Levoy [1] beschrieben wird implementiert werden.

    Die Mindestanforderungen die das Programm erfüllen muss sind
    • GUI
    • Slicing
    • Interaktive Transferfunktionen
    • Interaktive Einstellung der Blickrichtung

    Mindestanforderungen für die Resultatbilder
    • Halb transparente äußere Schicht (z.B. Haut) und undurchsichtigen innere Schicht (z.B. Knochen) sind zu erkennen.
    • Resultate für mindestens zwei verschiedene Datensätze sind vorhanden und reproduzierbar.

    "Extended Feature Set"
    • Maximum Intensity Projection
    • Progressive Refinement (f�r eine h�here Frame-Rate bei der Interaktion mit dem Volumen)
    • Adaptive Step Size (angepasst an die Opacity)
    • Pre- vs. Post-Shading (zeige Unterschied in der Qualit�t)
    • Perspective vs. Orthogonal Projection
    • Clipping plane (schneidet einen Teil des Volumens weg)
    • Advanced gradient computation (Berechnung des Gradienten mit komplexerer Methode als der Zentrale-Differenzen-Methode)
    • Pre-Integrated Volume Rendering
 
   Implementation

Das Programm wurde f�r Linux-Plattformen geschrieben und auch auf solchen getestet.

Programmiersprache: C++

Design: F�r das Interface wurde das Qt-Framework herangezogen. Dies erm�glichte uns bestehende Widgets (UI-Elemente) f�r unsere Bed�rfnisse anzupassen und m�glichst wenig Aufwand in UI-Erzeugung zu stecken.

Slicing: Das Programm bietet die M�glichkeit sich einzelne Schichten des Volumens anzusehen. Hierzu kann zwischen den verschiedenen Achsen umgeschalten und die Position ver�ndert werden. Eine Transfer-Funktion kann zum Einf�rben von interessanten Bereichen benutzt werden.

Raycasting: Ein simpler Ray-Caster wurde mittels Fragment-Shader (geschrieben in glsl) implementiert. Dazu werden zuerst je ein Bild der Front- und Back-Faces eines Quaders mit Farben gleich den Texturkoordinaten erstellt. Diese werden als Framebuffer-Objekete gespeichert. Im Shader wird durch diese FBOs eine Richtung des Blickstrahls ermittelt und traversiert. Je nach Sampling Distance werden Punkte im Volumen "angesehen", deren Wert (in der Textur wird nur die Dichte gespeichert) wird mittels Transfer-Funktion in RGBA-Werte umgewandelt und schliesslich aufsummiert (mittels Front to Back Raycasting).
Maximum Intensity Projection:
Es besteht die M�glichkeit keine Transfer-Funktion zu benutzen, in diesem Fall wird eine sogenannte Maximum-Intensity-Projection benutzt, bei der der gr�sste Wert entlang des Strahls die Helligkeit des Pixels bestimmt.

 
   Interface

Das Interface bietet folgende M�glichkeiten:

Load Volume:
L�dt den angegebenen Datensatz und zeigt ihn an.

Rendermode:
Es kann zwischen Slicing und Volume-Raycasting umgeschalten werden.

Viewmode
Die Modi-manuell und automatic lassen zwischen einem automatischen und einem manuellen in- bzw. dekrementieren der Position auf der aktuellen Achse umschalten.

Axis:
�ndert die aktuelle Achse. Der Slider manipuliert immer nur die Position der aktuellen Achse (Schnittebenen-Position im Slicing-Modus, bzw. Rotationswinkel im Volumerendering-Modus)

Transferfunction:
Mittels Checkbox wird zwischen Maximum-Intensity-Projection (kurz MIP) und Raycasting mit Transferfunktion umgeschalten.
Es k�nnen neue Transferfunktionen hinzugef�gt und bestehende ge�ndert werden. Hierzu k�nnen Punkte im Editor hingef�gt (Linke Maustaste), verändert (Drag-And-Drop zum Verschieben, mittlere Maustaste für Farbänderung) und gelöscht (Rechte Maustaste) werden.
Die Transferfunktion wird interaktiv im Hintergrund durch den Farbverlauf dargestellt. Die Y-Achse stellt die Dichtewerte (oben = 0, unten = 4096), und die X-Achse die Transparenz (links = Transparent, rechts = Undurchsichtig) dar.

Samplepoint distance:
Der Regler verstellt den Abstand zwischen den Punkten, welche beim Raycasting zur Werteermittlung "besucht" werden. Geringere Sampledistance bedeutet einen höheren Rechenaufwand aber auch genauere Bilder.
Screenshot-Button:
Speichert das aktuelle Bild unter im JPEG-Format ab.

 
   Documentation

> DOXYGEN <

 
   Screenshots

 
   Download

> SOURCES <


Jonathan Thaler, Dominic Windisch 08.12.2009