# VOL - Ein Raycaster |
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 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 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 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 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 Beim Transparenten Raycaster kommt die Transferfuntion zur Anwendung. Diese legt fest, welcher Dichtewert mit welcher Farbe und wie durchsichtig dargestellt werden soll. #### MIP Bei der Maximum Intensity Projection wird der Maximalwert, der entlang des Strahles aufgetreten ist, angezeigt. #### 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 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 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