Volume Rendering

Beschreibung des Algorithmus

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.


Index