VOL - Ein Raycaster

Powered by OpenGL
Main
Documentation
    Raycaster
    GUI Dokumentation
        Nach dem Start
        Slices
        Average
        First Hit
        Transparent
        MIP
        NPR
        Two Level
        Transferfunktion Editor
    Source Code
Screenshots
Download

Dokumentation

Raycaster

Voraussetzungen

Gegeben sei ein Array V[x][y][z] von Voxelwerten (evtl. bereits einer durch Filter- und Korrekturfunktionen bearbeitet).

Berechnung der Farbwerte der Voxel

Die Farbwerte Cr,g,b[x][y][z] werden mittels Phong-Shading unabhängig für jede der Farbkomponenten r, g und b ermittelt. Dabei setzt sich der Farbwert aus Umgebungslicht sowie diffuser und spekularer Reflektion zusammen:

Cr,g,b[x][y][z] = ambient + diffuse + specular

Das Umgebungslicht ambient ergibt sich aus dem Produkt der Intensität des Umgebungslichts (Ia) und eines Reflektionskoeffizienten Ka:

ambient = Ia·Ka

Die diffuse Reflektion ergibt sich aus dem Produkt von Lichtquellen-Intensität Il, Reflektionsfaktor Kd und skalarem Produkt der Oberflächennormale N sowie der Richtung der Lichtquelle L (beide Vektoren sind normalisiert):

diffuse = Il·Kd·(N[x][y][z]·L)

Die spekulare Reflektion ergibt sich aus dem Produkt von Lichtquellen-Intensität I, Reflektionsfaktor Ks und skalarem Produkt der Oberflächennormale N sowie der Richtung der maximalen Reflexion H (beide Vektoren sind normalisiert):

specular = Il·Ks·(N[x][y][z]·H), wobei H = (L+V)/2 (V ist der normalisierte Blickvektor)

Die Oberflächennormale N[x][y][z] ist durch den normalisierten Gradientenvektor g[x][y][z] gegeben und kann wie folgt approximiert werden:

				               (V[x+1][y][z]-V[x-1][y][z])/2,
				g[x][y][z] = { (V[x][y+1][z]-V[x][y-1][z])/2, }
				               (V[x][y][z+1]-V[x][y][z-1])/2
			

Zusammengefasst ergibt sich also:

Cr,g,b[x][y][z] = Ia·Ka + Il ·[Kd·(g[x][y][z]·L) + Ks·(g[x][y][z]·H)]

Berechnung der Transparenzwerte der Voxel

Um für region boundary surfaces passende Transparenzwerte α[x][y][z], benötigt man eine Zuordnung zunächst eine definierte Zuordnung von Voxelwerten Vi zu Transparenzwerten αi. Zur Superposition mehrerer surfaces sowieso zur Interpolation dazwischen liegender Transparenzwerte ergibt sich folgende Funktion:

α[x][y][z] = |g[x][y][z]| · { αi+1·[(V[x][y][z]-Vi)/(Vi+1-Vi)] + αi·[(Vi+1-V[x][y][z])/(Vi+1-Vi)] }
(wenn Vi ≤ V[x][y][z] ≤ Vi+1, 0 sonst)

Berechnung des Bildes

Für jeden Bildpunkt P[x][y] wird ein Blickstrahl durch die Arrays der Farbwerte C[x][y][z] sowie der Transparenzwerte V[x][y][z] gelegt und an Z = max(z) Positionen trilinearer interpoliert. Die Farbe des Bildpunkts P[x][y] resultiert dann aus einer Kombination der interpolierten Werte:

P[x][y] = z=0,…,Z [ C[x][y][z]·α[x][y][z] · zz=z+1,…,Z (1-α[x][y][zz]) ]
wobei C[x][y][0] = B (B ist die Hintergrundfarbe) und α[x][y][0] = 1.

Top

GUI Dokumentation

Nach dem Start

Startup

Um einen Volumendatensatz anzeigen zu koennen muss er zunaechst per File->Load geladen werden, danach im Menu View die Verschiedenen Anzeigeformen zur verfügung. Nach dem Laden werden die Eckdaten des Datensatzes in einer Leiste unter dem Menü angezeigt.

Slices

Startup

Der Sliceviewer zeigt die Slices in drei verschiedenen Ebenen (Top, Front und Side) an. Im Histogramfenster können die untere und obere Farbwertgrenze mit der Mouse verschoben werden. Zu Beginn befinden sie sich am oberen und unteren Rande der Anzeige. Mit dem Kontrollkästchen Use Transferf. können die Farbwerte nach der Transferfunktion angezeigt werden.

Average

Average

Der Average Viewer zeigt so etwas wie ein drei dimensionales Röntgenbild an. Mit dem obersten Slider kann die Auflösung des Raycasters geändert werden. Höhere Auflösung bedeutet aber auch eine längere Wartezeit. Mit Window Size wird die Auflösung auf die Fenstergröße eingestellt. Bei sehr hohen Auflösungen wird empfohlen, das Automatic Repaint abzuschalten. Mit dem Detail-Slider kann die Schrittweite des Raycasters eingestellt werden.

First Hit

First Hit

Der First Hit Viewer zeigt eine Fläche mit einer bestimmten Dichtewert an. Mit dem senkrechten Slider links neben dem Bild kann dieser Wert verändert werden.

Transparent

Transparent

Beim Transparenten Raycaster kommt die Transferfuntion zur Anwendung. Diese legt fest, welcher Dichtewert mit welcher Farbe und wie durchsichtig dargestellt werden soll.

MIP

MIP

Bei der Maximum Intensity Projection wird der Maximalwert, der entlang des Strahles aufgetreten ist, angezeigt.

NPR

NPR

Der Non-Photorealistic Volume Renderer versucht, eine Silhouette darzustellen. Dabei wird mit dem Gradientenvector gearbeitet und jene stellen betont, wo er senkrecht auf den Blickvektor steht. Man hat daneben die Möglichkeit, Isolinien (Level Lines) einzuzeichnen.

Two Level

Two Level

Der Two Level Volume Renderer verfolgt einen zweistufigen ansatz. Dabei wird der Ray in Abschnitte geteilt. Für jeden dieser Abschnitte kann ein eigener Ray Casting Typ festgelegt werden. Dieser arbeitet den Abschnitt des Rays ab, und gibt sein Ergebnis an den übergeordneten Ray Caster weiter. Die Einteilung des Ray in Abschnitte erfolgt über die Dichte und wird deshalb im Transferfunktion Editor vorgenommen werden. Dort kann jedem Bereich des Spektrums, also jeder Linie der Transferfunktion, eine Name gegeben werden.
Über diese Namen wird dem Ray Caster nun mitgeteilt, für welchen Bereich er zuständig ist. Die Auswahl erfolgt Über die Liste im Karteireiter für den jeweiligen Ray Caster. Bis auf den First Hit können jedem Raycaster mehrere Bereiche zugeteilt werden. Manche der Ray Caster bieten zusätzliche Einstellungsmöglichkeiten, auf die hier nicht näher eingegangen werden soll.
Neben der Möglichkeit, im Bildfenster duch Klicken und Ziehen den Blickwinkel zu vertellen, kann, wenn man die Ctrl-Taste gedrückt hält, klickt und zieht, auch die Licht-Position verändert werden.
Die Berechnung kann jederzeit mit dem Stop-Button links unten gestopt, sowie mit dem Start-Button gleich daneben wieder gestartet werden. Mit dem Knopf rechts unten kann das aktuelle Bild abgespeichert werden.

Transferfunktion Editor

Transfer

Mit dem Transferfunktion Editor kan die Transferfunktion bearbeitet werden. Sie legt fest, mit welchem Farbwert und welcher Transparenz ein Dichtewert dargestellt werden soll. Im Editor stellt die senkrechte Position der Linie die Transparenz und dessen Farbe die darzustellende Farbe dar. Mit der Zeigewerkzeug () können Linien und deren Eckpunkte ausgewählt werden. Ist ein Eckpunkt selektiert, dann werd das Kreuz fett. Jetzt kann dessen Farbe durch einen Klick auf das obere der beiden Kästchen rechts unten eingestellt werden. Mit dem Splitwerkzeug () können Linien geteilt werden. Sobald ein Fadenkreuz erscheint, kann die Linie per Klick geteilt werden. Das Movewerkzeug verschiebt Linien. Die beiden letzten Werkzeuge dienen zum Laden und Speichern von Transferfunktionen. Die beiden Werte neben Histo zeigen jeweils den Dichtewert und den Transparenzwert an. Im Properties Bereich kann eine Linie mit einem Namen asoziiert werden. Mehrer Linine können den selben namen haben.

Top