Höhenwelten

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

  Das Projekt „Höhenwelten" zeichnet die Tiefendaten der Kinect V2 auf und projiziert sie als Höhenlinien auf einer beliebigen Ebene.


Idee

Verschieden Höhen einer Ebene können wie Höhenlinien bei Bergen o.ä. auf jeglichen Ebenen projiziert werden. Die verschiedenen Ebenen im aufgenommenen Bild werden von den Tiefensensoren der Kinect wahrgenommen. Für jede Farbabstufung wurden Schwellwerte im Code definiert, welche über den Beamer auf die Ebene projiziert werden.


Vorbereitung

  • Einarbeitung in OpenFrameworks
  • Einarbeitung in die Funktionsweise der Kinect V2
  • Beschaffung der Hardware & Download von Visual Studio und den ofx Bibliotheken


Versuchsaufbau

Als höhenverstellbare Unterlage bekamen wir ein Laken, welches man verschieden formen konnte. Dies wurde auf einem Tisch, unterhalb des Beamers und der Kinect V2 platziert. Der Beamer und die Kinect V2 wurden direkt nebeneinander an einem Metallgerüst aufgehangen. Der Abstand zwischen Beamer und Tisch betrug ungefähr 1,5m. Der Beamer wurde mittig gerade nach unten auf den Tisch richtend installiert. Die Kinect V2 muss während der Projektion mit einem Laptop verbunden sein, welcher die Daten bearbeitet und das Bild für den Beamer ausgibt.


OpenFrameworks

Die Verarbeitung der Kinect-Daten zu einem projizieren Bild auf dem Beamer haben wir in Visual Studio implementiert. Hierbei haben uns meistens Beispiele aus den ofx-Bibliotheken weitergeholfen.


Allgemeines Vorgehen

Als erstes wurde ein Bild zum speichern der Daten erstellt und zur Ausgabe auf dem Beamer. Dann wurden die Tiefeninformationen der Kinect V2 eingelesen, dessen Bild eine 512x424 Pixel Auflösung hat. Für jedes Pixel wurde dann ermittelt in welchem Bereich die Tiefe liegt und ebenfalls jedem einen entsprechend definiertem Farbwert zugewiesen.

Zur Kalibrierung des Bildes während der Laufzeit wurden einige Parameter definiert. Diese kann man mit definierten Tastenkombinationen verstellen. Hierzu gibt es die Funktion keyPressed().

Außerdem haben wir noch eine Glättung implementiert, da das Bild beim Zoomen sehr ungenau wurde. Hierzu haben wir die Auflösung des Bildes erhöht. Die Auswertung erfolgt entweder in einer 3x3 oder 5x5 Pixel-Matrix, wobei die häufigste Farbe, bzw. Höhe, für alle Pixel gesetzt wird.


Homografie

Als letztes wollten wir noch eine Homografie einfügen. Dies ist notwendig, da der Beamer und die Kinect nicht exakt auf der selben Stelle sind und somit eine kleine Verzerrung im projizierten Bild ensteht. Bei uns ist es jedoch kaum aufgefallen, da der Beamer und die Kinect direkt nebeneinander angebracht wurden. Wegen zeitlichen Gründen konnten wir die Homografie nicht mehr einfügen, da wir hier auch noch das Problem hatten, dass die ofx-Bibliothek (ofxCV) sich nicht in unser Projekt integrieren hat lassen.

KinectBeamer.png

Allgemeine Probleme

  • Homographie Bibliothek (ofxHomografie) lies sich nicht mit unserem Projekt kompilieren
  • Kleine Veränderungen der Hardwareposition machen eine Neueinstellung erforderlich
  • Latenz beim verändern des Untergrunds
  • Finden der richtigen Bibliotheken für die Kinect V2


Ergebnis

Im Großen und Ganzen haben wir unsere Ziele erreicht. Wir wollten mit der Kinect V2 die Tiefeninformationen auslesen, diesen Farben zuordnen und auf einer Ebene über den Beamer projizieren. Das projizierte Bild war außerdem in der Größe und Position einstellbar. Am Ende haben wir es aus zeitlichen Gründen nicht mehr geschafft die Homografie mit einzubinden.

Hoehenwelten Ergebnis.png

Links

Code:

[1]

Team

BEI-6 / BEI-7 Interaktion WS19/20 Daniel Lange, Andreas Kraus und Verena Hohe