Laborübung Visualisierung
Bsp 1.:
Volume Rendering
Ich werde das Standartbeispiel zu Volume-Rendering implementieren, mit Raycasting und Beitrag von jeweils K Voxel am Ray zur Farbe und Durchsichtigkeit jedes Bildpunktes. Die gewählte Programmiersprache ist Java.
Bei der Methode gehe ich gemäß dem Artikel vor. Die erhaltenen Daten( Vorverarbeitung?) liegen als Stapel von Querschnitten vor, die bei einer CT-Untersuchung entstehen. Die Bearbeitung der Punkte bis zum finalen Bild kann dabei modular in 3 Schritte eingeteilt werden:
1) Shading
Die einzelnen Bildpunkte werden zuerst in ein Shading-Model überführt. Das Shading realisiere ich, wie im Artikel vorgeschlagen, als Phong-Shading. Die Oberflächennormale der Voxel wird dabei mithilfe einer Operation approximiert, die benachbarte Punkte zur Berechnung heranzieht. Dabei wird der Ort der Lichtquelle interaktiv steuerbar sein, bzw. deren Stärke und Art.
2) Ermitteln der Transparenz
In einem zum Shading unabhängigen Schritt wird die Transparenz jedes Voxels ermittelt. Dabei könnte folgende Methode angewendet werden: man legt einen Threshold für bestimmte Dichtewerte an, und alles was darunter ist, ist transparent. Damit können allerdings keine semitransparenten Regionen dargestellt werden. Eine obere und untere Schranke andererseits kann zu Löchern führen.
Besser ist folgende Methode: Alle Punkte, die den selben Wert wie der Threshold haben, haben Opacity 0. Die Transparenz aller anderen Punkte nimmt stark zu, je weiter sie sich vom Threshold entfernen. Diese Zunahme der Transparenz ist indirekt proportional zur Größe des Gradienten. Damit sorgt man auch, dafür, daß die Verbindungen zwischen Oberflächen bei der Visualisierung hervorgehoben werden.
Ich werden in meinem Beispiel die zweite Methode implementieren. Der Threshold kann natürlich beliebig verstellt werden. Das ist auch auf mehrere Isovalue Surfaces erweiterbar, wo es mehrere Thresholds gibt, und die Opacity eine Kombination der Opacity-Werte in Zusammenhang mit jedem Threshold ist.
3) Raycasting
Es ist nun für jeden Voxel ein Farb- und ein Opacity-Wert vorhanden. Nun wird durch jeden Bildpunkt u ein Ray gecastet. Dieser reicht bis zu einem nicht-transparenten Hintergrund. Das Besondere der Methode kommt nun zum Tragen: Es wird nicht bis zur nächsten Oberfläche gecastet und dann abgebrochen, sondern jeweils K Bildpunkte im gleichen Abstand auf dem Ray tragen zur Farbe und Transparenz von u bei. Dadurch kann Semitransparenz realisiert werden, und es ist keine Klassifikation bezüglich Oberflächenzugehörigkeit notwendig. Dabei wird der Ray bis zum Augpunkt verfolgt, und die Farbe und Opacity für u an jedem besuchten Voxel ist eine Kombination aus eingehender Farbe/Opacity und der trilinearen Interpolation zwischen den 8 umgebenden Bildpunkten.
9506124 Oliver Mattausch