MasterQ32

Voxie

Zusammenfassung

Voxie ist im Zuge meines Studienprojektes an der Universität Stuttgart entstanden. Es ist ein Werkzeug, mit dem man Voxeldatensätze aus der Computertomographie oder anderen 3D-Scan-Methoden anzeigen und nachbearbeiten kann.

Entwicklung

Das Programm wurde in einem Team von anfangs 8 Personen entwickelt. Im Laufe des Projekts sind aber zwei Teammitglieder ausgeschieden. Wir haben Voxie in zwei Iterationen entwickelt, wobei wir in der ersten Iteration einige grundlegende Designfehler gemacht haben, die anschließend zur kompletten Neuentwicklung in Iteration zwei geführt haben.

Technik

Voxie wurde mit dem Qt5-Framework entwickelt, welches auf C++ setzt und viele wichtige Funktionen liefert. Die gesamte Grafikoberfläche wurde mit der klassischen Qt-Oberfläche entwickelt, nachdem wir in Iteration 1 festgestellt haben, dass QtQuick noch nicht ausgereift genug ist, um in solchen Projekten Anwendung zu finden.

Die Voxeldaten können aus einem rudimentären Rohformat oder aber HDF5-Dateien geladen werden und werden intern als 3D-Array mit float-Variablen repräsentiert.

Aufwändige Berechnungen werden mit OpenCL durchgeführt.

Funktionsumfang

Voxie kann Voxeldatensätze laden und auch wieder speichern. Die geladenen Datensätze können mit verschiedenen Werkzeugen betrachtet werden. Zudem bietet das Programm die Option, die Datensätze mit 3D- oder 2D-Filtern zu bearbeiten und damit die Qualität des Datensatzes zu steigern. Zudem bietet Voxie sowohl die Funktion für Userscripts als auch Plugins.

Darstellung

Voxie kann Datensätze auf verschiedene Arten darstellen.

Für die 3D-Darstellung gibt es zwei Modi: X-Ray und Surface. Im X-Ray-Modus wird ein Raycasting-Verfahren angewant, welches eine Durchsicht durch den Datensatz ermöglicht und damit eine sehr detailreiche Darstellung bietet. Der Surface-Modus führt einen Marching-Cubes-Algorithmus aus, welcher eine Oberfläche anhand eines Grenzwertes extrahiert. Dieser Modus ist praktisch, um die Form eines Objektes zu erkennen.

Für die 2D-Darstellung gibt es den Slice-Modus. In diesem Modus wird eine Schnittfläche durch den Datensatz gelegt und die Werte werden für die einzelnen Pixel der Schnittfläche interpoliert ausgelesen. Die so dargestellte Schnittfläche kann mit 2D-Filtern nachbearbeitet und mit einem Farbverlauf eingefärbt werden.

Userscripts

Das Programm ist durch den Nutzer erweiterbar:
Er kann mit der in QT integrierten Scriptsprache QtScript Voxie automatisiert steuern oder aber via D-Bus das Programm kontrollieren. Es ist möglich, nahezu alle Programmfunktionen mit D-Bus oder den Scripten anzusteuern.

Plugins

Voxie bietet Support für native Plugins, welche in C++ geschrieben sind. Die Plugins können an vielen Stellen im Programm eingreifen und beispielsweise Support für neue Dateitypen oder aber auch neue Darstellungsmöglichkeiten bieten. Zudem können sie natürlich auch Filter für Datensätze bereitstellen.

Projektfortschritt

Von der Seite des Teams ist das Projekt abgeschlossen und wurde an das Institut IPVS übergeben. Dort wird es intern noch einmal an einige Anwendungsfälle angepasst und wird danach auf GitHub veröffentlicht.

Mein Beitrag zum Projekt

Ich habe bei Voxie die technische Leitung des Projekts übernommen und Teile der Software entworfen. Bei der Implementierung war mein Hauptfokus auf der 3D-Darstellung und dem grundlegenden Framework mit Support für Scripting und der Plugins.

(Copyright © 2012-2017 Felix Queißner, Impressum)