IMAGE.13PYOpenGl-CTViewer von

Rossmann Christian

1. Vorwort

Einen OpenGL Viewer zu generieren ist heutzutage keine besondere Herausforderung mehr. Der Programmierer kann bei der Erstellung auf die Unterschiedlichsten Software Tools zugreifen und in relativ kurzer Zeit einen adäquaten Viewer mit funktionellen Features erstellen. Tools wie ein Graphic User Interface (GUI) –Builder und ein Integrated Developtment Environment (IDE) erleichtern dabei die Arbeit.

Eine derartige Anwendung mittels Script Sprache umzusetzen ist jedoch nicht alltäglich. Bei einer derartigen Umsetzung kann man zum einen von den klassischen Vorteilen einer Script Sprache profitieren und zum anderen stößt man auf verschiedenste Probleme, die bei einer kompilierbaren Sprachen kaum auftreten können. Nichts desto trotz ist eine Script Sprachen Umsetzung möglich und kann bei entsprechender Programmierung durchaus mit C++ und Co. konkurrieren.

2. System / Modules

Das Projekt wurde mit Python realisiert. Anders als bei C++ z.B. stellt die Umsetzung mit der Script Sprache viel größere Herausforderungen an den Programmierer. Schon allein die Installation der einzelnen Module und die Verlinkung dauerte in diesem Projekt mehrere Wochen, da es kaum Dokumentationen bzw. Hinweise zur ‚Programmzusammenstöpselung‘ gibt.

Es wurden in diesem Projekt auch unterschiedliche Performance Analysen durchgeführt um festzustellen, ob eine Umsetzung mit Python überhaupt sinnvoll möglich ist. Rückblickend lässt sich sagen, dass durch Verwendung entsprechender Python Module eine Sinvolle Anwendung möglich macht

Python 2.5 (open source scripting/interpreted language)

Standard modules:

Tkinter

Array

Additional modules:

PYOpenGL

GLUT

TOGL

Ctypes

Numpy

Python Eggs

PIL

Laptop

1.       Win XP / OS 32

2.      CPU 2 GHz

3.      1G RAM

4.      ATI Mobility Radeon X1400

3. About the Viewer

In diesem Projekt (im Zuge der LU VIS) wurde ein OpenGLViewer mit Python 2.5.(2) erstellt. Die Aufgabe bestand darin, bearbeitete CT Daten einzulesen und darzustellen. Weiters sollte der Benutzer die Möglichkeit haben, die CT Daten durch entsprechende GUI Funktionen unterschiedlich darzustellen. Mit dem PYOpenGL-CTViewer kann der Benutzer auf folgende Funktionen zurückgreifen:

5.      Lagen von unterschiedlichen Datensätzen

6.      Slicing in X, Y und Z Richtung

7.      Implementiert als 2D und 3D Textur

8.      Interaktives Einstellen der Transferfunktion

9.      Implementiert für Software- und Shaderumsetzung

10.   Render Options

11.    Marching Cubes Algorithmus zur Iso Surface Visualisierung

12.   Mouse Interactionen (Verschieben, Drehen, Zoomen)

13.   Exportieren des Views als ‚.jpg‘ Image

Das GUI selbst sieht wie folgt aus:

4. Bedienung und Funktionalität

Das GUI besteht aus einem großen Viewport-Widget und 3 zusätzlichen Widgets zur Viewport Einstellung. An der linken Seite des Viewport-Widgets kann der User mit dem ‚LOAD FILE‘-Button Datensätze laden. Hat man den View entsprechend eingestellt, kann man mit dem ‚SAVE IMAGE‘-Button als ‚.jpg‘ Datei exportieren. Darunter befinden sich Checkbuttons mit denen der Benutzer je nach Grafikkarte den Darstellungsmode auswählen kann. ‚Force 2D Texture‘ erzwingt das Darstellen der Daten mittels 2D Texturen falls 3D Texturen nicht von der Grafikkarte unterstützt werden. ‚Apply TF. 2 Views‘ bewirkt das Anwenden der eingestellten Transferfunktion auf den eingestellten View. Durch Aktivierung des ‚Force ARB Shading‘-Buttons wird im Programm eine 1D Textur generiert, welche mittels Shader auf die 3D Textur angewandt wird. Mit dem ‚CLOSE‘-Button kann das Programm verlassen werden.

4.1. Sliders-Widget

Beim Laden des Datensatzes werden die Sliders automatisch in die Mitte gestellt. Ferner wird angezeigt, an welcher Position (welcher Slice) gerade dargestellt wird. Beim Betätigen des entsprechenden Sliders wird stellt der View automatisch auf die aktivierte Ebene um. Um wieder zur Ausgangssituation zu kommen, kann man den ‚Reset‘-Button verwenden. Die Sliders werden dann wieder in die Ausgangsstellung gebracht (Mitte).

4.2. Render-Widget

Um ein wenig mit OpenGL Optionen zu experimentieren wurde ein Render-Widget entworfen. Durch Eingeben (Text) der entsprechenden Option wird diese beim Rendern angewendet. Das Widget wurde so konzipiert, dass es schnell und einfach für beliebige Optionen erweiterbar ist. Z.Z werden folgende Optionen unterstützt:

1.       Slicing Mode:

a.      GL_LINEAR, GL_NEAREST

2.      Marching Cubes Mode

a.      GL_LINE, GL_FILL

b.      SMOOTH, FLAT (Shading)

4.3. Transfer-Widget

Während der Datensatz geladen wird, läuft im Hintergrund eine Datenanalyse. Die Daten werden hinsichtlich Dichte und Häufigkeit des Auftretens analysiert. Diese Information wird im Transfer-Widget als Histogram (grau) dargestellt.

Der Benutzer kann eine Transferfunktion enstellen, indem er Transferpunkte im Textfeld eingibt. Die Syntax sieht wie folgt aus:

TFpt@ [Position 0-1] [Color Red 0-255] [Color Red 0-255] [Color Red 0-255] [Opacity 0-1

]

Wenn der Transferpoint richtig übernommen wurde, wird er im Frame daneben dargestellt. Ferner wird er mit der entsprechenden Farbe in der darüber liegenden Grafik dargestellt. Sind mehrere Transferpunkte definiert (>1), so wird die Transferfunktion als Graph dargestellt.

Weiters Wird in diesem Widget der Iso Wert für die Marching Cubes Darstellung mit folgender Syntax festgelegt:

TFptMC@ [Position 0-1-1]

Der Threshold Wert zur Berechnung des MC Algorithmus wird als senkrechte Gerade dargestellt.

5. Zusammenfassung derVor und Nachteile der Umsetzung mit Python

Nachteile:

·         Schwache Performance bei großen Datensätzen

·         Datentyphandling zwischen den Modulen

·         Kaum Dokumentation für eine derartige Anwendung

·         Python muss installiert sein

·         Erstellung einer ‚.exe‘-Datei nicht (ohne weiteres) möglich

Vorteile

·         Klassischen Vorteile einer Script Sprache (Short Code, Syntax, O.o)

·         Einfaches und schnelles GUI setup

·         Platformunabhängig

·         Integration von C++ und Fortran möglich (für große Datenschleifen)

6. Beispielbilder

IMAGE.4

IMAGE.13

 

IMAGE.15

IMAGE.20

IMAGE.19

7. Downloads

Program

1.Präsentation

8. Referenzen

[1] Hans P. Langtangen, Python Scripting for Computional Science

[2] Python Homepage, http://www.python.org

[3]Scientific Tools for Python, http://www.scipy.org

[4]PyOpenGL, http://pyopengl.sourceforge.net