(Die Seite wurde neu angelegt: „= Technische Umsetzung vom Kinect-Projektor-Projekt = Technische Details für GPN12:Kinect-Touchpad. == Bau des Touchpads == Da der Beamer meist nicht…“) |
(GPN 12 style) |
||
Zeile 1: | Zeile 1: | ||
{{#css:GPN12:Stylesheet}} | |||
= Technische Umsetzung vom Kinect-Projektor-Projekt = | = Technische Umsetzung vom Kinect-Projektor-Projekt = | ||
Zeile 17: | Zeile 20: | ||
Über die Tiefenwerte wird eine Ebene in den Tisch gefittet. Für jeden Punkt, den die Kinect sieht, kann damit der Abstand der Ebene und der nächste Punkt in der Ebene berechnet werden. Sobald ein Punkt sehr nahe am Tisch ist, kann ein MouseDown ausgelöst werden, und das Object verfolgt werden, bis es sich wieder vom Tisch entfernt, was dann ein MouseUp darstellt. Bewegt sich ein Objekt nahe der Oberfläche (2-20cm) könnte auch ein MouseOver ausgegeben werden. | Über die Tiefenwerte wird eine Ebene in den Tisch gefittet. Für jeden Punkt, den die Kinect sieht, kann damit der Abstand der Ebene und der nächste Punkt in der Ebene berechnet werden. Sobald ein Punkt sehr nahe am Tisch ist, kann ein MouseDown ausgelöst werden, und das Object verfolgt werden, bis es sich wieder vom Tisch entfernt, was dann ein MouseUp darstellt. Bewegt sich ein Objekt nahe der Oberfläche (2-20cm) könnte auch ein MouseOver ausgegeben werden. | ||
Aufgaben hier wäre hier eine möglichst glatte Mausbewegung und eine Erkennung der verschiedenen Events. Da der Tisch multitouch-fähig sein soll, müssen auch mehrere Objekte gleichzeitig getrackt werden. (z.B. für eine Zoom-Geste mit zwei Händen). | Aufgaben hier wäre hier eine möglichst glatte Mausbewegung und eine Erkennung der verschiedenen Events. Da der Tisch multitouch-fähig sein soll, müssen auch mehrere Objekte gleichzeitig getrackt werden. (z.B. für eine Zoom-Geste mit zwei Händen). | ||
{{Navigationsleiste GPN12}} |
Aktuelle Version vom 8. April 2012, 20:43 Uhr
Technische Umsetzung vom Kinect-Projektor-Projekt
Technische Details für GPN12:Kinect-Touchpad.
Bau des Touchpads
Da der Beamer meist nicht direkt über dem Feld installiert werden kann, wird das Bild recht stark verzerrt werden, was algorithmisch ausgeglichen werden sollte. Zudem muss klar sein, welches Pixel angesprochen werden muss, wenn ein bestimmter Fleck auf dem Tisch seine Farbe wechseln soll. Daher ist es notwendig, die Position des Beamers und der Kinect relativ zum Tisch zu bestimmen. Für die Kinect mit der Tiefeninformation ist das recht einfach machbar, für den Beamer muss man dann etwas Mathe rausholen. Für die Beamerkalibrierung (Bestimmung der Projektionsmatrix/Homographie) kann man den Beamer als inverse Kamera betrachten und über die normalen markerbasierten Algorithmen gehen.
Kalibrierungsmuster
Die Marker werden im Kinect-Bild erkannt und mit der bekannten Tiefe können ihnen 3d-Positionen zugeordnet werden. Diese Positionen werden dann in Tischkoordinaten (x,y,0) umgerechnet, und damit die Projektionsmatrix berechnet. Soll dann ein bestimmes Bild auf dem Tisch angezeigt werden, kann darüber die auszugleichende Verzerrung berechnet werden. Weiter Bilder auch im github.
Erkennung der Nutzerinteraktion
Über die Tiefenwerte wird eine Ebene in den Tisch gefittet. Für jeden Punkt, den die Kinect sieht, kann damit der Abstand der Ebene und der nächste Punkt in der Ebene berechnet werden. Sobald ein Punkt sehr nahe am Tisch ist, kann ein MouseDown ausgelöst werden, und das Object verfolgt werden, bis es sich wieder vom Tisch entfernt, was dann ein MouseUp darstellt. Bewegt sich ein Objekt nahe der Oberfläche (2-20cm) könnte auch ein MouseOver ausgegeben werden. Aufgaben hier wäre hier eine möglichst glatte Mausbewegung und eine Erkennung der verschiedenen Events. Da der Tisch multitouch-fähig sein soll, müssen auch mehrere Objekte gleichzeitig getrackt werden. (z.B. für eine Zoom-Geste mit zwei Händen).