Schnelle Blickwinkelsynthese

In diesem Beitrag möchte ich euch das Thema meiner Bachelorarbeit vorstellen. Ich versuche dabei nicht zu sehr in Detail zu gehen und es so zu beschreiben, dass es jeder verstehen kann.

Beschleunigte Implementierung eines
Verfahrens zur Blickwinkelsynthese
fur 3D Videosequenzen

Der Titel klingt, wie es sich für eine wissenschaftliche Arbeit gehört, erst mal kompliziert. Also worum geht es:

Blickwinkelsynthese

Unter Blickwinkelsynthese versteht man, dass in einer Videosequenz nachträglich die Position der Kamera geändert wird und somit die betrachtete Szene aus einem anderen Blickwinkel gezeigt werden kann. Wofür soll das gut sein? Berechtigte Frage. In erster Linie wird die Blickwinkelsynthese in der Übertragung von 3D-Video-Daten benutzt. Achtung: Hier darf man 3D-Video nicht mit dem aus 3D-Kinos bekannten Stereo-Video verwechseln. Im Unterschied zu Stereo-Video, bei dem immer nur die zwei Video-Streams für das rechte und linke Auge gezeigt werden, zeigt 3D-Video beliebig viele Blickwinkel gleichzeitig an. Das ist natürlich nur mit Auto-Stereoskopischen Displays möglich. Je nach dem, aus welcher Richtung man auf dieses Display schaut wird einem ein anderes Bild gezeigt – ganz ohne nervige 3D-Brille. Um aber die riesige Menge an Daten für all diese Bilder zu reduzieren, werden nicht alle Blickwinkel übertragen. Stattdessen benutzt man die Blickwinkelsynthese um aus den vorhandenen Bildern die fehlenden künstlich zu erzeugen. Möglich wird das erst, wenn man zusätzlich zu den Video-Bildern auch noch so genannte Tiefen- oder Disparitätskarten überträgt. Das heißt für jeden Bildpunkt wird nicht nur die Farbe, sondern auch die Distanz zur Kamera angegeben. Die Distanz kann entweder gemessen, wie es z.B. die Kinect-Kamera macht, oder im nach hinein berechnet werden.

Beschleunigte Implementierung

Dieses Verfahren habe ich weder erfunden, noch erweitert oder verbessert. Meine Aufgabe lag darin die vorhandene Software zur Blickwinkelsynthese in Ihrer Geschwindigkeit zu verbessern. Erreichen wollte ich das indem ich einen großen Teil der Berechnungen nicht mehr auf dem Prozessor, sondern auf der Grafikkarte erledigen lasse. Grafikkarten haben den Vorteil, dass sie viele identische Berechnungen (mit unterschiedlichen Zahlenwerten natürlich) parallel ausführen können – genau das was man bei der Blickwinkelsynthese braucht.

Was habe ich erreicht?

Für die eigentliche Anwendung, nämlich die “offline” Blickwinkelsynthese, d.h. erst berechnen, speichern und hinterher anschauen, hat meine Implementierung leider keine wesentliche Verbesserung gebracht. Das liegt hauptsächlich daran, dass der Datentransfer auf die Grafikkarte (und vor allem wieder zurück) zu lange dauert. Wenn man die Daten allerdings nicht speichern, sondern direkt anzeigen möchte, ist meine Implementierung bestens geeignet. Dafür habe ich ein Programm geschrieben, welches ein 3D-Video einliest und dann eine Blickwinkelsynthese durchführt und das Ergebnis in einem Fenster darstellt. Dabei kann man den Blickwinkel, während das Video spielt, entweder mit der Maus verändern, oder per Head-Tracking mit einer Webcam an die Position des Kopfes anpassen lassen.

Demo-Anwendung

Die Anwendung wurde unter Qt mit OpenGL entwickelt. Für das Headtracking wurde die Ehci-Bibliothek verwendet. Wiedergegeben werden Rohdaten im YUV-Dateiformat. Außerdem sind zusätzlich zu den Videos auch die Tiefenkarten notwendig. Einige Beispiel-Sequenzen findet ihr auf dem FTP-Server des Frauenhofer Heinrich Hertz Instituts.

Server: ftp.hhi.de
Verzeichnis: HHIMPEG3DV
Benutzername: mpeg3dv
Passwort: Cah#K9xu

Der Version 0.1 liegt eine Konfigurationsdatei für folgende YUV-Dateien bei:

  • Book-Arrival-Sequenz: 1 2 3 4

Download

Das Institut für Nachrichtentechnik der RWTH hat mir freundlicherweise erlaubt den Quellcode zu veröffentlichen. Dafür gibt es ein Git-Repository auf Sourceforge.

git clone git://git.code.sf.net/p/qtviewsynth/code qtviewsynth-code

Das fertig kompilierte Programm könnt ihr hier herunterladen.

Ein Gedanke zu “Schnelle Blickwinkelsynthese

  1. This is a very nice work. Congratulations for the GPGPU work and your idea on video synthesis. I am also very glad you’ve used EHCI.
    Your results look very good!

Die Kommentarfunktion ist geschlossen.