
Bakkalaureatsarbeit: Merkmals-Visualisierung für Volumsdaten
August 2003 - Juni 2004
Content:
Einleitung
Diese Arbeit entstand im Rahmen einer Bakkalaureatsarbeit für den Studienzweig Medieninformatik mit dem Schwerpunkt Computergraphik und Mustererkennung. Das ursprüngliche Thema war "Depth of Field in der Volumsvisualisierung". Jedoch wurde das Thema während der Arbeit ausgedehnt und das "Depth of Field" wurde nur als ein einzelner Punkt berücksichtigt.
Das Umfeld der Arbeit ist die Volumsvisualisierung. Sie befasst sich mit Methoden, welche die Volumsvisualisierung effektiver machen. Ich habe dazu vier Methoden entwickelt und diese auf ihre Tauglichkeit und ihre Einsatzmöglichkeiten getestet. Die vier Methoden sind: Depth of Field, Focus+Context, 3D Dithering und Magic Lamp. Diese vier werden in Beschreibung genauer beschrieben.
Der Zeitraum in der diese Arbeit entstand erstreckte sich vom August 2003 bis Juni 2004. Zu Beginn mußte ich mich in das Thema einlesen. Ein Großteil der Zeit brauchte ich danach um mir die verwendeten Programmiersprachen anzueignen. Danach habe ich die einzelnen Methoden implementiert und noch ein Paper zur Arbeit verfasst.
Beschreibung
In den folgenden Beschreibungen wird öfters eine normale Renderingmethode erwähnt. Bei dieser Renderingmethode handelt es sich um jene von Marc Levoy, welcher diser im Jahre 1987 in der Arbeit Display of Surface from Volume Data beschrieben hat. Die andere Methode, welche zum Rendern verwendet wurde, dient der Darstellung des Kontextbereichs. Diese wurde von mir adaptiert und ist in der ausführlichen Arbeit (siehe Downloads) genauer beschrieben.
In den folgenden vier Unterpunkten werden die einzelnen Methoden kurz beschrieben. Ergebnisse der Methoden sind unter Ergebnisse zu sehen.
Bei Depth of Field handelt es sich um den Effekt, welcher auch aus der Fotographie bekannt ist. Es gibt dabei einen Fokuspunkt, in dessen Bereich die Teile einer Szene scharf erscheinen. Je weiter Teile von diesem Fokuspunkt entfernt sind, desto unsch&aum;rfer werden diese dargestellt. Auch das menschliche Auge funktioniert nach diesem Prinzip. Daher ist die Methode auch sehr effektiv, da Szenen mit Tiefenunschärfe als natürlicher empfunden werden als Szenen in denen alle Teile scharf dargestellt werden. Der Anwendung der Methode auf Volumsdaten soll bewirken, dass der Betrachter auf wichtige Teile der Daten durch deren schärfere Darstellung hingewiesen wird.
Normalerweise werden in der Volumsvisualiseriung alle Teile einer Szene scharf dargestellt. Durch das Raycasting in der normalen Renderingmethode wird automatisch alles scharf dargestellt. Dies hat auch meistens Sinn, da in vielen Fällen Informationen im Datensatz gesucht werden sollen. Ist jedoch der interessante Teil bekannt, kann es sinnvoll sein für den Betrachter diesen Teil hervorzuheben. Depth of Field kann dazu verwendet werden.
Um den Effekt des Depth of Field mit Raycasting zu erzielen, wird das Raycasting wiederholt auf einen Datensatz angewandt. Die verschiedenen Raycasting-Methoden haben einen Fokuspunkt, in dem sich die Strahlen treffen. Das Endergebnis wird danach durch Addition der einzelnen Ergebnisbilder erzeugt. In Bereichen, die näher am Fokuspunkt liegen, ist die Abweichung der verschiedenen Ergebnisbilder geringer und daher erscheinen diese Bereiche schärfer.
Es ist von zentralem Interesse in der Volumsvisualisierung Einblick in das innere der Daten zu bekommen. Es existiert schon eine Reihe von Arbeiten, welche sich mit diesem Thema befassen. Das von mir entwickelte Focus+Context ist eine effektive Methode, um einen besseren Einblick in die Daten zu bekommen.
Der Name Focus+Context stammt ursprünglich aus der Informationsvisualisierung. Dort wird, je nach Art der Daten, ein Teil genauer dargestellt, während der Rest nur schemenhaft dargestellt wird. Ich habe diese Idee übernommen und sie für die Volumsvisualisierung adaptiert. Der Fokusbereich ist eine Kugel, welche vom Benutzer an die gewünschte Stelle mit gesetzt werden kann. In dieser Kugel werden die Daten normal gerendert. Vom Rest (Kontext) werden nur die Silhouetten der Objekte dargestellt. Dadurch wird der Blick auf den Fokusbereich nicht verdeckt, jedoch ist dadurch ein Überblick über die restlichen Daten gegeben. Das hilft dem Betrachter die Lage des Fokusbereichs zu erkennen.
Die Methode funktioniert auch mittels Raycasting. Es wird dabei für jeden Sample-Punkt entlang eines Strahls ermittelt ob er im Fokusbereich liegt oder außerhalb. Je nach dem wird die passende Renderingmethode gewählt. Im Übergangsbereich werden die Farb- und Opazitätswerte der beiden Renderingmethoden interpoliert. So kommt es zu einem stufenlosen Übergang.
Die meisten Ansätze zur Merkmals-Extraktion, auch das Focus+Context, gehen davon aus, dass die Lage des interessanten Bereichs bekannt ist. In vielen Fällen ist dies aber nicht der Fall. Die Methode 3D Dithering soll dazu dienen die Lage eines solchen Bereichs aufzufinden.
Um diese Teile zu finden wird der Datensatz in kleine Wüfel unterteilt. Diese Würfel haben einen bestimmten Abstand zueinander. In diesen Zwischenräumen werden nur die Silhouetten der Objekte dargestellt. Dadurch sind auch Würfel vom inneren des Datensatzes zu sehen. Das Innere der Würfel wird normal gerendert. Bei geeigneter Wahl der Wüfelgröße und deren Abstand zueinander schneidet ein Würfel ein Objekt von Interesse. Ist die Lage eines solchen Objekts bekannt, kann zum Beispiel die Focus+Context Methode verwendet werden um das Objekt hervorzuheben.
Diese Methode ist ein neuer Ansatz für das Problem Einsicht in die Daten zu bekommen. Alle herkömlichen Methoden teilen den Fokus- und Kontextbereich nach deren Position auf. In manchen Fällen ist aber eine andere Einteilung von Interesse.
Bei Magic Lamp werden die Renderingmethode für einen Punkt nach dessen Normalvektor gewählt. Die Magic Lamp simuliert dabei eine Lampe, welche aus einer bestimmten Richtung auf den Datensatz "strahlt". Zeigt der Normalvektor eines Punktes annähernd in die Richtung dieser Lampe so wird der Punkt normal gerendert, ansonsten wird wieder die Methode zum Rendern der Silhouetten verwendet. Die Abweichung des Winkels, welcher über die Renderingmethode entscheidet, kann vom Benutzer gewählt werden.
Für die Klassifikation werden aber nur Punkte berücksichtigt, welche einen Gradienten mit einem bestimmten Betrag aufweisen. Dadurch werden keine Bereiche mit geringer Änderung normal gerendert, sondern nur Kanten oder Übergänge zwischen zwei Objekten. Dadurch wird die Übersichtlichkeit gewahrt.
Ergebnisse
In diesem Abschnitt sind einige Ergebnisbilder der vier vorgestellten Methoden abgebildet. Sie wurden alle mit dem von mir erstellten Programm gerendert. Die Bilder sollen dazu dienen die Vorteile der einzelnen Methoden hervor zu heben. Alle verwendeten Datensätze stammen aus der Computertomographie www.volvis.org.
Neben den hier abgebildeten Ergebnisse gibt es noch weitere Ergebnisse.
Die folgenden zwei Abbildungen zeigen zwei Ergebnisse der Depth of Field Methode. Der Datensatz in der ersten Abbildung stammt von einem menschlichen Kopf. Die Größe des Datensatzes ist 184x256x170. Die Datenwerte bewegen sich zwischen 0 und 4096. Im linken Bild wurde der Fokuspunkt am vorderen Ende (Kiefer) gesetzt, im rechten Bild im Bereich der Ohren.
Die zweite Abbildung zeigt einen Motorblock. Die Größe des Datensatz ist 256x256x128. Der Wert eines Datenpunkts kann zwischen 0 und 256 liegen. In dieser Abbildung ist im linken Bild der Fokuspunkt am vorderen Ende und im rechten Bild am hinteren Ende des Objekts.
Für die Ergebnisbilder in folgender Abbildung wurde der gleiche Datensatz den menschlichen Kopfs verwendet wie bei der Depth of Field Methode. Das linke Bild zeigt das Ergebnis des normalen Rendering-Verfahrens nach Marc Levoy. Das rechte Bild hebt den Ansatz der Wirbelsäule hervor. Durch die Focus+Context Methode ist dieser Bereich sehr gut freigestellt. Auch das Drehen des Datensatzes verdeckt diesen Bereich nicht, da immer nur die Silhouetten der restlichen Teile dargestellt werden.
In der folgenden Abbildung ist selbiger Effekt mit einem anderen Datensatz dargestellt. Es wurde der Datensatz eines Teetopfs verwendet. Die Größe des Datensatzes beträgt 256x256x178. In diesen Teetopf wurde noch ein Hummer platziert. Im linken Bild ist der Datensatz mit der normalen Rendering-Methode dargestellt. Die Außenwände des Teetopfs verhindern den Blick auf den Hummer. Im rechten Bild ist der Datensatz mit der Focus+Context Methode dargestellt. Der Hummer in der Mitte des Teetopfs ist hier gut zu erkennen.
Um ein Ergebnisbild für diese Methode zu erhalten wurde der Datensatz eines Leopardengeckos verwendet. Der Datensatz hat die Ausmaße von 512x512x88, wobei der Abstand in z-Richtung 2.8 mal größer ist als in den beiden anderen Hauptrichtungen. Das linke Bild wurde mit der normalen Rendering-Methode erstellt. Das rechte Bild wurde mit der 3D Dithering Methode erstellt. Im mittleren bis hinteren Bereich des Geckos fällt ein rötlicher Dithering-Quader auf. Dieser schneidet den Magen. Somit kann man die Position des Magens lokalisieren und ihn möglicherweise mit der Focus+Context Methode darstellen.


Für die folgende Abbildung wurde der Datensatz des Teetopfs verwendet. Die Magic Lamp "strahlt" von rechts oben auf das Objekt herab. Da nur die Teile hervorgehoben werden, deren Normalvektor in Richtung der Magic Lamp zeigt, ist auch ein Teil der Innenwand des Teetopfs zu sehen. Dies ist mit herkömmlichen Rendering-Methoden kaum zu erreichen.

Implementation
Die Implementierung erfolgt in C++. Zusätzlich zu den Standard-Libraries wird noch das Visualization Toolkit von Kitware benutzt. Dieses Toolkit ist ein sehr nützliches Tool, welches viele Funktionen um die eingelesenen Daten zu verarbeiten und zu rendern. Zur Implementierung des User Interface habe ich Qt von Trolltech verwendet. Um das Visualization Toolkit in Qt einzubinden habe ich die Klasse vtkqt von Matthias König verwendet.
Die folgende Abbildung zeigt einen Screenshot des Ptogramms. Der Source-Code und eine kompilierte Version (Windows XP, 2000) des Programms ist unter Downloads zu bekommen. Auf der linken Seite im Screenshot ist ein Karteikarten-System, in dem alle Einstellungen für die einzelnen Methoden vorgenommen werden können.
Das Programm ist so geschrieben, dass alle vier Methoden einzeln verwendet werden können aber auch jede beliebige Kombination der vier Methoden verwendet werden kann. Neben dem Erzeugen einzelner Ergebnisbilder können auch Animationen der einzelnen Methoden erzeugt werden. Dabei wird eine Reihe von Bildern ausgegeben, welche dann mit einem geeigneten Programm zu einer Animation zusammengefügt werden können.
Ein Großteil der Zeit habe ich zum Einlernen in C++, VTK und Qt gebraucht. Es kam vor allem zu Problemen mit VTK. Diese Probleme habe ich dadurch gelöst, dass ich einige Klassen von VTK umgeschrieben habe, damit sie für mein Programm geeignet waren.
Downloads
Programm und Dokumentationen:
- Paper (.pdf)
- Programm DOF (XP Version)
- Handbuch zu DOF (.pdf)
- Source Code
- Source Dokumentation (.chm)
- Source Dokumentation (html)
Animationen (alle Windows AVI mit DiVX 5.02 komprimiert):
- Bonsai DOF
- Fuel DOF
- Leg DOF 1
- Leg DOF 2
- Leg DOF 3
- Bonsai F+C 1
- Bonsai F+C 2
- Bonsai F+C 3
- Bonsai F+C 4
- Bonsai F+C 5
- Engine F+C
- Gecko F+C
- Lobster F+C 1
- Lobster F+C 2
- Head F+C
- Teapot F+C
- Bonsai 3D Dith 1
- Bonsai 3D Dith 2
- Bonsai 3D Dith 3
- Bonsai 3D Dith 4
- Engine 3D Dith 1
- Engine 3D Dith 2
- Engine 3D Dith 3
- Bonsai ML
- Engine ML 1
- Engine ML 2
- Teapot ML
- Engine DOF & F+C