Volume viewer
by Martin Ilcik
Intro
Ich habe dieses Software für die Laborübung „Visualisierung“ Porgrammiert. Volumenvisualisation war das erste Beispiel. Die ganze Zeit habe ich gehofft, den Algoritmus teilwiese auf GPU übertragen zu schaffen. Leider Blieb mir keine Zeit dafür. Die neuen Grafikkarten mit ShaderModel 3.0 zeigen sich als sehr gut dafür geeignet. Na ja, villeicht bleibt mir in den Ferien bisschen Zeit dafür.
Wozu ist das gut?
Mein Programm behandelt nicht Daten, die nicht durch Dreiecke (also nur oberflächllich) definiert sind. Es arbeitet mit Volumetrischen Daten, die auch den Innenraum des Objekts füllen. Man kann auch hier keine beliebig große Präzision erreichen. Die input Daten sind in einem regulärem 3D-Gitter gespeichert. Schon ziehmlich kleine Datensätze können riesen groß werden. Meine software solle mit sehr großen Mühe 512x512x96 schaffen. Die verarbeiteten Daten beinhalten keine Farbeninformation, nur einen helligkeitskanal mit 12-bits pro Voxel. Das reicht in meisten fällen und die populärste Methode zur Volumendatengewinnung – Computer tomographie liefert sowieso nur graustufen Bilder. Die Volumendaten werden also in dem Speicher geladen. Dabei werden gleich auch die Gradienten für Voxel berechnet und ein Histogramm der Helligkeitswerte erstellt. Die eigentliche Visualisation geschied mittels Raycasting. Aus dem Auge werden Strahlen durch Projektionsebene in die Szene gefeuert. Es werden nur die Strahlen geschossen, die das Volumenobjekt duchscheiden werden. Ab dem ersten Schnittpunkt des Strahls und des Objekts werden dann in regelmässigen Abständen Helligkeitswerte des Objekts genommen, ewentuell durch eine Transferfunktion R->R4 verfärbt und zusammengezählt. Nachdem die Alphawerte (Dichtewerte) nichts mehr durchlassen, wir der Strahl gestoppt (compositing mode). Man kann aber auch alle Stralen durch den ganzen Objekt laufen lassen und danach den Farbendurchschnitt für jeden berechnen (averaging mode). So bekommt man einen Röntgenbild. Noch ein Wort zu den Transferfunktionen: 1D Transferfunktion bildet Helligkeit in RGBA Farbe, 2D Transferfunktion bildet das Tuppel Helligkeit und Gradient in RGBA farbe. Die Transferfunktionen sind durch einige Puntke definier, zwischen denen linear interpoliert wird.
Wie bediene ich das?
Rechts oben befindet sich der bedeutendste Knopf „OPEN DATASET“.
Wenn das Datenset geladen ist, sieht man zuerst eine Pointcloud.
Mit der Maus lässt sich die Kamera mit gedrücktem linken Knopf ums Centrum des Objets drehen.
Mit Hilfe von X,x,Y,y,Z,z auf der Tastetur kann man Slices (Schnitte) in drei Hauptrichtungen erforschen.
Was zu zeigen ist und was nicht lässt sich in der Kategorie Preview einstellen. Mit show raycast schaltet man das software raytracing ein. Die Daten werden in niedrigen Auflösung gezeichnet, um realtime Manipulation zu ermöglichen. Die Auflösung und Dichte der Samples lässt sich einstellen.
Raycaster arbeitet entweder mit einem compositing oder mit einem averaging Algoritmus. Zoom Slider dient selbsverständlich zum zoomen.
Das Objekt lässt sich mit Phong Illuminationsmodell schattieren. Dazu ist möglich, die ambienten, diffusen uns spekularen lichtparameter einzustellen (Werte von 0 bis 1).
„FINE DRAW“ Knopf dient zum Rendering mit hoher Qualität. „SAVE DRAWING“ speichert das letzte fine rendering.
1D Histogramm lässt sich mit dem Slider rechts vom ihm zoomen. Neue Punkte werden mit Doppelklick auf die gewünschte Position generiert. Jedes Punkt lässt sich mit der Maus herumschieben. Rechtsklick ermöglicht Parameter des angeklickten Punktes rechts vom Histogramm zu editieren oder den Punkt zu löschen. Die höhe des Kontrollpunktes symbolisiert seine nichtdurchsichtichkeit. Je höher, desto weniger durschsictig sind die Kontrollpunkte.
2D Histogramm dient in dieser Versioin nur zum Ansehen. Es lassen sich keine 2D Transferfunktionen erzeugen.
Screenshots
Lobster
Blue head
Brown head, transparent skin
Colorfull experiments
Lignting on
Author: Martin Ilcik, 0225704, iso.sk at gmx punkt net