Bideo

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Einleitung


Interaktion zwischen Mensch und Maschine

Im Rahmen dieser Diplomarbeit wird die Realisierung eines Prototypen für ein neuartiges interaktives System zur Steuerung von 3D Anwendungen behandelt. Um zu verstehen, welche Faktoren bei dieser Entwicklung zu berücksichtigen sind, gilt es, sich zunächst mit der Bedeutung des Begriffes Interaktion auseinanderzusetzen. Was ist Interaktion? Welche Kriterien sind zu beachten, wenn ein Mensch mit einem Computer in Kontakt tritt? Auf welche Art und Weise erfolgt der Austausch von Informationen zwischen den Interaktionspartnern? Fragen dieser Art müssen geklärt werden, bevor man sich mit der Umsetzung eines neuen Eingabesystems befassen kann.


Definition



Allgemein

Der Begriff Interaktion beschreibt im Allgemeinen das wechselseitige Wirken zwischen zwei oder mehreren Partnern. Der Ablauf an sich, sowie die dabei übermittelten Handlungen und Informationen können verschiedener Art sein. Bei der Interaktion folgt auf jede Aktion eine Reaktion, welche wiederum Handlungen auf Seiten des Gegenüber hervorruft bzw. hervorrufen kann. Dieser wechselseitige Austausch ist nicht nur auf den Menschen beschränkt. Auch Tiere oder Gegenstände können Interaktionspartner sein. So kann ein Gespräch zwischen zwei Personen als interaktiver Prozess angesehen werden. Hierbei findet neben dem Austausch von Gesten wie dem Händeschütteln oder Zuwinken auch ein wechselseitiger Informationsfluss über die Sprache, Körperhaltung und Mimik statt. Ebenso sind das Umschalten des Fernsehsenders über die TV-Fernbedienung oder das Spielen eines Computerspieles in den Bereich der Interaktion einzuordnen.


Mensch- Maschine- Interaktion

Bei der Interaktion von Mensch und Maschine spielen die Art und Weise, in der ein Informationsaustausch stattfindet, sowie die Reaktion des Systems auf Benutzereingaben eine entscheidende Rolle. Sog. Interaktionssysteme sind in fast allen Bereichen des Lebens anzutreffen und dienen in der Regel dazu, den Menschen zu unterstützen, indem sie auf dessen Anfrage oder Befehl hin bestimmte Arbeiten ausführen. Um auf Benutzereingaben, die Umgebung oder Ereignisse reagieren zu können, sind sie in der Regel mit Sensoren ausgestattet, welche Signale aufnehmen und an ein verarbeitendes System weiterleiten. Zu diesen Sensoren zählen beispielsweise Kameras, Schalter, Bewegungsmelder, Lichtschranken und Sensoren, die auf Druck- oder Temperaturveränderungen reagieren.


Erwartungskonformität



Eine erfolgreiche Interaktion kann erst dann zustande kommen, wenn auf jede Aktion eine erwartungskonforme Reaktion erfolgt.

Bei der Mensch- Maschine- Interaktion richtet sich eine Person als Antragsteller mit einer bestimmten Absicht an ein Computersystem und setzt voraus, dass dieses entsprechend seiner Erwartungshaltung reagiert. Tritt bei der Verarbeitung der Benutzereingaben eine Fehlinterpretation auf Seiten des Programms auf, so kommt es zu Fehlverhalten und Missverständnissen.


Erwartungskonformität am Beispiel des Fly-by-wire- Systems

Wie wichtig in manchen Fällen ein korrektes Reaktionsverhalten sein kann, soll am Beispiel des sog. Fly-by-wire- Systems aus dem Bereich der Luftfahrt veranschaulicht werden. Die meisten modernen Flugzeuge verfügen über ein solches System, da sie aufgrund ihrer Form aerodynamisch nicht stabil sind. Dies macht permanent Kontrolleingriffe erforderlich, mit denen jeder Pilot überfordert wäre. Aus diesem Grund wurde ein Computersystem entwickelt, das diese Aufgabe übernimmt und wie folgt arbeitet: Die Steuerbefehle des Piloten werden über die Kontrollinstrumente im Cockpit eingelesen und an einen Rechner weitergeleitet. Dieser verarbeitet in Echtzeit die Eingangssignale, gleicht diese mit den Flugparametern ab, führt Korrekturmaßnahmen durch und leitet die überarbeiteten Steuerbefehle an das Leitwerk des Flugzeuges weiter. Der Prozess der Mensch- Maschine- Interaktion findet hierbei also zwischen dem Piloten, dem Fly-by-wire- System und dem Flugzeug statt.

Da jeden Tag Millionen Menschen Passagierflugzeuge nutzen, muss das Fly-by-wire- System absolut zuverlässig funktionieren, da die Fehlinterpretation eines Steuerimpulses durch den Computer im schlimmsten Fall zum Absturz der Maschine führen kann. So ging ein Prototyp des neu entwickelten Stealth Bombers F117 verloren, weil die Steuersoftware nicht fehlerfrei arbeitete, was dazu führte, dass die Signale der Gier- und Nickgeschwindigkeitsaufnehmer vertauscht wurden. Knapp zwei Jahrzehnte später kam es bei einem Testflug der F22, welche ebenfalls über ein Fly-by-wire System verfügt, zur Bruchlandung, da der Computer falsche Informationen an das Leitwerk der Maschine gesendet hatte. So reagierte das Flugzeug auf das Anziehen des Steuerknüppels nicht mit dem erwarteten Steigflug, sondern mit einem Flattern des Höhenruders.

Das Beispiel des computergestützten Steuersystems zeigt auf, dass sämtliche Schnittstellen und die dazugehörigen Systemreaktionen bei der Planung und Entwicklung eindeutig bestimmt werden müssen. Weiterhin gilt es, die Software möglichst fehlerfrei zu implementieren und alle Grenzfälle abzudecken, damit es in diesen Bereichen nicht zu einem unvorhersehbarem Verhalten des Computerprogramms kommt. Erst wenn diese Punkte geklärt sind, ist sichergestellt, dass ein System der Erwartungshaltung des Benutzers gerecht wird und angemessen auf dessen Eingaben reagiert.


Intuitivität



Der Grad der Intuitivität gibt an, wie verständlich und leicht ein Eingabegerät zu handhaben ist. Wird eine Person mit einem neuartigen Gerät oder System konfrontiert, so muss sie dessen Funktionsweise zunächst verstehen und sich durch wiederholte Anwendung daran gewöhnen. Ein Eingabegerät kann als intuitiv angesehen werden, wenn es sich ohne Vorkenntnisse von Beginn an problemlos bedienen lässt. Im Idealfall ist dem Anwender hierbei nicht bewusst, dass er ein Gerät bedient. Es steht also nicht die Schnittstelle im Mittelpunkt der Betrachtung, sondern das Ziel, das mit deren Verwendung verfolgt wird.


Wie intuitiv sind Maus und Tastatur?

Viele Menschen arbeiten tagtäglich am Computer. Sei dies im Büro zur Ablage von Verwaltungsdaten, oder in der Autowerkstatt zur Konfiguration des Leistungschips des Motors. Unabhängig von der Art der Tätigkeit, erfolgt die Eingabe im Regelfall immer über die Maus und die Tastatur. Diese Geräte setzen sich seit langem erfolgreich auf dem Markt durch und sind auf dem ganzen Globus verbreitet. Hierbei bleibt jedoch die Frage offen, ob ihr Erfolgskurs darauf zurückzuführen ist, dass sie leicht zu handhaben sind oder ob es daran liegt, dass es ganz einfach keine vernünftigen Alternativen gibt.


QWERTZ- Tastaturbelegung

Tastatur

Die Lettern auf einer Tastatur sind nicht in alphabetischer Reihenfolge sortiert, sondern folgen bei westlichen Standards der sog. QWERTY- bzw. QWERTZ- Tastaturbelegung. Diese Anordnung ist auf den US-amerikanischen Buchhalter Christopher Latham Sholes zurückzuführen und hat den Vorteil, dass häufig genutzte Buchstaben leichter zu erreichen sind. So konnte sich dieses Modell dank der ergonomischen Verteilung der Tasten gegen die Konkurrenten durchsetzen, doch liegt hierin auch die große Schwäche des Systems. So lässt sich das volle Potential einer Tastatur mit dem 10- Finger Schreibsystem erst dann nutzen, wenn man weiß, wo sich die einzelnen Lettern befinden und welcher Finger welche Taste zu drücken hat. Je nach persönlicher Veranlagung bedarf es hierzu einer Lernphase von mehreren Wochen oder gar Monaten. Viele Anwender nutzen auch nach Jahren des täglichen Umgangs für die Eingabe von Texten lediglich die Zeigefinger, was viel Zeit in Anspruch nimmt und nicht selten zu Tippfehlern führt. Allein die Tatsache, dass man den Umgang mit der Tastatur in Textverarbeitungskursen erlernen kann und sollte, lässt vermuten, dass dieses Eingabegerät nicht leicht zu handhaben und somit kaum intuitiv in der Bedienung ist.


Maus

Der sichere Umgang mit einer Computermaus gelingt meist erst nach ein bis zwei Wochen. So haben viele Benutzer vor allem in der Anfangszeit mit der Einschätzung Probleme, in welcher Geschwindigkeit und um welche Distanz die Maus bewegt werden muss, um den Zeiger an die gewünschte Stelle des Desktops zu bringen. Eine mögliche Ursache könnte dabei sein, dass der zurückgelegte Weg des Mauszeigers abhängig davon ist, mit welcher Beschleunigung bzw. Geschwindigkeit der Benutzer die Maus bewegt. Für die richtige Bedienung spielen weiterhin die Haltung der Hand, die Form und Größe des Geräts, sowie die Erreichbarkeit der Tasten eine wichtige Rolle. Liegt die Maus gut in der Hand, so erklärt sich ihre Funktionsweise fast wie von selbst, da die Finger des Anwenders regelrecht auf die richtigen Tasten geleitet werden.


Diese Punkte stellen zwar nur einen kleinen Auszug der Betrachtung von Maus und Tastatur dar, zeigen aber bereits auf, dass beide Eingabegeräte nicht wirklich intuitiv zu handhaben sind, da dem effizienten Umgang eine relativ lange Lernphase vorausgeht.


Arten der Interaktion



Die Interaktion mit einem Computersystem beschränkt sich nicht nur auf die Maus und die Tastatur, sondern kann auf unterschiedlichste Art und Weise erfolgen. So ist es möglich, über die Stimme, die Mimik oder aber über die Messung von Körperfunktionen wie Herzschlag und Körpertemperatur mit einem Computer in Kontakt zu treten.


Gestik

Beispiele hierfür sind Eingabegeräte wie die Maus und die Tastatur. Die gestische Steuerung kann durch eine bestimmte Körperhaltungen oder über Bewegungsabläufe erfolgen. Sie ist somit nicht auf die Hände beschränkt und lässt sich auf den gesamten Körper oder aber auch auf mehrere Personen übertragen. So entspricht das Händeschütteln oder Verbeugen bei einer Begrüßung einem Interaktionsprozess, der auf der Grundlage von Gesten beruht.


Modell „Eve Robot“ (EveR) des koreanischen Entwicklers Baeg Moon-hong

Mimik

Bei einem Gespräch zwischen zwei Personen werden eine Vielzahl von Informationen über die Mimik ausgetauscht. Die Fähigkeit des Menschen, auf diese Art und Weise zu interagieren bzw. kommunizieren, ist so gut ausgeprägt, dass er in der Regel selbst feinste Nuancen bei der Gesichtsregung des Gegenüber erkennen und verstehen kann. So lässt sich oftmals mühelos zwischen einem falschen und echten Lächeln unterscheiden oder anhand der Blickrichtung und der Häufigkeit des Lidschlags feststellen, ob unser gegenüber lügt. Bringt man diese Fähigkeiten einem Computersystem bei, so kann es die Stimmungslage des Menschen anhand des Gesichtsausdrucks erkennen und entsprechend seines Verwendungszwecks reagieren. Zudem gibt es bereits heute Roboter, welche mit Hilfe kleiner Motoren die Mimik des Menschen nachahmen können. Hierzu zählen beispielsweise die japanischen und koreanischen Modelle des „Eva Robot“.


Stimme / Akustik

Auf dem Markt sind Stimmen- und Spracherkennungs- Systeme bereits seit Jahren weit verbreitet. Diese basieren in der Regel auf dem sog. Hidden Markow Modell, das auf bestimmte Merkmale und Sprachmuster des Anwenders reagiert und diese den Wörtern einer Datenbank zuordnet. Die Spracherkennung kann unter anderem dazu verwendet werden, dem Computer über ein Mikrophon Texte zu diktieren oder bestimmte Funktionen des Betriebssystems anzusteuern.


Körperfunktionen

Die Steuerung über Körperfunktionen stellt eine weitere Art dar, mit einem Computersystem zu interagieren. Gehirnströme werden hierbei genauso verwendet, wie die Herzfunktionen, der Pulsschlag oder die Körpertemperatur. In der Regel kann man auf diese Funktionen willentlich gar nicht oder nur im geringen Maß Einfluss nehmen. Somit finden Interaktionssysteme auf der Basis von Körperfunktionen meist bei der medizinischen Überwachung von Patienten oder im künstlerischen Bereich Anwendung.


Anwendungsgebiete



Alltag

Interaktionssysteme sind vielerorts anzutreffen. Die Arbeit an einem Computer im Büro ist der Interaktion ebenso zuzuordnen, wie das Umschalten des TV- Kanals über die Fernbedienung des Fernsehers. Erst kürzlich ist die nächste Generation der Spielkonsolen auf dem Markt erschienen, welche über völlig neuartige Spielecontroller verfügen. So erfolgt die Steuerung der „Wii“- Konsole von Nintendo über einen Controller, der selbständig seine Lage im Raum ermitteln kann. Ein ähnliches System bietet die „Playstation3“ von Sony, die über ein 6- Achsen Gamepad verfügt, welches nach einem ähnlichen Prinzip arbeitet, wie das Eingabegerät der „Wii“.


Forschung, Industrie & Gewerbe

In der Industrie werden interaktive Systeme dazu verwendet, neuartige Prototypen zu entwickeln oder die Qualität von Produkten zu überwachen. Ein Beispiel hierfür ist in der Automobilbranche zu finden. So wird bei jeder großen Neuentwicklung ein virtuelles Modell des Fahrzeugprototypen erstellt, das dann in einem interaktiven Raum eingehend untersucht werden kann. Im Rahmen der Forschung lassen sich interaktive Systeme zur Kontrolle von Simulationen oder zur Durchführung von Studien über die menschliche Kommunikation einsetzen. Bei der Vermarktung – also der gewerblichen Nutzung – helfen sie dabei, Präsentationen interessanter zu gestalten oder den Kunden durch interaktive Eyecatcher auf neue Produkte aufmerksam zu machen.


Medienkunst

Die Entwicklung im Bereich der Kommunikation und Interaktion geht mit der sog. Medienkunst einher. Dort kann hier die Wirkung neuartiger Interaktionssysteme auf das Publikum getestet werden, um neue Bereiche der Anwendung zu finden. Sieht man vom praktischen Aspekt ab, so hat sich im 20. und 21. Jahrhundert mit der Medienkunst ein eigenständiger Kunstzweig etabliert, der weltweit Anerkennung findet.


Motivation

Bevor man ein neues Projekt im Bereich Interaktion in Angriff nimmt, stellt sich immer die Frage, wo der Nutzen des angestrebten Systems liegt. In Anbetracht der Vielzahl unterschiedlicher Interaktionsgeräte, die derzeit auf dem Markt sind, scheint es auf den ersten Blick fragwürdig, ob ein neuartiger Prototyp überhaupt gebraucht wird bzw. sinnvoll angewendet werden kann. Welche Bedeutung haben interaktive Systeme in der heutigen Zeit? Warum ist es sinnvoll, einem Computersystem die Position eines Objektes im reellen Raum verständlich zu machen? Und aus welchem Grund ist die ermittelte Raumkoordinate dazu geeignet, eine 3-D- Anwendung zu steuern? Diese Fragen sind zu klären, um den potentiellen Nutzwert richtig einschätzen zu können. Weiterhin ist es wichtig, die aktuelle Situation im Bereich der Forschung und auf dem freien Markt zu kennen, da man sonst Gefahr läuft, das Rad sprichwörtlich neu zu erfinden, weil ein gleichartiges System unter Umständen bereits existiert.


Stellenwert Interaktiver Systeme



Die Notwendigkeit zweckmäßiger Interaktionssysteme

Seit Jahren wird weltweit Forschung im Bereich Mensch- Maschine- Interaktion betrieben, doch das Thema ist heute aktueller und brisanter denn je. Dies ist darauf zurückzuführen, dass man im Alltag zunehmend mit Automaten und Maschinen konfrontiert wird. Diese sog. Digitalisierung erstreckt sich auf nahezu alle Lebensbereiche und umfasst eine Vielzahl verschiedener Informations- und Interaktionssysteme. Hierzu zählen beispielsweise das Internet, das Mobiltelefon, der mp3- Player oder aber auch das Check-In- Terminal am Flughafen und die Patientenverwaltung in einem Krankenhaus. So löst man das Ticket für die Straßenbahn an einem Fahrkartenautomaten. Bei einem Anruf beim Reisesystem der Deutschen Bahn antwortet eine Computerstimme, hinter der sich ein Softwareprogramm mit Spracherkennung verbirgt. Im Büro hat der Computer längst Einzug gehalten und auch im Privatleben und dem Freizeitsektor sind mit der Spielkonsole und dem Heim- PC interaktive Systeme weit verbreitet. Mit der rasanten Zunahme der Automatisierung im Alltag nimmt gleichermaßen die Informationsflut zu, die der Mensch tagtäglich verarbeiten muss. Aus diesem Grund ist es heute wichtiger denn je, zweckmäßige und leicht verständliche Eingabesysteme zu entwickeln. So sollten beispielsweise auch ältere Menschen, die oftmals keinerlei Erfahrung mit Computern haben, dazu in der Lage sein, an einem Fahrkartenautomaten über die Eingabe am Touchscreen ein Ticket lösen zu können.


Interaktion als Verkaufsargument

Zweckmäßige Eingabesysteme zu entwickeln ist zwar notwendig, auf der anderen Seite aber auch lohnenswert, da hierbei Anwendungsmöglichkeiten entstehen, die erst durch ein neuartiges Interaktionssystem realisierbar sind. Wie sich ein Eingabegerät auf die Art der Bedienung, das gesamte System und letztendlich auch auf die Verkaufszahlen des damit verbundenen Produktes auswirken kann, ist am Beispiel der neuesten Generation von Spielkonsolen nachvollziehbar.


Spielecontroller der Wii- Konsol

Spielkonsolen im Vergleich

Konsolen werden auf der ganzen Welt in hohen Stückzahlen verkauft und erfreuen sich bei vielen Bevölkerungsschichten großer Beliebtheit. Ob sich eine Konsole auf dem Markt durchsetzen kann, hängt vom Spielspaß ab, welcher maßgeblich von der Spiel- Anwendung, der Flexibilität und Qualität der Konsole, sowie von der Handhabung, also der Interaktion zwischen dem Menschen und der Maschine, geprägt wird. Der Konsolenmarkt wird von den drei großen Herstellern Sony, Nintendo und Microsoft bestimmt, die mit ihren neuesten Modellen unterschiedliche Philosophien verfolgen, um die Spieler für sich zu gewinnen. Microsoft setzt mit der X-Box360 auf eine Konsole mit gutem Preis- Leistungs- Verhältnis, anspruchsvoller Grafik und großer Spielauswahl. Sony verfolgt mit der Playstation3 eine Strategie, die auf ein HighEnd- Produkt der gehobenen Preisklasse mit neuesten Technologien und exzellenter HD- Grafik aufbaut. Die Wii- Konsole von Nintendo zeichnet sich hingegen lediglich durch ihr innovatives Gameplay aus. Vergleicht man die Verkaufszahlen, so ist Nintendo mit der neuesten Spielkonsole Wii unbestrittener Marktführer, obwohl diese sowohl der Playstation3, als auch der X-Box360 bei der Grafik, der Auswahl der Spiele und der Flexibilität deutlich unterlegen ist. Dass Nintendo dennoch die höchsten Absatzzahlen erzielt, liegt am niedrigen Preis und dem neuartigen Spielecontroller. Dieser bietet dem Anwender im Vergleich zur Konkurrenz die größten Interaktionsmöglichkeiten, da das Spiel nicht mehr nur durch ein Steuerkreuz und einige Funktionstasten bedient wird. Der Controller der Wii ist dazu in der Lage, die eigene Position im Raum und die Armbewegungen des Benutzers zu erfassen. Die Steuerung der Spiele erfolgt somit intuitiv durch natürliche Bewegungsabläufe, die zu einem vorhersehbaren und verständlichen Systemverhalten führen. Dem Anwender wird hierdurch suggeriert, dass er anstelle des Controllers das Schwert, die Angelrute oder den Tennisschläger der Spielfigur in der Hand hält.


Entwicklungsstand

Die Entwicklung innovativer Interaktionssysteme ist aber nicht nur auf den Spielsektor beschränkt. Auch für die Industrie, diverse Forschungszweige und den militärischen Sektor ist der Bereich der Interaktion von zunehmender Bedeutung. So werden immer mehr Systeme mit künstlichen Intelligenzen und Sensoren ausgestattet, die beispielsweise den Fahrer über den Zustand des Fahrzeuges informieren oder aber Roboter dazu in die Lage versetzen, eine Vielzahl von unterschiedlichen Aufgaben auszuführen. Diese Entwicklung geht seit dem Beginn des digitalen Zeitalters rasend schnell voran und ein Ende ist auch auf längere nicht abzusehen.


Vorreiterrolle des Militärs

Wie schon bei der Erfindung des Internets oder des GPS, spielt das Militär auch bei den Interaktionssystemen eine Vorreiterrolle. Sieht man von dem moralischen Aspekt einmal ab, so sind die Entwicklungen in diesem Sektor erstaunlich und in vielen Bereichen der zivilen Nutzung um Jahre voraus. Bereits heute werden in Südkorea zur Objektsicherung automatisierte Wachtürme des Typs „Sentry“ von der Firma Samsung eingesetzt, die dazu in der Lage sind, Eindringlinge zu erkennen und auf Feindhandlungen zu reagieren. Hierzu sind sie mit einer Vielzahl optischer und akustischer Sensoren bestückt und verfügen sogar über ein Waffensystem. In den USA geht man davon aus, dass es bereits in zehn bis zwanzig Jahren möglich sein wird, einen Teil der Kampfpiloten durch Flugdrohnen zu ersetzen. Die Steuerung soll dann unter Verwendung von GPS, Kameras und Sensoren von einer Bodenstation aus erfolgen. Bereits heute setzt das US- amerikanische Militär Drohnen wie den „Predator“ zur Aufklärung und zur Bekämpfung von Zielen ein.


Interaktionssysteme als Hilfsmittel für den Alltag

Aber auch im zivilen Bereich wird viel Forschungs- und Entwicklungsarbeit betrieben. In Japan arbeitet man seit Jahrzehnten erfolgreich an humanoiden Robotern, die auf zwei Beinen laufen, menschenähnliches Verhalten nachahmen können und dem beeinträchtigten Personen das Leben im Alltag erleichtern sollen. Im Automobilsektor halten immer mehr Systeme Einzug, die den Fahrer informieren und unterstützen sollen. Verlässt das Fahrzeug beispielsweise die Fahrspur, so erkennen Kameras an der Frontstoßstange, dass man den weißen Begrenzungsstreifen unbeabsichtigt überfährt. Über einen Vibrationsimpuls am Lenkrad wird der Fahrer darauf aufmerksam gemacht und gegebenenfalls aus dem Sekundenschlaf geholt, der häufig die Ursache für den Kontrollverlust des Fahrzeugs ist.


Es ist also erkennbar, dass weltweit erfolgreich an neuartigen Interaktiven Systemen geforscht wird und dass die daraus resultierenden Produkte nützlich, sinnvoll und wirtschaftlich sein können. Zudem stellt die Interaktion zwischen dem Menschen und einem Computersystem mit der Vielzahl von Anwendungsmöglichkeiten in Kombination mit der zunehmenden Digitalisierung des Alltags ein spannendes Themengebiet dar, in dem die Grenzen noch lange nicht ausgelotet sind.


Gründe für die Entwicklung des Interaktionssystems



Natürlich spielen bei der Entscheidungsfindung das persönliche Interesse und die im Vorfeld gesammelten Erfahrungen in den Bereichen 3-D und Interaktion eine wichtige Rolle. Im Vordergrund steht jedoch der praktische Nutzwert, den ein solches System mit sich bringen kann und die Frage, ob die Idee überhaupt realisierbar ist, die hinter diesem Projekt steckt.


Der Nutzen eines solchen Systems

Das zu entwickelnde Interaktionssystem ist grundsätzlich dazu gedacht, die Steuerung von 3-D- Anwendungen zu erleichtern. So ließe es sich beispielsweise als Hilfsmittel zusätzlich zu den gängigen Eingabegeräten wie der Maus und der Tastatur verwenden. Die Funktion der Maus komplett zu übernehmen und diese dadurch überflüssig zu machen, wäre aber ebenso denkbar und bei weiteren Entwicklungsarbeiten durchaus realisierbar.

Abgesehen von der praktischen Anwendung stellt sich prinzipiell die Frage, warum es sinnvoll ist, eine veränderliche Position im reellen Raum zu kennen.


Potentieller Nutzwert einer Raumkoordinate

Legt man in der Umgebung einen beliebigen Bezugspunkt fest, so lässt sich für jeden Gegenstand die genaue Entfernung zu diesem Punkt bestimmen. Gelingt es nun, eine Apparatur zu entwickeln, die einem Computer die Möglichkeit gibt, diese Distanz genau zu erfassen und in Form von verwertbaren Daten zu Verfügung zu stellen, so ließen sich eine Vielzahl verschiedener Anwendungen wie 3-D- Scanner oder Systeme zur Erfassung der Position realisieren. Versetzt man es es zudem in die Lage, der Bewegung des Gegenstandes im Raum zu folgen, so besteht die Möglichkeit, mit einem Anwender in Echtzeit zu interagieren, denn erst durch die Erfassung dieses zeitlichen Ablaufes kann ein Impuls und somit auch eine Aktion von Seiten des Nutzers an das System übermittelt und von diesem verarbeitet werden.


Die virtuelle Welt

Erstellt man an einem Computer einen virtuellen dreidimensionalen Raum, so kann man dort ebenfalls einen Referenzpunkt festlegen, der demjenigen in der reellen Umgebung entspricht. Mit dem Interaktionssystem ließe sich hierbei die Position eines beliebigen Gegenstandes einspeisen und auf ein virtuelles Objekt übertragen. Ähnlich wie bei der Konsole Wii könnten dadurch die Bewegungen des Anwenders dazu verwendet werden, einen Spielcharakter zu steuern. Die Funktionen des Controllers würde hierbei das Interaktionssystem auf Basis zweier Kameras übernehmen, dass die Fingerspitze des Anwenders oder einen Gegenstand in dessen Hand erkennt und die Aktionen auf das Spiel überträgt. Mit dem Referenzpunkt bietet sich zudem die Möglichkeit, die reale Umgebung maßstabsgetreu im Rechner nachzubilden, was dazu dient, einen Bewegungsablauf im Raum lokalisieren zu können. Im Gegensatz zum Controller der Wii weiß ein solches System also nicht nur, dass eine Aktion stattfindet, sondern auch wo sich diese ereignet.


Entwicklung im Bereich 3-D

Die Fähigkeiten des Positionserkennungssystems im Bereich der 3-D- Computergrafik zu nutzen ist aus zweierlei Gründen sinn- und reizvoll. So ließen sich mit den Informationen über den Handlungsort und den Bewegungsablauf eine Vielzahl der 3-D- Anwendungen steuern, die bereits auf dem Markt sind. Wirft man weiterhin einen Blick in die Zukunft, so könnten wie bei der Wii- Konsole völlig neuartige Spiele und Interaktionsmöglichkeiten auf Basis eines solchen Systems entwickelt werden. Für die Entscheidung spielt aber auch die rasante Entwicklung im Bereich 3-D eine wichtige Rolle. Dreidimensionale Grafiken und virtuelle Realitäten finden in den verschiedensten Bereichen Anwendung und erfreuen sich beim Verbraucher großer Beliebtheit und Nachfrage.


Stellenwert der 3-D- Computerspiele

So spielen die Computerspiele eine zentrale Rolle bei der Entwicklung neuer 3-D- Hardwarekomponenten, Grafik- Engines und optischer Effekte. Aus den Klassikern wie „Pacman“ oder „Super Mario Land“ haben sich in den letzten Jahren interaktive Online- Anwendungen mit realistischen 3-D- Grafiken, hoch entwickelten künstlichen Intelligenzen und komplexen Hintergrundhandlungen entwickelt. Die Zielgruppe von Computerspielen beschränkt sich zudem nicht mehr nur auf männliche Jugendliche. Mit dem Einzug der Spielkonsole in das Wohnzimmer, den innovativen Eingabegeräten wie dem Wii- Controller und neuen Spielinhalten nimmt die Zahl der aktiven Spieler und Spielerinnen stetig zu. Dementsprechend stellt die Spielindustrie mittlerweile einen wichtigen Wirtschaftszweig dar.


Auszug weiterer Anwendungsgebiete

Im Bereich der Filmindustrie setzt man auf 3-D, wenn es um die Gestaltung aufwendiger Spezialeffekte, virtueller Charaktere und beeindruckender Grafiken geht. Die Entwicklung ist mittlerweile so weit fortgeschritten, dass man dazu in der Lage ist, den kompletten Film am Rechner zu produzieren. Die Blockbuster „Final Fantasy“, „Ice- Age“ und „Monster AG“ sind nur einige Beispiele hierfür. Auch für die Industrie ist die 3-D- Computergrafik von Bedeutung, da 3-D- CAD- Modelle eine Schlüsselrolle bei den Entwicklungsarbeiten vieler neuer Produkte spielen.


Zielsetzung

Ziel dieser Diplomarbeit ist es, ein zuverlässiges Verfahren zur Positionserkennung zu entwickeln und auf Basis dieses Lösungsansatzes einen Prototypen für ein System zur Extraktion einer reellen Raumkoordinate zu realisieren. Weiterhin soll ein Anwendungsbeispiel in Form eines 3-D- Programms für Demonstrationszwecke implementiert werden, das mit den detektierten Positionswerten gesteuert wird. Der Schwerpunkt der Diplomarbeit liegt hierbei auf der Ermittlung der Raumkoordinate, da mit der Entwicklung des neuen Verfahrens ein System realisiert und getestet werden muss, für das so gut wie keine Erfahrungswerte vorliegen. Die Bildverarbeitung, die Implementierung der Schnittstelle und die Arbeiten am 3-D- Programm stellen im Gegensatz dazu aufgrund der bereits gesammelten Erfahrungen kalkulierbare Größen dar, die sich bei der Projektplanung im Vorfeld abschätzen lassen.


Ausgangssituation



Bevor mit der Anforderungsanalyse und schließlich mit der Realisierung des Systems begonnen werden kann, gilt es, sich mit den Rahmenbedingungen auseinander zu setzen. Hierzu zählen die persönlichen Fähigkeiten, die technischen Möglichkeiten, sowie der Zeitraum, der für die Entwicklung des Systems zur Verfügung steht.


Fähigkeiten

Das Verfahren, der Prototyp, sowie die 3-D- Anwendung sollen sich mit dem Wissen umsetzen lassen, das im Laufe des Studiums erworben wurde. Hierzu zählen unter anderem die Erfahrungen mit interaktiven Systemen, die grundlegenden Kenntnisse in den Bereichen Mathematik und Optik, sowie die Fähigkeiten im Rahmen der Systementwicklung und Programmierung.


Verfügbarkeit und Kosten technischer Komponenten

Das gesamte System soll mit handelsüblichen und preiswerten Komponenten realisierbar sein. Dies hält zum einen die Kosten bei der Entwicklung im Rahmen und zum anderen ist man nicht abhängig von Spezialanfertigungen bzw. Produkten eines einzelnen Anbieters. Zudem lässt sich das System problemlos übertragen und vervielfältigen, wenn die Komponenten vielerorts und kostengünstig zu erwerben sind.


Zeitlicher Rahmen

Für die Entwicklung des Interaktionssystems stehen insgesamt 5 Monate zur Verfügung.

In diesem Zeitraum sind folgende Arbeiten durchzuführen: 
- Projektplanung und Anforderungsanalyse
- Einarbeitung in die Thematik
- Entwicklung des Verfahrens zur Extraktion der Raumkoordinate
- Realisierung des Prototypen und des 3-D- Anwendungsbeispiels
- Tests & Optimierung des gesamten Systems
- Schriftliche Ausarbeitung der Diplomarbeit


Extraktion von Raumkoordinaten unter Verwendung zweier Kameras



Verfahren zur Tiefenrückgewinnung

Das Verfahren dient dazu, die Position eines markanten Punktes im reellen Raum ausfindig zu machen. Dies kann beispielsweise die Fingerspitze des Anwenders oder der Schwerpunkt eines beliebigen Gegenstandes sein, der sich durch seine Farbe oder Form von der Umgebung abhebt. Zwei Kameras bilden die Grundlage des Systems. Diese sollen sich flexibel im Raum positionieren lassen und dabei die gesuchte Raumkoordinate aus unterschiedlichen Betrachtungsperspektiven im Blickfeld haben. Zur Detektion des gesuchten Punktes sind die Bildinhalte zu untersuchen, wobei zu klären ist, in wie weit die gegebenen Rahmenbedingungen in die Betrachtung mit einbezogen werden müssen. Hierzu zählen unter anderem die räumliche Lage der Kameras, sowie deren Abbildungseigenschaften. Um dem Computersystem die Lage des Punktes im Raum begreiflich zu machen, sind die genauen Zahlenwerte der Koordinaten in Relation zu einem Referenzpunkt im reellen Raum zu ermitteln. Dies macht die Anwendung eindeutiger Bezugssysteme und mathematischer Berechnungsformeln notwendig.


Prototyp zur Extraktion einer Raumkoordinate

Mit Hilfe des Prototypen wird untersucht, ob der Lösungsansatz zur Positionsermittlung korrekt ist und ob er sich in der Praxis umsetzen lässt. Er dient somit zur Optimierung des Verfahrens, mit dem Ziel, die Raumkoordinate möglichst präzise zu extrahieren und schließlich die Robustheit des Systems gegenüber Störungen zu verbessern. Es findet also ein wechselseitiges Wirken zwischen der praktischen Anwendung und dem theoretischen Lösungsansatz statt, mit dem Ziel, ein voll funktionsfähiges System mit einem praktischen Nutzwert zu entwickeln.


Anforderungen

Verfahren zur Positionsbestimmung

Flexibilität bei der Positionierung der verwendeten Webcams
- variabler Betrachtungsabstand & Blickwinkel
- freie Wahl der Kamera- Standpunkte

Zuverlässigkeit bei der Detektion der Raumkoordinate in einem Bereich von bis zu zwei Metern
- Toleranz im Bereich weniger Zentimeter
- Robustheit gegenüber Störungen


Prototyp zur Extraktion einer Raumkoordinate

Entwicklung eines voll funktionsfähigen Prototyps
- Festlegen des Bezugspunktes im reellen Raum
- Bereitstellung aller relevanten Daten für die Positionsberechnung
- Untersuchung der Bildinhalte beider Kameras zur Detektion des gesuchten Objektes
- Berechnung der Raumkoordinaten

Austauschbarkeit der Komponenten durch modularen Aufbau
- Aufteilen der Funktionalität auf mehrere Systemteile
- Verknüpfung durch flexibel anpassbare Schnittstellen


Anforderungen, die sowohl für das Verfahren, als auch für den Prototypen gelten

Realisierbarkeit mit handelsüblichen Komponenten
- Unabhängigkeit bei der Wahl der Kameras
- Möglichkeit zur Verwendung zweier unterschiedlicher Kameras
- Lauffähigkeit auf einem Computer der mittleren Preisklasse


Steuerung einer 3-D- Anwendung



Mit dem Anwendungsbeispiel soll aufgezeigt werden, dass das System zur Extraktion einer Raumkoordinate voll funktionsfähig ist und wie sich die ermittelten Positionswerte im Rahmen eines interaktiven Prozesses praktisch nutzen lassen. Hierzu ist eine Schnittstelle zu entwickeln, mit der die Daten ohne zeitliche Verzögerung vom Systemteil der Positionserfassung an das Anwendungsbeispiel transferiert werden.


Anforderungen

Entwicklung eines voll funktionsfähigen Anwendungsbeispiels
-   Aufnahme der Positionsdaten über eine Schnittstelle
-   Verarbeitung der Positionsdaten
-   Einbinden der Raumkoordinate in das Programmverhalten
-   Sichtbarmachung der Systemreaktionen

Interaktive Steuerung des Programms
-   Zweckmäßige Nutzung der Raumkoordinate
-   Zeitnahe Reaktionen der Anwendung auf die Eingaben des Nutzers

Verständlichkeit in der Anwendung
-   Nachvollziehbares Systemverhalten
-   Intuitivität bei der Benutzung


Grundlagen und Definitionen

Bevor man erste Überlegungen zur Entwicklung des Positionsermittlungsverfahrens anstellt, ist es sinnvoll, sich zunächst mit den Grundlagen auseinanderzusetzen. So sollte man sich nochmals die Zielsetzung vor Augen führen und ermitteln, welche Themen erarbeitet werden müssen.

Hierbei sind folgende Fragen zu klären:
- Wie lässt sich der Standort eines Objektes im Raum eindeutig beschreiben?
- Welche Eigenschaften weist eine digitale Videokamera auf?
- Welche Verfahren zur Positionsbestimmung existieren bereits?

Das folgende Kapitel stellt somit eine Übersicht aller relevanten Themenbereiche dar, die als Ausgangspunkt für die Entwicklung des Verfahren zur Positionsermittlung dienen.


Die dritte Dimension

Definition

Der Mensch nimmt seine Umwelt als dreidimensionalen Raum wahr, welcher sich aus den Dimensionen der Höhe, Breite und Tiefe zusammensetzt. Fügt man den zeitlichen Verlauf als vierte Komponente hinzu, so spricht man von der vierten Dimension.


Die Dimensionen der Ordnungen 1 bis 3



Farbskala

1-D

In der Dimension erster Ordnung wird die Position eines Elements durch eine einzelne Koordinate bzw. Zahlenwert definiert. Eindimensionale Objekte stellen Skalen dar, werden durch einen Skalar repräsentiert oder haben eine linienförmige Struktur. Bei geometrischer Betrachtung entspricht letzteres einer Geraden, auf welcher der Zahlenwert die Position eines Elements angibt. Anwendung findet die erste Dimension beispielsweise bei Farbskalen. Hierbei wird jeder Farbe eine Nummer zugewiesen, welche dann zur Ansteuerung der einzelnen Positionen bzw. Farbwerte innerhalb der Skala dient.


2-D

Die zweite Dimension entspricht einer Ebene von unendlicher Größe, in der sich alle Elemente aus den zwei Koordinaten für Höhe und Breite zusammensetzen. Zu den zweidimensionalen Objekten zählen unter anderem einzelne Punkte, Flächen und Funktionsgraphen wie Geraden oder Parabeln. Um den Verlauf eines solchen Graphen, oder die Position eines Punktes auf der Ebene eindeutig beschreiben zu können, muss ein Bezugssystem festgelegt werden. Hierbei kann man aus verschiedenen Arten wie dem Polar- oder dem kartesischen Koordinatensystem wählen.


3-D

Bei der dritten Dimension handelt es sich um einen Raum mit Angaben über Breite, Höhe und Tiefe. 3D- Objekte bestehen in der Regel aus einem oder mehreren Körpern und sind durch Position und Rotation definiert. Um eindeutige Positionsangaben für ein Objekt machen zu können, wird wie auch in der zweiten Dimension ein Koordinatensystem benötigt. Hierbei kann man zwischen dem Kugel-, einem Zylinder- oder dem kartesische Koordinatensystem dritter Ordnung wählen.


Das Kartesische Koordinatensystem



Kartesisches Koordinatensystem zweiter Ordnung

Kartesisches Koordinatensystem zweiter Ordnung

Das kartesische Koordinatensystem zweiter Ordnung verfügt über eine x- und eine y- Achse, welche orthogonal zueinander sind und eine Ebene aufspannen. Die Achsen zeigen jeweils in eine bestimmte Richtung und schneiden sich in der sog. Basis, welche das Zentrum des Koordinatensystems markiert. Die x- Achse zeigt nach rechts, die y- Achse nach oben.

Die Lage eines Punktes wird über dessen x- und die y- Koordinaten angegeben.

Weiterhin wird durch die Lage der Achsen die Ebene in vier Quadranten unterteilt, welche das Vorzeichen der Koordinate bestimmen.

Quadrant Wert der x- Koordinate Wert der y- Koordinate
I positiv positiv
II negativ positiv
III negativ negativ
IV positiv negativ


Kartesisches Koordinatensystem dritter Ordnung

Kartesisches Koordinatensystem dritter Ordnung

Das kartesische Koordinatensystem dritter Ordnung verfügt neben den x- und y- Achsen über eine zusätzliche Dimension, welche die Tiefenebene aufspannt. Diese wird in der Regel mit der Bezeichnung 'z' versehen.

Wie beim kartesischen Koordinatensystem zweiter Ordnung stehen auch hier die Achsen senkrecht aufeinander und schneiden sich in der Basis. Weiterhin folgen sie einer bestimmte Richtung und unterteilen den Raum in Quadranten.

Die x- Achse wird als Abszisse, die y- Achse als Ordinate und die z- Achse als Applikate bezeichnet.


Verhältnis zwischen 3-D- Bezugssystemen



Sollen im gleichen Raum zwei oder mehr unterschiedliche Koordinatensysteme in einen direkten Bezug zueinander gesetzt werden, so geschieht dies über ihre Positionen und die Ausrichtung der Achsen. Die Basis legt hierbei den Standort des Koordinatensystems fest, die Lage der Achsen bestimmt die Orientierung im Raum.

In einem solchen Fall, können die Koordinatensysteme als eigenständige Objekte im Raum betrachtet werden. Somit lassen sich der Standpunkt und die Rotationslage mit Hilfe eines weiteren Bezugssystems eindeutig ermitteln. Dieses kann neu angelegt oder aber unter den bereits bestehenden Koordinatensystemen ausgewählt werden.

Setzt man mehrere Bezugssysteme in Relation zueinander, so ist zwischen dem Laborsystem und den körperfesten Systemen zu unterscheiden.


Beispielskizze: Verhältnis des Laborsystem B zum körperfesten System K einer Kamera

Das Labor- und das körperfeste System

Dient ein Koordinatensystem dazu, die Lage aller anderen Bezugssysteme zu beschreiben, so spricht man von einem Laborsystem. Es legt die Ausrichtung und den Bezugspunkt der Umgebung fest. Dadurch lassen sich alle Elemente in einem eindeutig definierten Raum zusammenfassen und in ein Verhältnis zueinander setzen. Ein körperfestes System ist hingegen an ein Objekt gebunden und gibt Aufschluss über dessen Lage und Orientierung im Bezug zum Laborsystem.


Wechsel des Bezugssystems

Soll zur Beschreibung der räumlichen Lage eines Objektes ein anderer Bezugspunkt gewählt werden, so ist ein Wechsel zwischen dem Laborsystem und einem der körperfesten Systeme durchzuführen.

Dieser Wechsel erfolgt durch die sog. Koordinatentransformation, welche sich aus einer Translation (Positionsverschiebung) und einer Rotation (Drehung) zusammensetzt.


Beschreibung von Objekten im Raum

In einem kartesischen Koordinatensystem dritter Ordnung lässt sich der Standort und die Orientierung eines Objekt anhand der Position und Rotation eindeutig beschreiben.


Position



Positionsvektor

Die Position eines Objektes gibt Auskunft darüber, auf welchen Koordinaten sich dieses in Relation zur Basis eines Bezugssystems befindet. Im kartesischen Koordinatensystem dritter Ordnung dient hierzu ein Vektor mit drei Elementen. Die Parameter des Vektors geben die einzelnen Abstände zu den Achsen des Koordinatensystems an.

Ein Punkt mit den Koordinaten P ( x, y, z ) lässt sich durch den Vektor

Positionsvektor

darstellen.


Beispiel:

Für einen Punkt P mit den Koordinaten P ( 2, 5, 8 ) betragen die Abstände entlang der x- Achse 2, in Richtung der y- Achse 5 und in Richtung der z- Achse 8 Längeneinheiten.

Positionsvektor des Punktes P


Referenzpunkt des Objektes

Da ein Objekt in der Regel nicht nur aus einem Punkt bzw. einer einzigen Koordinate besteht, bezieht sich die Position der Vektorspitze stets auf einen bestimmten Referenzpunkt. Dieser lässt sich frei wählen, doch hat es sich in der Praxis bewährt, mit dem Schwerpunkt oder der Kante bzw. Ecke des Objektkörpers ein markantes Merkmal als Referenzpunkt zu nutzen.


Rotation



Die Rotationslage gibt die Orientierung eines Objektes in Bezug zur Lage der Achsen des Laborsystems an. Um eine Drehung im 3-D- Raum zu beschreiben, werden in der Regel eine sog. Quaternion, Eulersche Winkel oder eine Drehmatrix verwendet.


Quaternion

Die Quaternion besteht aus vier Werten und stellt – ähnlich den komplexen Zahlen – eine Erweiterung des reellen Zahlenraums dar. Sie wird in vielen Bereichen angewendet und dient unter anderem zur Beschreibung der Rotationslage von Objekten.

Eine Drehung im dreidimensionalen Raum erfolgt über die sog. Einheitsquaternion.


Eulersche Winkel

Bei den Eulerwinkeln handelt es sich um eine Kombination aus drei Winkeln, die jeweils eine Drehung um eine bestimmte Achse definieren und somit die Orientierung von Objekten im Raum bestimmen.

Die Rotation folgt hierbei einer bestimmten Reihenfolge. Diese ist einzuhalten, da sich alle drei Winkel auf die Achsen des Koordinatensystems beziehen, deren Lage durch jeden Drehvorgang geändert wird. Aus diesem Grund existieren für Eulersche Winkel verschiedene Definitionen, auch Konventionen genannt, welche die Reihenfolge der Drehachsen vorgeben.


Konventionen

Insgesamt gibt es 12 Drehmöglichkeiten, die sich auf zwei Gruppen unterschiedlicher Drehverfahren verteilen lassen.

Stellvertretend für die erste Gruppe wird nachfolgend die ZYZ- Konvention beschrieben.

ZYZ Konvention


ZYZ- Konvention

Drehung um Z

Drehung um Y

Drehung um Z


Die zweite Gruppe der Eulerschen Winkel beinhaltet die unterschiedlichen Drehreihenfolgen für das sog. 'Roll Pitch Yaw'- bzw. RPY- Verfahren.


RPY- Konvention

Die RPY- Konvention wird in erster Linie von der Raum- und Luftfahrt verwendet. Sie dient dazu, eine Transformation vom erdfesten System (Laborsystem) in das flugfeste System (körperfestes System) durchzuführen.

Überträgt man das RPY- Modell auf das körperfeste Koordinatensystem einer Kamera, so entspricht die Flugrichtung eines Satelliten oder eines Flugzeuges der Ausrichtung der optischer Achse.

Roll Der Rollwinkel beschreibt die Rotation um die optische Achse bzw. z- Achse der Kamera
Pitch Der Pitch- oder auch Nickwinkel gibt die vertikale Rotation um die x- Achse an
Yaw Der Yaw- bzw. Gierwinkel legt den Winkel für die horizontale Drehung um die y- Achse fest


Im Gegensatz zur ersten Gruppe der Eulerschen Winkel wird bei der RPY- Konvention um jede der drei Achsen gedreht.


RPY Konvention


Gimbal Lock

Der Gimbal Lock beschreibt ein Problem, das bei der Rotation mit Eulerwinkeln auftreten kann. Da bei der drei Drehungen um einen der Winkel die Achsen verändert werden, kann es vorkommen, dass deren Lage bei erster, zweiter und dritter Rotation zusammenfallen. Dies wirkt sich dadurch aus, dass ein Freiheitsgrad verloren geht, da in diesem kritischen Fall zwei mal um die gleiche Achslage bzw. in die gleiche Richtung gedreht wird.

Dieser Sonderfall tritt in der ersten Gruppe der Eulerwinkel auf, wenn der Winkel der zweiten Drehung 0°, 180° oder 360° bzw. ein Vielfaches von 180° beträgt. Dadurch fallen die erste und die dritte Drehachse aufeinander.

Bei der RPY- Konvention besteht das Problem des Gimbal Lock hingegen bei der zweiten und dritten Drehung.


Rotationsmatrix / Drehmatrix

Die Dreh- oder Rotationsmatrix stellt eine Möglichkeit dar, die Orientierung des Laborsystems oder eines körperfesten Systems im Raum oder auf einer Ebene mathematisch zu beschreiben.

Sowohl die Eulerwinkel, als auch eine Quaternion lassen sich in einer Matrixschreibweise darstellen.


Aufbau einer Drehmatrix

Die Rotationsmatrix für den dreidimensionalen Raum besteht aus neun Elementen. Die Parameter dieser Elemente werden durch die Wahl des Rotationsverfahrens und die verwendeten Winkel bestimmt.

Wird mit einem Winkel Alpha um die Achsen des Koordinatensystems gedreht, so lassen sich die einzelnen Rotationen jeweils einer Matrix zuordnen.

Drehung um die Achsen des Koordinatensystems


Die Matrizen dieser Drehungen können in einer Rotations- bzw. Drehmatrix zusammengefasst werden, welche die Orientierung eines Objektes in Bezug zu allen drei Achsen definiert.

Drehmatrix zu Eulerschen Winkeln

Drehmatrix einer Einheitsquaternion


Transformationen

Sowohl in der 2-D- Ebene, als auch im dreidimensionalen Raum können verschiedene Transformationen durchgeführt werden. Diese lassen sich auf das Laborsystem oder auf körperfeste Systeme und somit auf einzelne Objekte anwenden.

Die Koordinatentransformation setzt sich wie zuvor beschrieben aus den einfachen Transformationsarten Translation und Rotation zusammen und dient dem Wechsel des Bezugssystems.


Affine Transformation



Die affine oder auch einfache Transformation beschreibt eine Abbildung zwischen zwei Vektorräumen. Zu ihr zählen die Translation, Rotation, Skalierung und Scherung.


Übersicht

Translation Verschiebung um einen Vektor in x-, y- und/oder z- Richtung
Rotation Drehung um den Ursprung des Koordinatensystems
Skalierung Veränderung der Einheitsgrößen auf den Koordinatenachsen
Scherung Veränderung des Winkels zwischen zwei Achsen


Transformations- Bezugspunkt

Für jede einfache Transformation muss ein Referenzpunkt festgelegt werden, auf den sich die Änderungen beziehen. Bei der Rotation wird um diesen Punkt gedreht, bei der Translation entspricht die Distanz, um die in x-, y- und z- Richtung verschoben wird, dem Abstand zu diesem Bezugspunkt.

Als Referenzpunkt wird in der Regel der Ursprung des Laborsystems verwendet.


Formel der Koordinatentransformation



Die Koordinatentransformation zwischen den Bezugssystemen a0 und a1 lässt sich durch folgende Formel mathematisch beschreiben:


Formel der Koordinatentransformation


Ein Punkt x0 aus dem Koordinatensystem a0 wird also über die Multiplikation mit der Rotationsmatrix R0 und die Addition mit dem Translationsvektor t0 auf den Punkt x1 im Koordinatensystem a1 übertragen.


Digitale Videokameras

Digitalkameras arbeiten nach dem gleichen Prinzip, wie analoge Aufnahmegeräte. An die Stelle des Films als Bildträger tritt bei ihnen jedoch ein elektronisches Bauteil, der CCD-Sensor (Charge-coupled Device). Ein großer Vorteil, der mit diesem Sensor einhergeht, ist die hohe Geschwindigkeit, in der Verarbeitung und Ablage von Bildinformationen erfolgen. Der CCD- Chip wandelt Lichtstrahlen in elektrische Signale um, die von der Kameraelektronik zu digitalen Bilddaten weiterverarbeitet werden. Das Foto bzw. Video ist bereits kurz nach der Aufnahme als Positiv verfügbar und muss nicht erst entwickelt werden.

Bei einer Webcam erfolgt die Bereitstellung der Bilddaten ohne merkliche Verzögerung, was sie zum idealen Instrument für die Echtzeitbildverarbeitung macht.


Grundlegender Aufbau



Der grundlegende Aufbau einer digitalen Kamera setzt sich aus folgenden Komponenten zusammen:

Objektiv Das Objektiv besteht aus einer einzelnen Linse bzw. einer Kombination davon. Es sammelt die einfallenden Lichtstrahlen und bricht sie dahingehend, dass die reelle optische Abbildung eines Objektes bzw. Gegenstandes im Sichtfeld der Kamera auf deren Bildträger erzeugt wird.
Bildsensor Als Bildträger verfügt jede Digitalkamera über einen CCD- Sensor. Dieser besteht aus einer Vielzahl lichtempfindlicher Felder und wandelt die über das Objektiv einfallenden Lichtstrahlen entsprechend ihrer Menge in elektrische Signale unterschiedlicher Stärke um. Größe, Qualität und Aufbau des CCD- Sensors variieren je nach Verwendungszweck und Preisklasse der Kamera.
Shutter Über den elektronisch arbeitenden Shutter wird die Belichtungszeit der Kamera gesteuert. Bei den meisten Digitalkameras – insbesondere Webcams – ersetzt er den mechanischen Verschluss.
Speichermedium / Datenkabel Die im CCD- Sensor gesammelten Bildinformationen werden von der Kameraelektronik in verwertbare Bilddaten umgewandelt und auf einem Speichermedium wie einer Festplatte oder einer Flashkarte gesichert. In der Regel erfolgt dieser Speichervorgang bei Webcams nicht. Stattdessen werden die Daten über die Firewire oder USB 2.0 Schnittstelle direkt an den Computer weitergeleitet.
Kameragehäuse Das Kameragehäuse umgibt den Bildsensor und schützt diesen vor ungewolltem Lichteinfall.


Da die genauen Spezifikationen zweier unterschiedlicher Kameras für das Verfahren zur Positionsbestimmung benötigt werden, soll an dieser Stelle in Kurzform auf die Eigenschaften einer Kamera und deren Bedeutung eingegangen werden.

Bei diesen Merkmalen unterscheidet man zwischen den inneren bzw. intrinsischen Parametern wie der Brennweite oder der relativer Auflösung und den äußeren oder auch extrinsischen Parametern, welche die Lage der Kamera im dreidimensionalen Laborsystem angeben.


Innere Parameter

Definition



Die inneren Parameter hängen vom geometrischen Aufbau und den verwendeten Komponenten der Kamera ab und bestimmen deren Abbildungsverhalten. Somit sind sie von Modell zu Modell unterschiedlich und definieren, wie die Projektion eines realen Objektes auf dem Bildträger aussieht.

Sie setzen sich zusammen aus der Brennweite, der relativen Auflösung und den Pixelkoordinaten der Bildmitte bzw. des Zentrums der optischen Achse. Weiterhin beinhalten die inneren Kameraparameter oftmals auch Informationen über den Scherungswinkel zwischen den Bildachsen, sowie über radiale Verzeichnungen, welche durch die Krümmung der Linse / Linsen verursacht werden.

Die intrinsischen Parameter müssen entweder beim Hersteller erfragt oder aber mittels eines Kalibrierungsverfahrens selbst bestimmt werden. Die Kalibrierung führt in den meisten Fällen zu zuverlässigeren Ergebnissen, da verschiedene Modelle des gleichen Kameratyps aufgrund von Toleranzen in der Produktion nicht zwangsläufig die selben Merkmale aufweisen müssen.

Die meisten Verfahren zur Kamerakalibrierung setzen voraus, dass der Scherungswinkel zwischen den Bildachsen 90° beträgt und die optische Achse senkrecht auf der Bildebene bzw. auf dem Bildträger steht. Dieser Umstand stellt in der Regel kein Problem dar, da handelsübliche Webcams – mit Ausnahme von Spezialanfertigungen – über einen rechteckigen Bildsensor verfügen, der zudem senkrecht zur Bildachse angeordnet ist.


Brennweite



Bezeichnungen an einer Sammellinse

Definition

Die Brennweite beschreibt in der Optik den Abstand zwischen dem Brennpunkt und der Linse bzw. dem Linsenverbund. Der Brenn- oder auch Fokuspunkt markiert die Stelle, an der sich die parallel einfallenden Projektionsstrahlen schneiden, nachdem sie vom Objektiv gebrochen wurden. Zusammen mit dem Aufnahmeformat bestimmt die Brennweite den Bildwinkel und somit den sichtbaren Ausschnitt einer Aufnahme.


Zoom

Über den Zoom wird die Brennweite der Kamera verändert. Hierbei unterscheidet man zwischen dem optischen und dem digitalen Zoom.

Der optische Zoom arbeitet mechanisch über die Veränderung der Abstände zwischen den Linsen im Objektiv. Dadurch wird der Verlauf der Projektionsstrahlen beeinflusst, was sich auf das Sichtfeld der Kamera auswirkt. Er nimmt keinen Einfluss auf die Qualität der Aufnahme. Beim Digitalzoom wird hingegen ein Teil des Bildes durch die Skalierung der Pixel vergrößert. Dies führt zu einem Qualitätsverlust, der mit steigendem Zoomfaktor anwächst.

Da der Zoom direkten Einfluss auf die Brennweite, den Bildwinkel und somit auch auf andere Parameter ausübt, muss darauf geachtet werden, diesen nach der Kamerakalibrierung nicht mehr zu verändern.


Berechnung der Brennweite

Die Brennweite lässt sich über die Linsengleichung oder die Linsenschleiferformel rechnerisch ermitteln.


Relative Auflösung



Definition

Die relative Auflösung gibt das Verhältnis der Bildpunkte zu einer physikalischen Längeneinheit wie Meter (meist [cm] oder [mm]) oder Zoll an. In der Praxis hat sich das Maß „dpi“ (dots per inch) durchgesetzt.

Hierbei gilt zu beachten, dass die Bildpunkte auf einem CCD- Chip nicht immer quadratisch sind, Aus diesem Grund werden oftmals getrennte Angaben für die horizontale und vertikale relative Auflösung gemacht.

Angaben über die relative Auflösung erfolgen oftmals im Zusammenhang mit Bildformat, absoluter Auflösung und Bildgröße, da diese zueinander in Wechselwirkung stehen.


Aufnahmeformat, Auflösung und Bildgröße


Bildformat

Das Bild- bzw. Aufnahmeformat gibt das Seitenverhältnis von Bildbreite zu Bildhöhe an.

Gängige Bildformate sind:

4 : 3 PAL- Fernsehen, Webcam
5 : 4 Computerbildschirm mit der Auflösung 1280 x 1024
16 : 9 HDTV (sowohl 720p, als auch 1080i)


Absolute Auflösung

Die absolute Auflösung gibt Auskunft über die Anzahl der Bildpunkte und somit über den Detailgrad eines Bildes. Sie wird entweder in Megapixeln oder über die Anzahl der Bildpunkte pro Zeile bzw. Spalte angegeben.

Bei Digitalkameras wird die Auflösung in Megapixeln angegeben, was der Gesamtzahl der Bildpunkte auf dem Foto entspricht. Hierbei muss zwischen der echten und der interpolierten Auflösung unterschieden werden. Die Echte entspricht der Anzahl der lichtempfindlichen Zellen, die sich auf dem CCD- Chip befinden. Sie ist somit ein Maß für das Auflösungsvermögen des Bildsensors. Die interpolierte Auflösung ist ein Wert, den die Kamera aus der ursprünglichen Anzahl der Bildpunkte herausrechnen kann. Meist bringt ein solcher Schritt keine Verbesserung der Qualität, da das Bild lediglich rechnerisch größer skaliert wird und verschiedene Verfahren zur Kantenglättung durchläuft. Weiterhin benötigt ein interpoliertes Bild bei unmerklich besserer Qualität wesentlich mehr Speicherplatz.

Die zweite Variante gibt neben der Auflösung auch die Bildgröße in Pixeln an. Weiterhin lässt sich mit ihr das Bildformat bestimmen, wenn man Informationen über die relative Auflösung und somit über die Anzahl der Bildpunkte pro Zoll / cm hat. Bei quadratischen Pixeln entspricht das Bildformat dem Verhältnis von Bildbreite zu Bildhöhe.

Die echte Auflösung ist an die Merkmale des Bildsensors gebunden und kann somit nicht geändert werden. Grundsätzlich gilt es, zu beachten, dass unterschiedlich große CCD- Chips mit identischer Auflösung nicht die gleichen Ergebnisse bei der Bildqualität erzielen. In der Regel liefert der größere Chip die besseren Werte, da mehr Fläche für die Aufnahme der Lichtstrahlen zur Verfügung steht.


Bildgröße

Bei der Bildgröße unterscheidet man zwischen Pixeln und physikalischer Längeneinheit.

Die Bildgröße in Pixeln entspricht wie bereits beschrieben den Bildpunkten pro Zeile. Wird sie hingegen in einem Längenmaß wie [mm] / [cm] oder Zoll angegeben, so bestimmt die relative Auflösung die Größe des Bildes maßgeblich.


Beispiel für den Zusammenhang zwischen Bildformat, Auflösung und Bildgröße

Bildformat 4 : 3
absolute Auflösung in Pixel 640 x 480
relative Auflösung in dpi (quadratische Pixel) 300
Bildgröße in cm 5,42 x 4,06
Bildgröße in Zoll 2,133 x 1,6
Bildgröße in Pixeln 640 x 480


Lage der optischen Achse



Definition

Die optische Achse oder auch Bildachse verläuft als gerade Linie senkrecht durch die Linse / Linsen des Objektives und beschreibt die Lage des optischen Zentrums der Projektion. Bei einem Linsenverbund setzt sie sich aus der Summe der Achsen der einzelnen optischen Elemente zusammen. Bei einer exakt symmetrischen Linse stellt sie gleichermaßen deren Symmetrieachse dar.

Entlang der optischen Achse befinden sich die Linse, durch deren Zentrum sie verläuft, der Brennpunkt, in dem sich alle parallel einfallenden Projektionsstrahlen schneiden und die Bildebene, die bei einer Webcam parallel zur Linse bzw. senkrecht zur Bildachse liegt.


Optisches Zentrum & Bildmitte

Bei einer Webcam verläuft die optische Achse stets durch die Mitte des projizierten Bildes.

Von dem optischen Zentrum der Projektion lässt sich jedoch nicht immer auf die Bildmitte des Ausgabebildes in Pixeln schließen. Dies liegt daran, dass die Lage der optischen Achse zwar die Bildebene in deren Zentrum schneidet, das Ausgabebild jedoch nicht der Fläche und Lage dieser Bildebene entsprechen muss. Diese Diskrepanz ist auf zwei Dinge zurückzuführen. Zum einen durchläuft die optische Achse den CCD- Chip meist nicht in dessen Zentrum, zum anderen wird oftmals nur ein Teil aus der Gesamtfläche des Sensors für das Ausgangsbild verwendet.

Somit muss hierbei zwischen der Mitte des Ausgabebildes in Pixeln und dem optischen Zentrum bzw. der Lage der optischen Achse unterschieden werden.


Linsendistortion



Definition

Die Linsendistortion stellt einen von der Linse verursachten Abbildungsfehler in Form einer radialen Verzeichnung des projizierten Bildes dar, die ihr Zentrum in der optischen Achse hat. Die Distortion tritt bei den meisten optischen Systemen auf und macht sich durch eine lokale Veränderung des Abbildungsmaßstabes bemerkbar. Bei den Verzerrungen unterscheidet man bei Kamerasystemen zwischen zwei unterschiedlichen Typen. Die kissenförmige Verzeichnung beschreibt eine Stauchung der Bildpunkte zum Zentrum hin. Eine tonnenförmige Störung stellt hingegen eine Streckung dar.


Das Bild einer Webcam weist in der Regel eine tonnenförmige Verzeichnung auf.


Linsendistortion


Maßnahmen zur Minimierung der Linsendistortion

Die radialen Verzeichnungen lassen sich durch die Verwendung geeigneter optischer Mittel reduzieren. Durch die Wahl von bestimmten Materialien und durch die Kombination mehrerer Linsen unterschiedlicher Dicke und Typs, lassen sich die Projektionsstrahlen dahingehend umlenken, dass eine nahezu ideale Abbildung auf der Bildebene entsteht.

Ist die Stärke und der Ausgangspunkt der Linsendistortion bekannt, so lässt sich ein Bild nachträglich rechnerisch korrigieren. Bei diesem Verfahren wird über eine Distortionsformel die Position jedes einzelnen Bildpunktes neu berechnet, sodass man als Ergebnis eine verzeichnungsfreie Abbildung erhält. Hierbei gilt jedoch zu beachten, dass in der Regel die Bildqualität unter der nachträglichen Korrektur stark leidet.


Weitere Merkmale



Neben den intrinsischen Parametern existieren weitere Kenngrößen, die das Aussehen des Bildes maßgeblich beeinflussen. Diese Merkmale sind den Eigenschaften der Kamera oder aber denen des Ausgabebildes zuzuordnen und lassen sich zum Teil über die Software der Kamera einstellen. Manche Größen sind jedoch nicht konfigurierbar, da sie entweder vom Hersteller vorgegeben werden oder an die Hardware der Kamera gebunden sind.


Bildwiederholfrequenz / Framerate

Die Framerate ist ein Maß für die Anzahl der Bilder, die von der Kamera pro Sekunde geschossen werden.

Der Maximalwert ist abhängig von der Kamera und liegt bei den meisten Webcams bei 30 Bildern pro Sekunde. Über die Software kann zwischen verschiedenen Werten gewählt werden. Bildwiederholfrequenzen von 15, 25 oder 30 fps (frames per second) werden von den meisten Kameras unterstützt.

Ab einer Framerate von ca. 25 fps nimmt der Mensch eine Abfolge von Bildern als flüssige Bewegung bzw. Video wahr. Für die Positionserkennung sollte eine möglichst hohe Abtastrate verwendet werden, um auf Bewegungen in Echtzeit reagieren zu können.


Bildschärfe

Die Schärfe eines Bildes hängt von dem Abstand des fokussierten Objektes zur Kamera ab und wird durch viele Faktoren, wie die Blendengröße oder Belichtungszeit beeinflusst. Bei einer Webcam erfolgt die Schärfenregulierung automatisch oder manuell über die Veränderung des Abstandes zwischen Linse und Bildträger durch den Anwender.


Bildausrichtung

Die Ausrichtung bestimmt, ob das Ausgabebild horizontal bzw. vertikal gespiegelt dargestellt wird. Eine vertikale Spiegelung der Aufnahme ist oftmals sinnvoll, da bei der Zentralprojektion das Bild auf dem Kopf steht.


Farb-, Kontrast- und Helligkeitswerte

Diese Werte bestimmen den Kontrastumfang, die Helligkeit und die Lichtstimmung des Videobildes. Oftmals verfügen Webcams über einen automatischen Modus, der selbstständig Anpassungen entsprechend der jeweiligen Umgebungsbedingungen vornimmt.

Die Werte für Helligkeit und Kontrast lassen sich bei vielen Kameramodellen bereits bei der Aufnahme über die Belichtungszeit oder die Blendengröße einstellen. Bei Webcams erfolgt dies in der Regel über die Software und somit erst, nachdem das Bild aufgezeichnet wurde.

Ähnliches gilt für die Einstellung des Farbtons. Dieser wird meist über den sog. Weißabgleich dem Umgebungslicht angepasst. Der Weißabgleich dient als Referenzmuster, mit dem sich die Lichtstimmung in der Kameraumgebung bestimmen lässt.


Übersicht:

Farbtiefe Anzahl der Farben, die dargestellt bzw. aufgenommen werden.

8 bit - 256 Farben<br\> 16 bit - 65.536 Farben ( High Color )<br\> 24 bit - 16.777.216 Farben ( True Color )<br\>

Farbton Verhältnis zwischen Rot-, Grün- und Blauwert bei RGB Bildern
Gamma Gesamthelligkeit
Kontrast Kontrastumfang
Sonstige ...


Sonstige

Eine Kamera verfügt neben den oben aufgeführten Werten über eine Vielzahl weiterer Kenngrößen. Da sich diese nur indirekt auf das Positionserkennungssystem auswirken, soll an dieser Stelle nicht weiter darauf eingegangen werden.


Auszug:

Progressive Scan / Interlaced Voll- bzw. Halbbilder
Bildblende Regelt den Lichteinfall durch das Objektiv
Verschlusszeit Regelt die Belichtungszeit
Sonstige ...


Äußere Parameter

Definition



Die äußeren Parameter geben Auskunft über Position und Rotation des körperfesten Systems der Kamera bezogen auf das Laborsystem und somit auf einen Fixpunkt im dreidimensionalen Raum, welcher meist im Sichtfeld der Kamera platziert wird.

Nach Möglichkeit sollte man zur Bestimmung des Standortes der Kamera ein Kalibrierungsprogramm verwenden, welches Position und Rotation auf Basis der inneren Parameter über Bildverarbeitungsalgorithmen und Positionsmarker automatisch ermittelt. Die äußeren Parameter lassen sich zwar auch per Hand messen, doch birgt dies neben dem hohen Arbeitsaufwand eine Vielzahl an Fehlerquellen durch Messungenauigkeiten.


Extrinsische Parameter & Koordinatentransformation



Die Kenngrößen der äußeren Kameraparameter definieren Position und Rotationslage des körperfesten Systems der Kamera und sind somit identisch mit denen der Koordinatentransformation, Wird die Lage einer Kamera im Raum verändert, so müssen durch eine Koordinatentransformation oder die erneute Kamerakalibrierung die äußeren Parameter angepasst werden. Soll ein Objektpunkt aus dem Blickfeld der Kamera von ihrem körperfesten System in das Laborsystem übertragen werden, so ist ebenfalls eine Koordinatentransformation für diesen Punkt durchzuführen.


Transformationsmatrix



Wird der Kamerastandpunkt für die Berechnungen einer Punktkoordinate im Raum benötigt, so lassen sich durch die Verwendung des kartesischen Koordinatensystems dritter Ordnung in Kombination mit Matrizen Position und Orientierung dieser Kameras mathematisch so beschreiben, dass ein Computerprogramm die dabei anfallenden Informationen autonom weiterverarbeiten kann.

Die Koordinaten des körperfesten Systems der Kamera werden durch einen Positionsvektor mit drei Elementen festgesetzt.

Zur Beschreibung der Orientierung bzw. Blickrichtung der Kamera kann zwischen den verschiedenen Rotationsverfahren gewählt werden. Die eleganteste Lösung bietet hierbei die Drehmatrix, da sie unverändert in die Formel zur Berechnung des Kamerastandpunktes mit einbezogen werden kann.


Zentralprojektion

Definition



Bei der Zentralprojektion wird ein reales Objekt aus dem dreidimensionalen Raum auf die zweidimensionale Bildebene projiziert. Sie entspricht der Abbildungsform einer idealen Kamera, der Camera Obscura. Die Lichtstrahlen durchlaufen hierbei ein winziges Loch, das sog. Projektionszentrum und werden nicht durch eine Linse gebrochen, wie dies beim menschlichen Auge oder einer Linsenkamera der Fall ist.

Der Abstand zwischen der Bildebene und dem Projektionszentrum bestimmt hierbei den Abbildungsmaßstab und ob das Bild auf der Projektionsfläche gespiegelt erscheint.


Abbildungsmaßstab



Der Abstand zwischen der Bildebene und dem Projektionszentrum legt die Größe der Abbildung fest. Je näher beide zusammen liegen, desto kleiner wird ein Objekt aus dem reellen Raum dargestellt. Entfernt man die Projektionsebene hingegen vom Zentrum der Projektion, so vergrößert sich der Abbildungsmaßstab entsprechend.

Da die Perspektive bei einer Veränderung des Abbildungsmaßstabes nicht verändert wird, ist das Verhältnis zwischen Breite bzw. Höhe der gesamten Abbildung und der horizontalen bzw. vertikalen Position eines auf die Bildebene projizierten Punktes stets konstant, unabhängig davon, wie groß die Distanz zwischen dem Projektionszentrum und der Bildebene ist.


Abbildung der Punkte einer Projektionslinie

Beispiel

Ein Punkt P aus dem reellen Raum wird auf den Bildpunkt P_B mit den Koordinaten P_B ( 160px, 240px ) abgebildet. Die Größe der gesamten Abbildung beträgt 640x480 Pixel. Verringert man die Distanz zwischen dem Projektionszentrum und der Bildebene so weit, dass sich der Abbildungsmaßstab halbiert, so beträgt die dazu gehörige Größe der Abbildung nur noch 320x240 Pixel. Die Projektion des Bildpunktes P erscheint nun auf den Koordinaten P_B ( 80px, 120px ).

Eine Gegenüberstellung der Abbildungen zeigt auf, dass das Verhältnis zwischen der Bildgröße und der Position des Bildpunktesin beiden Fällen identisch ist.


Verhältnis von Bildbreite zur

x- Koordinate des Bildpunktes

Verhältnis von Bildhöhe zur

y- Koordinate des Bildpunktes

640 / 160 = 320 / 80 = 4 480 / 240 = 240 / 120 = 2


Allgemein gilt, dass alle Punkte einer Projektionslinie auf ein und die selbe Bildposition abgebildet werden. Betrachtet man also beispielsweise ein Objekt minimaler Größe, so befindet sich dessen Projektion auch dann an der gleichen Stelle auf der Bildebene, wenn man die Distanz verändert, indem man das Objekt entlang der entsprechenden Projektionslinie in endlicher Entfernung verschiebt.


Bedeutung für das menschliche Auge und die Kamera



Die Gesetzmäßigkeiten der Zentralprojektion gelten gleichermaßen für das menschliche Auge bzw. eine Kamera mit einem Objektiv. Diese optischen Apparate verfügen im Gegensatz zur Lochkamera jedoch über eine Linse, die den Verlauf der Projektionsstrahlen ablenkt bzw. diese bricht. Daher muss bei Angaben über den Abbildungsmaßstab der Grad dieser Ablenkung in Form der Brennweite mit einbezogen werden.


Verlust der Tiefeninformation



Eine Projektion stellt den Transfer einer Koordinate vom reellen dreidimensionalen Raum in eine zweidimensionale Ebene dar. Dies führt stets zu einem unwiederbringlichen Verlust der Tiefeninformation.

Geht man davon aus, dass die Koordinaten eines Punktes in Relation zum körperfesten System der Kamera angegeben werden, so lässt sich eine Abbildung wie folgt darstellen:


Abbildung


Abbildung von Objekten

Auf Objekte wirkt sich die Zentralprojektion in Form einer Stauchung bzw. Streckung der Körperkanten aus. So lässt sich ohne zusätzlich Informationen allein aus der Abbildung nicht auf die tatsächliche Form des Objektes schließen, da es verzerrt auf der Projektionsebene abgebildet und unter Umständen durch einen anderen Gegenstand verdeckt wird.

Grundsätzlich gilt, dass Geraden im Raum auf zweidimensionale Bildgeraden projiziert werden. Der Grad der Verzerrung wird durch den Abstand der Objekteckpunkte zum Projektionszentrum bestimmt. Ist diese Entfernung bei allen Eckpunkte gleich, so wird das Objekt ohne gestauchte bzw. gestreckte Kanten abgebildet. Entsprechend dazu, erscheint ein Objekt um so verzerrter, je größer die Distanz zwischen den Eckpunkten entlang der Projektionsstrahlen ist.


Angewandte Verfahren zur Tiefenrückgewinnung

PMD- Kamera



PMD- Kamera der Firma PMD Technologies GmbH

Funktionsweise

Die PMD- Kamera ist neben einer Digitalkamera mit einem sog. PMD- Sensor (Photonic Mixer Device) und einem Sendermodul ausgestattet. Über den Emitter werden Lichtsignale – meist in Form von unsichtbarem Infrarotlicht – impulsartig ausgesandt. Diese treffen auf Objekte in der Umgebung, werden reflektiert und gelangen schließlich wieder zurück zur Signalquelle, wo der PMD- Sensor die zurückgeworfenen Photonen (≈ Lichtteilchen bzw. Lichtwellen) auffängt und in Elektronen umwandelt. Beide Halbleiterelemente sind an eine eine Modulationsquelle gekoppelt, über deren Trägersignal die empfangenen Lichtwellen den ausgesandten Signalen eindeutig zugeordnet werden können. Das Verfahren ist im Detail sehr komplex, doch lässt sich grundsätzlich sagen, dass die Distanz über die Phasenverschiebung zwischen den emittierten und den empfangenen Lichtwellen bestimmt wird.


Prinzipielle Funktionsweise des PMD- Sensors


Über einen Vergleich des ausgesandten Signals mit dem elektronischen Referenzsignal, welches vom PMD- Sensor ausgegeben wird, lässt sich die Entfernung bestimmen, die der Lichtimpuls zurück gelegt hat. In Kombination mit einer Digitalkamera kann man jedem Bildpunkt / Pixel des Videobildes die Distanz zuordnen, die zwischen der Kamera und dem Objekt liegt, das auf diesem Bildpunkt zu sehen ist.


Vor- und Nachteile

Der größte Vorteil dieser Kombination aus PMD- Sensor und Digitalkamera liegt in der Robustheit der Tiefenerkennung. So lässt sich die modulierte Lichtwelle über das Trägersignal von Fremd- oder auch Umgebungslicht trennen, was den Einsatz bei nahezu jeder Lichtsituation möglich macht.

Da das System die Entfernung über die Phasenverschiebung zwischen der emittierten Lichtwelle und dem empfangenen Referenzsignal bestimmt, ist der Einsatz jedoch mit einem großen Problem verbunden. So kann die genaue Distanz nicht eindeutig festgestellt werden, in der sich das Objekt zum Sensor befindet, da es hierbei zu Mehrdeutigkeiten kommen kann. So kann es Aufgrund der Periodizität des Signals passieren, dass ein Vielfaches der Phasenverschiebung und somit auch ein Vielfaches der Distanz gemessen wird, da das System nicht unterscheiden kann, auf welchem Wellenberg sich das Objekt befindet.


Probleme bei der Distanzmessung aufgrund des periodischen Trägersignals


Verwendungsmöglichkeiten für das Positionserkennungssystem

Eine PMD- Kamera weist zwar eine Vielzahl an Vorteilen auf, wodurch sie sich prinzipiell sehr gut für das Positionsermittlungssystem eignen würde. Dennoch sprechen einige entscheidende Punkte gegen ihre Verwendung. So ist die Auswahl an verfügbarer Hardware sehr begrenzt, da es nur wenige Anbieter für diese Technologie gibt. Weiterhin existieren derzeit bis auf einige wenige Ausnahmen – wie beispielsweise des Komplettsets der Firma PMD Technologies GmbH – nur individuelle Speziallösungen, die auf den Kunden abgestimmt und somit sehr teuer sind.


Korrespondenzanalyse (Disparität)



Die Korrespondenzanalyse ist ein Verfahren aus der Stereoskopie, welches erlaubt, die Distanz zwischen einem Kamerasystem und den Objekten im reellen Raum zu bestimmen. Hierzu werden zwei Kameras verwendet, die in einem bestimmten Verhältnis zueinander stehen und zwei Bilder des gleichen Motivs aufnehmen. Über die perspektivischen Unterschiede in den Aufnahmen lässt sich die Entfernung zu den Objekten ermitteln.


Funktionsweise

Positioniert man zwei baugleiche Kameras nebeneinander, sodass ihre optischen Achsen auf gleicher Höhe sind und parallel zueinander verlaufen, so wird ein und das selbe Objekt in deren Sichtfeld auf zwei unterschiedliche Bildebenen projiziert. Legt man diese nachfolgend aufeinander, so lässt sich ein horizontaler Versatz zwischen den Positionen des Objektes im Bild feststellen, der auf die unterschiedlichen Kameraperspektiven zurückzuführen ist. Dieser Versatz wird auch als Querdisparation, Disparität oder Deviation bezeichnet und gibt Hinweise darauf, wie weit das jeweilige Objekt von der Kamera entfernt ist.

Die Querdisparation weist je nach Objektentfernung eine unterschiedliche Weite auf. Befindet sich ein Objekt nahe an der Kamera, so ist sie sehr groß. Ist ein Gegenstand im Sichtfeld hingegen sehr weit entfernt, so lässt sich ein kaum erkennbarer, bzw. gar kein horizontaler Versatz zwischen den Abbildungen erkennen. Daraus lässt sich schließen, dass die Tiefe indirekt proportional zur Disparität sein muss. Weiterhin ist die Entfernung zwischen den Kameras, auch Basis genannt, für den Betrag der Querdisparation ausschlaggebend. Ist die Basis sehr groß, so unterscheiden sich die Bildperspektiven und somit auch die Werte der Disparation stark voneinander. Entsprechendes gilt, wenn die Kameras sehr nahe beieinander liegen.

Fasst man diese Beobachtungen unter Berücksichtigung der Brennweite zusammen, so lässt sich die genaue Entfernung mit folgender Formel berechnen:

Formel zur Berechnung der Tiefe


Neben der parallelen Ausrichtung der Kameras besteht die Möglichkeit, sie gegeneinander so zu neigen, sodass sich ihre optischen Achsen schneiden. Dies hat den Vorteil, dass der Wert der Querdisparation vergrößert wird, wodurch genauere Ergebnisse bei der Berechnung der Tiefe erzielt werden können.


Ausrichtung der Kameras


Ablaufskizze der Korrespondenzanalyse:

Verfahrensweise bei der Korrespondenzanalyse


Vor- und Nachteile der Korrespondenzanalyse

Die Tiefenbestimmung über die Disparität ist relativ unkompliziert und liefert im Nahbereich sehr gute Ergebnisse. Das Verfahren ist der Funktionsweise des menschlichen Sehapparates nachempfunden und somit weitestgehend ausgereift. Zudem wird es in der Praxis bereits vielfach angewendet.

Bereits durch die Verwendung zweier baugleicher Webcams lässt sich ohne großen Aufwand ein System entwickeln, das eine Objektposition im Raum bestimmen kann. Zudem bietet eine Stereokamera neben der Extraktion einer Raumkoordinate die Möglichkeit, Videobilder mit räumlicher Wirkung aufzunehmen. So setzt die Filmindustrie Stereokameras ein, wenn es darum geht, hochwertige Dokumentarfilme und beeindruckende Landschaftsaufnahmen zu produzieren.

Ein großer Nachteil der Korrespondenzanalyse ist jedoch, dass sie nur im Nahbereich funktioniert. Ähnlich wie beim menschlichen Auge können Objekte ab einer gewissen Distanz nicht mehr räumlich wahrgenommen werden. So reichen beim Menschen die Anzahl der Zäpfchen und Stäbchen, bei digitalen Kameras hingegen die Anzahl der Pixel auf dem CCD- Sensor nicht aus, um eine Querdisparation auf große Entfernungen feststellen zu können, da das Objekt auf beiden Bildern die gleiche Position einnimmt. Zwar kann man diesem Problem durch die Neigung der Kameras entgegenwirken, doch lässt es sich nicht vollständig umgehen.

Weiterhin werden für die Korrespondenzanalyse in der Regel zwei baugleiche Kameras benötigt, deren Brennweite bekannt sein muss. Es lassen sich zwar auch verschiedene Typen verwenden, doch erfordert dies wesentlich mehr Arbeitsaufwand, da hierfür die intrinsischen Parameter festgestellt und bei der Berechnung der Tiefe berücksichtigt werden müssten.


Verwendungsmöglichkeiten für das Positionserkennungssystem

Ursprünglich war es angedacht, dieses Projekt unter Verwendung einer Stereokamera zu realisieren, doch wurde schon nach kurzer Einarbeitung in die Thematik klar, dass die Korrespondenzanalyse nicht die geforderten Ansprüche erfüllen kann. Allein bei der Flexibilität müssten zu viele Zugeständnisse gemacht werden, da hierfür zwei identische Kameras benötigt werden, die sich zudem nicht frei im Raum platzieren lassen. Weiterhin kommt es bei der Inbetriebnahme baugleicher Webcams unter Windows nicht selten zu Treiberkonflikten, was die zeitgleiche Inbetriebnahme beider Geräte von vornherein ausschließt. Da zudem die exakte Basisbreite bekannt sein muss, wäre bei jeder Neupositionierung der Kameras eine genau Messung durchzuführen. Abhilfe würden hierbei nur ein optisches Messverfahren oder eine Konstruktion zum Arretieren der Kameras schaffen.


Verwendung bekannter Bildinhalte



Bei diesem Verfahren nutzt man Referenzdaten aus, um über die Abbildung eines Objektes auf der Bildebene auf dessen Position im Raum schließen zu können. Hierbei wird ein bekanntes Muster mit dem Wert verglichen, der von einem Sensor wie beispielsweise dem CCD- oder PMD- Sensor empfangen wird. Bei der PMD- Kamera sind dies die Trägerwelle und die Phasenverschiebung des reflektierten Lichtsignals. Das Verfahren wird im Laufe dieser Arbeit im Rahmen der Markerdetektion noch ausführlicher besprochen, da es Anwendung bei der Kalibrierung der Kameras findet.


Verfahren zur Positionsbestimmung

Ausgangspunkt für die Betrachtung



Hat man sich mit den Grundlagen vertraut gemacht, so kann man mit der Entwicklung des Verfahrens zur Positionsbestimmung beginnen.

Zur Extraktion der Raumkoordinate werden die Positionen von zwei Kameras in Relation zu einem Referenzpunkt bestimmt, um ein Bezugssystem für die Berechnungen zu schaffen. Über die perspektivischen Unterschiede der Videobilder lässt sich sodann die gesuchte Raumkoordinate rekonstruieren.

Die Positionsberechnung muss dabei in Echtzeit erfolgen, da das System ohne merkliche Verzögerungen auf eine Veränderung der Raumkoordinaten reagieren soll.

In welcher Form das reelle Objekt vorliegt, dessen Lage im Raum bestimmt werden soll, ist nicht entscheidend. Bei einem Interaktionssystem kann man beispielsweise Bezug auf die Fingerspitze des Anwenders oder auf die Helligkeit der Leuchtdiode eines Laserpointers nehmen.

Um die Koordinaten des gesuchten Punktes aus den Kamerabildern zu extrahieren, werden verschiedene Verfahren aus der Bildverarbeitung angewendet. Welche das sind, hängt vom Umfeld der Kamera, den Lichtverhältnissen im Raum und dem Objekt ab, welches die Raumkoordinate repräsentiert. Soll beispielsweise die Lage einer roten Kugel vor einer weißen Leinwand ermittelt werden, so ist es sinnvoll, im Bild nach einer roten kreisförmigen Fläche zu suchen, und deren Schwerpunkt zu ermitteln.

Wurden die Bildpunkte extrahiert, die zum gleichen Objekt im reellen Raum gehören, so muss nun überlegt werden, wie man daraus die gesuchten Raumkoordinaten rekonstruieren kann. Es wird also ein reeller Punkt im 3-D- Raum gesucht, von dem lediglich zwei Projektionen aus unterschiedlichen Kameraperspektiven bekannt sind.


Die Idee

Abbildung aller Puntke einer Projektionslinie P_n auf den Bildpunkt P_B<br\>(vereinfachte Darstellung ohne Berücksichtigung der Brennweite)

Zusammenhang zwischen Projektionslinie und Bildpunkt



Aus den Gesetzen der Zentralprojektion ist bekannt, dass alle Punkte der gleichen Projektionslinie bzw. des gleichen Projektionsstrahls auf eine Stelle der Bildebene projiziert werden.

Die Lage der Projektionslinie, die einem Bildpunkt P_B zuzuordnen ist, wird unter anderem durch die Brennweite und die relative Auflösung und somit über die inneren Parameter bestimmt, die das Abbildungsverhalten der Kamera festlegen. Für alle Projektionslinien gilt, dass sie ihren Ursprung im optischen Zentrum haben, was ungefähr dem Mittelpunkt des Objektives entspricht.

Bei allen Kameras mit Linsenobjektiv werden die Projektionslinien gebrochen. Somit sind der Blickwinkel, der das Sichtfeld der Kamera bestimmt und der Bildwinkel, der die Größe der Abbildung auf der Bildebene festlegt, unterschiedlich groß.

Der Bildpunkt P_B ( x_B, y_B ) liegt auf den Pixelkoordinaten des Ausgabebildes, die der Position entspricht, in der die Projektionslinie auf die Bildebene der Kamera trifft.


Projektion des gesuchten reellen Objektpunktes P_ges auf den Bildpunkt P_B<br\>(vereinfachte Darstellung ohne Berücksichtigung der Brennweite)

Verhältnis vom Bildpunkt zur gesuchten Raumkoordinate



Da sich dem Bildpunkt P_B alle reellen Punkte P_n zuordnen lassen, die auf einer bestimmten Projektionslinie liegen, lässt sich schließen, dass die gesuchte Koordinate P_ges ( x_ges, y_ges, z_ges ) irgendwo auf demjenigen Projektionsstrahl zu finden ist, der zu den 2-D- Koordinaten im Ausgabebild gehört, die bei der Bildverarbeitung extrahiert wurden.


Verwendung einer zweiten Kamera



Die genaue Lage des Punktes auf dem Projektionsstrahl lässt sich über ein einzelnes Kamerabild jedoch nicht feststellen, da sämtliche Tiefeninformationen bei der Abbildung verloren gegangen sind. Aus diesem Grund wird zur Rekonstruktion der Raumkoordinate eine weitere Kamera benötigt. Positioniert man diese so im Raum, dass sie den zu ermittelnden Punkt aus einer anderen Perspektive beobachtet, so erhält man einen zweiten Projektionsstrahl, der sich grundsätzlich vom ersten unterscheidet.


Die Projektionslinien treffen im gesuchten Punkt aufeinander

Schnittpunkt der Projektionslinien



Allgemein gilt, dass beide Projektionslinien durch den gesuchten Objektpunkt im reellen Raum verlaufen. Zudem besitzen sie in der Regel unterschiedliche Raumkoordinaten, was bedeutet, dass sie ausschließlich die zu ermittelnden Koordinate gemeinsam haben.

Die einzige Ausnahme bilden hierbei einige wenige Grenzfälle. Stehen sich die beiden Kameras beispielsweise im 180° Winkel gegenüber, so kann es vorkommen, dass ihre optischen Achsen im Raum zusammenfallen. Befindet sich der gesuchte Punkt dann auf der optischen Achse, so lässt sich dessen Tiefenkoordinate nicht bestimmen.

Grundlegend lässt sich sagen, dass ein solcher Grenzfall immer dann auftritt, wenn die Projektionslinien des gesuchten Punktes parallel zueinander verlaufen, was bedeutet, dass sie im dreidimensionalen Raum die gleiche Lage einnehmen. Betrachtet man alle Faktoren, die zu einem solchen Sonderfall führen können, so ist die Wahrscheinlichkeit verschwindend gering, dass dieser bei der praktischen Anwendung auftritt.

Die gesuchte Raumkoordinate lässt sich in der Regel also problemlos über den Schnittpunkt der Projektionslinien ermitteln.


Theoretischer Lösungsansatz

Um einen Bezug zur Kameraumgebung zu schaffen, muss zuerst ein Referenzpunkt festgelegt werden, auf den sich alle späteren Positionsangaben beziehen. Dieser dient als geometrische Basis des Laborsystems und kann beliebig im dreidimensionalen reellen Raum gewählt werden.


Darstellung der Projektionslinien durch Vektoren



Die Projektionslinien lassen sich im kartesischen Koordinatensystem dritter Ordnung durch Raumvektoren darstellen. Die folgenden Angaben beziehen sich auf das körperfeste System der jeweiligen Kamera.

Die Länge und Richtung eines jeden Vektors wird durch zwei Punkte für Spitze und Fuß festgelegt. Als Fußpunkt dient hierbei die Kameraposition mit ihren 3 Koordinaten in Breite, Tiefe und Höhe. Für die Spitze wird ein Referenzpunkt festgelegt, indem man die Koordinaten eines beliebigen Punktes auf der Projektionslinie bestimmt.

Grundsätzlich gilt für die Vektoren, dass die Koordinaten der Fußpunkte konstanten Werten entsprechen, da die Standorte der Kameras vor der Positionsberechnung einmalig festgelegt und nachfolgend nicht mehr verändert werden. Der Referenzpunkt für die Vektorspitze muss hingegen immer dann neu ermittelt bzw. festgelegt werden, wenn sich die Position des gesuchten Punktes und damit auch die Lage der Projektionslinien verändert.

Hierbei muss beachtet werden, dass der Referenzpunkt nicht mit der gesuchten Raumkoordinate verwechselt werden darf. Er dient lediglich als Hilfsmittel, um die Lage des Vektors zu beschreiben und hat mit der gesuchten Position im Raum nur die Projektionslinie gemein.

Auf Basis des Standortes der Kamera und der Pixelposition der gesuchten Raumkoordinate, ist nun ein Lösungsansatz zu finden, mit dem sich die Lage des Referenzpunktes auf der Projektionslinie für beide Kameras ermitteln lässt.


Bestimmung des Referenzpunktes



Eine Möglichkeit besteht darin, das Abbildungsverhalten der Kamera über ihre inneren Parameter in Erfahrung zu bringen und auf dieser Grundlage zu bestimmen, wie groß der horizontale und vertikale Abstand eines reelen Punktes von der optischen Achse im Raum ist. Die dabei ermittelten Distanzen werden in einem metrischen Maß, meist Millimeter, angegeben und besitzen nur für einen bestimmten Abstand zur Kamera Gültigkeit.


Dies bedeutet:

Sind die inneren Parameter bekannt, so lässt sich über deren Kenngrößen wie der Brennweite oder der relativen Auflösung der Blickwinkel und somit auch die Größe des Sichtfeldes der Kamera bestimmen. Grundsätzlich gilt, dass die Abbildung eines reellen Punktes durch die Vergrößerung des Blickwinkels näher an die Bildmitte rückt. Ist das Sichtfeld der Kamera hingegen schmal, so erscheint der gleiche Punkt näher am Rand des Videobildes. Dies ist natürlich nur dann der Fall, wenn der Bildwinkel und die Bildebene unverändert bleiben.


Abbildung des gleichen Punktes auf unterschiedliche Positionen der Bildebene


Bestimmung des Sichtfeldes über den Tangens des Blickwinkels

Sind der horizontale und / oder vertikale Blickwinkel bekannt, so kann man nun über den Tangens aus der Mathematik Breite und Höhe des Sichtfeldes der Kamera im Millimeter- Maß bestimmen. Diese Angaben beziehen sich dann auf die beliebig wählbare Länge einer Strecke, die ihren Ursprung im Kameraobjektiv hat und parallel zur optischen Achse verläuft.

Formeln zur Berechnung des Sichtfeldes der Kamera


Beispiel

Der horizontale Blickwinkel der Beispielkamera beträgt 40°, das Ausgabebild hat eine Auflösung von 640 x 480 Pixeln bei quadratischen Bildpunkten. Die Länge der Strecke entlang der optischen Achse wird mit 100 mm angegeben. Das optische Zentrum der Projektion folgt dem Idealfall und liegt genau in der Mitte des Ausgabebildes.

Für diesen Beispielfall sind nun Breite und Höhe des gesamten Sichtfeldes der Kamera für den Abstand von 100 mm zu bestimmen.

Formel zur Berechnung des Sichtfeldes der Kamera

Für den vertikalen Blickwinkel liegen keine Angaben vor. Von der Auflösung des Ausgabebildes ist jedoch bekannt, dass das Bildformat 4:3 beträgt.

Formel zur Berechnung des Sichtfeldes der Kamera


Verhältnis der Pixelgröße des Ausgabebildes zum Sichtfeld der Kamera


Berechnung des Referenzpunktes über den Strahlensatz

Der Referenzpunkt lässt sich mit dem ersten der vier Strahlensätze aus der Mathematik berechnen.

Erster Strahlensatz aus der Mathematik


Da die Höhe und Breite des Sichtfeldes für den zuvor festgelegten Abstand bekannt sind, lässt sich über den ersten Strahlensatz die reelle Position des Referenzpunktes in Relation zu diesem Sichtfeld ermitteln.

Das Ergebnis dieser Berechnungen ist eine dreidimensionale Koordinate, die als Spitze für den Raumvektor verwendet werden kann, da sie auf derjenigen Projektionslinie liegt, die der Pixelposition des Punktes auf dem Ausgabebild entspricht.


Streckenverhältnis zwischen Ausgabebild und Sichtfeld


Bei der Anwendung des Strahlensatzes gilt zu beachten, dass sich die Pixelposition nicht auf die obere linke Ecke des Videobildes beziehen darf, sondern das optische Zentrum der Bildebene als Bezugspunkt nutzen muss.


Anwendung des Strahlensatzes


Anwendung des Strahlensatzes


Die Position des Referenzpunktes steht nun für weitere Berechnungen zur Verfügung, bezieht sich jedoch noch auf das körperfeste System der Kamera. Die Koordinaten für x und y entsprechen somit dem horizontalen und vertikalen Abstand zur optischen Achse. Die z- Koordinate entspricht der Distanz zwischen der Kamera dem Sichtfeld, dass für diesen Fall ermittelt wurde.

Wendet man den Strahlensatz auf beide Kameras an, so verfügt man mit deren Standorten und den Referenzpunkten über alle notwendigen Informationen, um zwei Vektoren aufstellen zu können, mit deren Hilfe sich die Position des gesuchten Punktes im reellen Raum ermitteln lässt.


Koordinatentransformation in ein gemeinsames Laborsystem



Da sich die Vektoren der Kameras in ihren jeweiligen körperfesten Systemen und somit in unterschiedlichen Bezugssystemen befinden, muss eine Koordinatentransformation durchgeführt werden. Hierfür wählt man idealerweise ein Laborsystem aus, dessen Basis nahe am gesuchten Punkt im reellen Raum liegt.

Um einen Vektor in dieses Laborsystem zu übertragen, wird die Koordinatentransformation sowohl auf den Fußpunkt, als auch auf die Spitze angewendet. Aus diesem Grund muss die Lage und die Blickrichtung der Kamera in Relation zur Basis und Orientierung des Laborsystems bekannt sein.

Vektoren der Projektionslinien


Vektor der Raumkoordinate


Die Raumvektoren für die Kamerapositionen und die Referenzpunkte beziehen sich jeweils auf das Zentrum des Laborsystems.


Abbilden der Vektoren auf Geraden zur Berechnung des Schnittpunkts



Bezieht man die Toleranzen mit ein, die in der Praxis durch die verhältnismäßig geringen Auflösungen der Webcams und die Ungenauigkeiten bei den Messungen entstehen, so entspricht die Position des gesuchten Punktes dem Standort im Raum, in dem sich die beiden Projektionslinien bzw. Vektoren maximal annähern.

Die Ermittlung eines solchen Annäherungspunktes zwischen zwei Vektoren ist umständlich und beansprucht unnötig viel Rechenleistung vom Systems. Aus diesem Grund werden die dreidimensionale Vektoren auf zweidimensionale Geraden abgebildet. Da sich diese stets schneiden, wenn sie nicht parallel zueinander liegen, kann ein eindeutiger Punkt berechnet werden. Das aufwändige und rechenintensive Verfahren zur Annäherung an eine Koordinate im dreidimensionalen Raum wird somit umgangen.

Für die Abbildung kann man aus drei Ebenen wählen, die jeweils von zwei der drei Achsen des kartesischen Koordinatensystem des Vektorraumes aufgespannt werden.


Berechnungsquadranten


Abbildung eines Vektors der auf die zweidimensionalen Koordinatensysteme


Abbildung eines Vektors der auf die zweidimensionalen Koordinatensysteme


Berechnung der Raumkoordinate über den Schnittpunkt der Geraden



Um möglichst genaue Ergebnisse bei der Positionsberechnung zu erzielen, sollten die Vektoren auf dasjenige kartesisches Koordinatensystem zweiter Ordnung abgebildet werden, in dem der Winkel zwischen den beiden Geraden am ehesten 90° entspricht. Liegen zwei Kameras senkrecht im Raum zueinander, so wirken sich Messungenauigkeiten bei deren Positionsbestimmung weniger drastisch auf das Berechnungsergebnis aus.

Weiterhin spielt der Abstand zwischen den Kameras eine entscheidende Rolle. Befinden sich die Kameras beispielsweise im XY- Koordinatensystem an der gleichen Position, so ist eine Berechnung des Geradenschnittpunktes in diesem Bezugssystem auch dann nicht möglich, wenn der Winkel zwischen ihnen 90° beträgt.

Daher gilt es, einen Wert zu ermitteln, der den Winkel zwischen den Geraden und die Distanz zwischen den Kameras gleichermaßen berücksichtigt. Über diesen Wert wird dann das Koordinatensystem zweiter Ordnung bestimmt, in dem die Schnittpunktermittlung die größtmögliche Genauigkeit erreicht.

Da sich in einem zweidimensionalen Bezugssystem nur zwei der drei Koordinaten berechnen lassen, muss anschließend ein weiteres System verwendet werden, welches orthogonal zum erst gewählten liegen muss. In diesem wird dann eine dritte Gerade aufgestellt, in die eine der beiden bereits berechneten Koordinaten eingesetzt wird.


Ergebnis der Positionsermittlung



Wurden alle Schnittpunkte berechnet, so lassen sie sich zu einem Positionsvektor für den dreidimensionalen Raum zusammenfassen. Der Vektorfuß entspricht dem Zentrum des Laborsystems und die Spitze zeigt auf den gesuchten Punkt.

Bewegt man nun diesen Punkt im reellen Raum, so werden für jede Positionsveränderung erneut die Referenzpunkte bestimmt, Vektoren aufgestellt und Geraden geschnitten. Man erhält somit ein System, dass die Verlagerung eines Punktes in Echtzeit mitverfolgen kann und dazu in der Lage ist, seine Koordinaten im Raum zu erkennen.


Umsetzung in der Praxis

Konfiguration des Kamerasystems



Der erste Schritt bei der Realisierung besteht darin, dass man alle Informationen sammelt, welche vom System für die Berechnung des Schnittpunktes benötigt werden.

Dies sind:

- die Lage des Laborsystems im reellen dreidimensionalen Raum.

- die Lage beider Kameras im Raum, definiert durch die Transformationsmatrizen
  ihrer körperfesten Systeme in Relation zum Laborsystem.

- Angaben über den Blickwinkel in Form einer dreidimensionalen Koordinate,
  die dem Sichtfeld der jeweiligen Kamera für eine bestimmten Distanz entlang
  ihrer optischen Achse entspricht.

Jeder dieser Werte lässt sich zwar per Hand messen, doch ist dies sehr umständlich, da die Konfiguration mit Ausnahme der inneren Parameter, die nur ein mal zu bestimmen sind, immer dann durchgeführt werden muss, wenn die Positionen der Kameras verändert werden. Weiterhin liegt hier eine potentielle Fehlerquelle vor, da sich leicht Messungenauigkeiten in die Ergebnisse einschleichen können.

Viel eleganter ist die Verwendung eines sog. Kalibrierungsprogramms, mit dem sich über einen oder mehrere Positionsmarker die genaue Lage der Kamera aus ihrem Videobild bestimmen lässt. Diese Programme vergleichen hierfür die Eigenschaften der Abbildung des Markers in Relation zu einem im System abgelegten Referenzmuster. Aus diesem Grund werden auch hier die intrinsischen Parameter inklusive der Angaben über den Faktor der Distortion für jede Kamera benötigt.


Kamerakalibrierung zur Bestimmung der intrinsischen Kameraparameter

Bei der Kalibrierung der inneren Parameter wird die Kamera auf Referenzmuster ausgerichtet. Auf dem Ausgabebild markiert der Nutzer die markanten Punkte dieses Rasters und teilt dem System auf diese Weise mit, wie es auf die Bildebene der Kamera projiziert wird. Aus den Unterschieden zwischen dem Abbild des Rasters und den im System abgelegten Informationen des Referenzmusters lassen sich die inneren Kameraparameter ermitteln. Der Kalibrierungsvorgang wird dabei in mehreren Durchgängen für unterschiedliche Kamerapositionen durchgeführt, um die Genauigkeit der Messung zu erhöhen.


Beispiel

Möchte man den horizontalen Bildwinkel bestimmen, so richtet man die Kamera auf ein Muster – beispielsweise ein Rechteck oder eine Linie – bekannter Größe aus.

Dabei muss darauf geachtet werden, dass die optische Achse genau senkrecht auf dem Muster steht und durch dessen Mittelpunkt verläuft.

Verschiebt man nun die Kamera entlang ihrer optischen Achse so weit, bis das Ausgabebild in der Breite komplett vom Muster ausgefüllt wird, so lässt sich über den Tangens der gesuchte Blickwinkel bestimmen.


Kamerakalibrierung zur Bestimmung der extrinsischen Kameraparameter

Mit den inneren Parametern lässt sich nun die Lage der Kameras und die des Bezugspunktes im Raum ermitteln. Hierzu verwendet das Kalibrierungsprogramm sog. Positionsmarker.

Der Vorgang ist dem Verfahren zur Kalibrierung der inneren Parameter sehr ähnlich. Der entscheidende Unterschied besteht darin, dass das System nun das Abbildungsverhalten der Kameras kennt und somit in der Lage ist, eigenständig von der Projektion des Markers auf die Kameraposition im Raum zu schließen.

Bedeutung für das Positionserkennungssystem

- Die Position des Markers kann als geometrische Basis
  für das Laborsystem verwendet werden.

- Die körperfesten Systeme der Kameras entsprechen deren
  äußeren Parametern und lassen sich durch Transformationsmatrizen
  beschreiben.


Bestimmung des Sichtfeldes der Kamera über den Positionsmarker

Durch die Kalibrierung kennt man nun die intrinsichen und extrinsischen Parameter. Für die Positionsberechnung fehlt somit nur noch eine Größe für das Sichtfeld der Kamera.

Das Sichtfeld müsste – genau wie die inneren Parameter – zwar nur ein Mal für jede Kamera festgelegt werden, doch wäre hierfür ein weiterer Programmschritt notwendig, der vom Anwender bei der Kamerakalibrierung manuell ausgeführt werden müsste. Um ihm dies zu ersparen, wird das Sichtfeld zusammen mit den äußeren Parametern festgelegt.


Gründe gegen die Verwendung des Markers als Referenzwert

Vom Positionsmarker sind die Pixelkoordinaten seines Abbildes, sowie dessen Lage im Raum bekannt. Dank der inneren Parameter weiß man zudem, in welcher Pixelposition die optische Achse das Videobild durchquert. Im Prinzip reichen diese Angaben bereits aus, um die reellen Koordinaten des Referenzpunktes der Projektionslinie bestimmen zu können. Unter Umständen kann es jedoch vorkommen, dass der Marker genau auf der optischen Achse der Kamera liegt und die Anwendung des Strahlensatzes nicht möglich ist.

Durch die Verwendung der Größe des Ausgabebildes in Kombination mit dem dazugehörigen Sichtfeld kann man diesem Problem entgegenwirken. Diese verfügen stets über eine feste Größe und werden von der Lage der optischen Achse im Kamerabild nicht beeinflusst. Dass der Strahlensatz nicht angewendet werden kann, wenn der Marker auf der optischen Achse liegt, trifft jedoch auch hier zu und ist generell unvermeidlich. Die Verwendung des Sichtfeldes als Referenzmaß ist dennoch sinnvoll, da das Bildformat und die Pixelmaße des Ausgabebildes bekannt sind, was zusätzliche Möglichkeiten bietet, durch verschiedene Kontrollverfahren korrigierend einzugreifen. So kann man beispielsweise das Verhältnis zwischen der Breite und der Höhe des Sichtfeldes überprüfen. Stimmen diese Maße nicht mit dem Bildformat des Ausgabebildes überein, so liegt augenscheinlich ein Fehler vor.


Bestimmung des Sichtfeldes über den Positionsmarker

Meist liegen die inneren Parameter in Form einer sog. Projektionsmatrix vor. In diesem Fall ist der Blickwinkel der Kamera nicht bekannt, was die Berechnung über den Tangens ausschließt. Das Problem lässt sich umgehen, wenn man das Sichtfeld über die Markerposition ermittelt.

Man vergleicht hierbei die Pixelmaße des Ausgabebildes mit den 2-D- Koordinaten der Abbildung des Markers. Durch die Kalibrierung der äußeren Parameter ist der Abstand zwischen dem Positionsmarker und der Kamera bekannt. Somit lässt sich für diese Distanz über die Anwendung des Strahlensatzes das Sichtfeld ermitteln.


Formeln zur Berechnung des Sichtfeldes der Kamera


Mit den Angaben über das Sichtfeld jeder Kamera stehen nun alle Informationen zur Verfügung, die für die Positionsberechnung benötigt werden.


Parameterübergabe



Die Berechnung der Raumkoordinate wird von einem eigenen Programmteil ausgeführt. Zum einen dient das dazu, das System modular zu gestalten, was den bequemen Austausch des verwendeten Konfigurationsprogramms ermöglicht. Zum anderen liegt hier eine logische Grenze beim Ablauf des Positionsermittlungsverfahrens vor. So muss das System nur dann neu konfiguriert werden, wenn sich der Standort der Kameras ändert. Die Positionsberechnung erfolgt hingegen in Echtzeit, was bedeutet, dass das System laufend auf Veränderungen der Raumkoordinate reagieren muss.

Aus diesem Grund wird eine Schnittstelle benötigt, die in einer Richtung die Daten vom Konfigurationsprogramm an die Anwendung der Positionsberechnung weiterleitet.

Daten, die übermittelt werden müssen

- Die Transformationsmatrizen der körperfesten Systeme von beiden Kameras
  in Abhängigkeit von der Markerposition bzw. dem Laborsystem

- Die Werte für die Distortion (radialen Verzeichnungen) der Kameralinsen

- Die Pixelkoordinaten des Zentrums der optischen Achse

- Die Größe des Ausgabebildes in Pixeln

- Die Größe des Sichtfeldes der einzelnen Kameras


Extraktion der gesuchten Raumkoordinate



Unter Verwendung der Ergebnisse aus der Systemkonfiguration wird nun die Berechnung der gesuchten Raumkoordinate durchgeführt. Dieser Prozess erfolgt laufend und arbeitet bekanntlich auf der Grundlage von zwei Videobildern, die sich in ihrer Perspektive unterscheiden.

Voraussetzung für die Berechnung der Raumkoordinate ist, dass immer dann Informationen über die Lage der Bildpunkte zur Verfügung gestellt werden müssen, wenn sich die Position des Objektes im Raum verändert. Aus diesem Grund geschieht die Bildverarbeitung – über die der gesuchte Bildpunkt extrahiert wird – zeitgleich mit der Positionsberechnung.

Im Idealfall sollten die Berechnungsfunktionen ausgelagert werden, um unabhängig vom verwendeten Verfahren der Bildverarbeitung zu sein. In der Praxis ist es jedoch oftmals sinnvoll, beide Prozesse in einem Programmteil zusammenzufassen.

Dafür sprechen verschiedene Gründe. So erfolgen die Bildverarbeitung und die Berechnung der Raumkoordinate nahezu zeitgleich, was eine schnelle Schnittstelle für die Datenübertragung zwischen den einzelnen Modulen erforderlich machen würde. Weiterhin wäre die Auslagerung mit einem hohen Aufwand verbunden, da die Prozesse unter Umständen synchronisiert werden müssen.

Das wichtigstes Argument für einen Zusammenschluss beider Teile ist aber, dass auf dem Markt bereits Bildverarbeitungsprogramme wie „EyesWeb“ existieren, die man flexibel durch Module zur Positionsberechnung erweitern kann.


Extrahieren der Bildpunktkoordinaten

Sobald ein Bildpunkt mit Hilfe eines Verfahrens aus der Bildverarbeitung extrahiert wurde, muss er eine Funktion durchlaufen, welche die radialen Verzeichnungen der Linse und somit auch die Koordinaten des Punktes rechnerisch korrigiert. Eine entsprechende Distortionsfunktion kann in der Regel von der Kamerakalibrierung übernommen werden.


Lage der körperfesten Systeme der Kameras zum Laborsystem des Markers

Positionsberechnung

Um die dreidimensionalen Koordinaten der beiden Referenzpunkte zu bestimmen. wird für die jeweilige Kamera der erste Strahlensatz aus der Mathematik auf das Sichtfeld und den extrahierten Bildpunkt angewendet.

Im nächsten Schritt sind die Positionen der beiden Kameras zusammen mit ihren Referenzpunkten über eine Koordinatentransformation in das Laborsystem zu überführen. Hierzu multipliziert man ihre Koordinaten mit den Transformationsmatrizen der Kameras.

Befinden sich alle Objekte im Laborsystem, so werden nun die Raumvektoren der Projektionslinien aufgestellt und auf Geraden abgebildet. Eine Kontrollfunktion untersucht hierbei die Positionen der Kameras in Relation zum Standort des Markers und legt fest, in welches 2-D- Koordinatensystem transferiert werden soll.

Eine weitere Funktion ermittelt den Schnittpunkt der Geraden im Koordinatensystem zweiter Ordnung. An dieser Stelle sind bereits zwei der drei Koordinaten des gesuchten Punktes bekannt. Bildet man nun noch einen der Vektoren in ein anderes 2-D- System ab, so lässt sich die dritte Koordinate ermitteln, wenn man einen der bekannten Werte in die neue Geradengleichung einsetzt.

Am Ende des Berechnungsprozesses erhält man das virtuelle Ebenbild des Objektpunktes aus dem reellen dreidimensionalen Raum, dessen Koordinaten in Breite, Höhe und Tiefe in Relation zur Markerposition stehen.


Systemplan



Systemplan


Mathematische Grundlagen

Intrinsische Kameraparameter



Projektionsmatrix

Die Projektionsmatrix beschreibt das Abbildungsverhalten einer Kamera. Mit ihrer Hilfe lässt sich die Lage des Bildpunktes auf der Bildebene in die Pixelkoordinaten auf dem Ausgabebild umrechnen.


Aufbau der Projektionsmatrix


Linsendistortion

Mit den Werten für die Linsendistortion eines Kameraobjektives lassen sich die radialen Verzeichnungen im Videobild nachträglich rechnerisch ausgleichen. Die Korrektur erfolgt in mehreren Durchgängen. Mit jeder Wiederholung erhöht sich die Genauigkeit der Entzerrung.


Distortionsformel


Extrinsische Kameraparameter



Die extrinsischen Parameter legen die Lage der körpferfesten Systeme der Kameras in Relation zum Laborsystem fest.


Transformationsmatrix

Ein Wechsel vom körperfesten System in das Laborsystem – und umgekehrt – lässt sich elegant über die sog. Transformationsmatrix bewerkstelligen, welche sich aus einer Drehmatrix für die Rotation und einem Vektor zur Translation bzw. Positionsverschiebung zusammensetzt.


Angabe der Kamera- Rotationslage über eine Drehmatrix

Angabe der Kamera- Rotationslage über eine Drehmatrix


Beschreibung der Position einer Kamera durch einen Vektor

Beschreibung der Position einer Kamera durch einen Vektor


Sie besteht somit aus 12 Elementen, von denen die ersten neun der Beschreibung der Orientierung dienen. Die anderen drei Parameter legen die Position im Raum fest.

Wird für die Drehmatrix die ZXZ- Konvention der Eulerschen Winkel verwendet, so ist die entsprechende Transformationsmatrix wie folgt aufgebaut:

Transformationsmatrix


Koordinatentransformation



Die Koordinatentransformation dient der Umrechnung von Raumkoordinaten aus den körperfesten Systemen der Kameras in das Laborsystem des Positionsmarkers.

Die Transformation wird über eine Multiplikation mit den Transformationsmatrizen der Kameras durchgeführt. Sie muss auf die Kameraobjekte an sich und auf die Referenzpunkte angwendet werden, die sich ebenso wie Kamera selbst im körperfesten System befinden.


Transformationsformel

(Auszug aus Kapiel 2 – Transformationen)

Die Koordinatentransformation zwischen den Bezugssystemen a0 und a1 lässt sich durch folgende Formel mathematisch beschreiben:


Formel der Koordinatentransformation


Ein Punkt x0 aus dem Koordinatensystem a0 wird also über die Multiplikation mit der Rotationsmatrix R0 und die Addition mit dem Translationsvektor t0 auf den Punkt x1 im Koordinatensystem a1 übertragen.


Nutzbarmachung der Positionsdaten

Ist das System zur Positionsbestimmung auf Basis des Verfahrens aus Kapitel 3 realisiert, so liefert es die drei Vektor- Koordinaten des gesuchten Objektpunktes in Relation zur Markerposition bzw. dem Zentrum des Laborsystems. Weiterhin ist bekannt, dass diese in einer Endlosschleife laufend aktualisiert werden und sich auf verschiedene Art und Weise nutzen lassen.


Nutzbarmachung der Positionsdaten


Grundlegendes zur Raumkoordinate

Bevor man mit der Realisierung der Anwendung beginnt, müssen einige Punkte bezüglich der vorliegenden Raumkoordinate geklärt werden.


Lage im Raum



Wie in Kapitel 2 erläutert, wird die Lage eines Objektpunktes in der Regel über die Werte für Position und Rotation definiert.

Dies trifft für das entwickelte Verfahren zur Positionsbestimmung aber nicht zu, da sich die Orientierung aus der Abbildung eines einzelnen Punktes nicht bestimmen lässt und somit nur die Position der Raumkoordinate bekannt ist.

In einem solchen Fall übernimmt der zu ermittelnde Objektpunkt die Rotationslage desjenigen Bezugssystems, auf dessen Basis sich der Fußpunkt seines Positionsvektors bezieht. Bei der praktischen Umsetzung bestimmt somit die räumliche Orientierung des Markers die Ausrichtung all jene Punkte, für die lediglich Informationen über die Position vorliegen.


Bestimmung der Rotationslage



Die Orientierung des Objektes im reellen Raum zu ermitteln, ist nicht Bestandteil des Interaktionssystems.

Der Vollständigkeit halber soll ein mögliches Verfahren zur Bestimmung der Rotationslage dennoch kurz umrissen werden, da es nach Abschluss der Diplomarbeit durchaus denkbar ist, das System um diese Komponente zu erweitern.


Theoretischer Lösungsansatz

Wird neben der Position auch die Rotationslage eines Objektes benötigt, so lässt sich diese über vier Punkte ermitteln, die in einem bestimmten räumlichen Verhältnis zueinander stehen. Über diese Referenzpunkte kann man dann ein neues körperfestes System aufspannen, dessen Lage zum Laborsystem die Orientierung des Objektes im Raum definiert. Auch hierfür wird wieder das kartesische Koordinatensystem dritter Ordnung verwendet.

Einer der vier Punkte markiert die Basis des neuen Bezugssystems. Die drei anderen legen die Position der Spitzen der Einheitsvektoren des Koordinatensystems und somit auch die Lage der x-, y- und z- Achse fest. Die Achspunkte müssen daher orthogonal zueinander positioniert werden. Für die Länge der Vektoren gilt, dass sie nach Möglichkeit gleich groß gewählt werden sollten, um die Berechnungen zur Beschreibung der Rotationslage so einfach wie möglich zu halten.

Über das in dieser Diplomarbeit entwickelte Positionsermittlungsverfahren ließen sich dann zur Laufzeit die Koordinaten der drei Achspunkte ermittelt. Die Rotationslage des Objektpunktes wird über das Verhältnis zwischen dem körpferfesten System dieser Punkte und dem Laborsystem bestimmt.


Umsetzung in der Praxis

Für die praktische Umsetzung eignen sich kleine Kugeln, die über Stäbchen miteinander verbunden sind. Durch verschiedene Farben lassen sich hierbei die einzelnen Achspunkte identifizieren.


Hilfsmittel zur Bestimmung der Rotationslage


Unter Verwendung von Bildverarbeitungsverfahren werden die Farbkanäle separiert und einzeln auf die Lage der farbigen Kugeln untersucht. Hierbei werden die Schwerpunkte der detektierten kreisförmigen Flächen ermittelt und nachfolgend in Form von drei Koordinatenpaaren an die Positionsberechnung weitergeleitet. Dort erstellt man ein körperfestes System der drei Punkte und setzt dieses in Relation zum Laborsystem. Die Ausrichtung der Achsen des körpferfesten Systems wird durch eine Drehmatrix angegeben, welche schließlich Aufschluss über die Rotationslage des Objektes im Raum gibt.


Veränderung der Position zur Laufzeit des Systems



Die Raumkoordinate ist kein statischer Wert, sondern ändert sich fortwährend, solange das System aktiv ist. Daraus ergibt sich mit der Dauer der Positionserkennung eine zeitliche Komponente, die einen Interaktionsprozess erst möglich macht.

Grundsätzlich ist hierbei die Häufigkeit entscheidend, in der die Positionsermittlung innerhalb eines bestimmten Zeitraums erfolgt. Diese wird maßgeblich von der Leistungsfähigkeit der verwendeten Komponenten bestimmt und sollte 10 - 15 Durchgänge pro Sekunde nicht unterschreiten. Wird dieser Grenzwert nicht erreicht, so genügen die vom System berechneten Koordinaten in der Regel nicht, um sämtlichen Bewegungen des Objektpunktes zu folgen, was zu Irritationen bei der Anwendung auf Seiten des Nutzers führen kann.

Im Idealfall entspricht die Rate der Positionsberechnung der Bildwiederholfrequenz der verwendeten Kameras. Meist liegt diese bei 25-30 fps, ein Wert, der sich unter Verwendung eines handelsüblichen Computers der mittleren Preisklasse und die Wahl geeigneter Datenports problemlos erzielen lässt und für die meisten Anwendungen absolut ausreichend ist.


Steuerung von 3D Anwendungen

3-D- Anwendungen



Die Positionsermittlung hat nur dann einen Sinn, wenn die Positionsdaten möglichst effizient genutzt werden. Hierzu eignet sich eine sog. 3-D- Anwendung besonders gut, da sie dem reellen Raum nachempfunden ist und die gleichen Eigenschaften wie dieser hat oder besitzen kann.

Eine 3-D- Anwendung baut auf eine sog. 3-D- Engine auf und wird unter Verwendung von Modellierungs-, Animations- und Entwicklungswerkzeugen implementiert. Sie besteht aus einem virtuellen dreidimensionalen Raum, welcher sich auf einem Bildschirm oder über eine Beamerprojektion darstellen lässt. Weiterhin hat der Nutzer die Möglichkeit, durch Ausgabegeräte wie eine 3-D- Brille regelrecht in diese virtuelle Welt einzutauchen. Mit der Einbindung verschiedener Programmmodule, lassen sich zudem physikalische Kräfte wie Reibung und Gravitation simulieren oder die Ausbreitung von Druck- und Schallwellen graphisch darstellen. Der Forschungs- und Entwicklungsbereich, der sich hinter dem Stichwort „Augmented Reality“ verbirgt, erlaubt hierbei die Verknüfpung der virtuellen Realität mit der reellen Umgebung.

Im dreidimensionalen Raum, der sog. Szene, sind verschiedene Arten von 3-D- Objekten anzutreffen. Diese schlüpfen in der Regel in verschiedene Rollen, wobei sich hauptsächlich zwischen den Akteuren und der Umgebung unterscheiden lässt. Akteure besitzen ein bestimmtes Verhalten bzw. eine genau definierte Funktion. Die Umgebung bildet den Rahmen der Anwendung. Ihr lassen sich der Boden, die Wände, sowie Elemente zur Ausgestaltung des virtuellen Raums zuordnen.

3-D- Computerspiele machen heutzutage den wohl größten Anteil der 3-D- Anwendungen aus. Neben ihnen gibt es aber auch Software für Simulationen und Präsentationen, die unter anderem von der Industrie, der Forschung und dem Gewerbe genutzt werden. Ebenso werden virtuelle Realitäten für die Entwicklung von neuen Navigationssystemen und Produktprototypen genutzt.


Verwendung der Positionsdaten in einer 3-D- Anwendung



Ein grundlegender Ansatz zur Verwendung der Raumkoordinate wurde in Kurzform in der Einleitung bereits kennen gelernt. Ob und in welcher Form sich die Positionsangaben anderweitig nutzen lassen, ist jedoch noch zu untersuchen.

So sind die Raumkoordinaten im Grunde nichts anderes als drei Zahlen, die in einem bestimmten Verhältnis zueinander stehen und durch den Anwender beeinflussbar sind. Löst man sich von der Vorstellung, dass die Positionswerte ausschließlich dazu verwendet werden können, einen Standort im Raum zu beschreiben, so eröffnen sich ganz neue Anwendungsmöglichkeiten, die nicht direkt an die Objektkörper im 3-D- Raum geknüpft sind.


Steuerung der 3-D- Szene

Werden die Positionswerte auf die globalen Eigenschaften der Szene übertragen, so wirkt sich dies auf den gesamten virtuellen Raum aus.


Veränderung regionaler Parameter

Die Raumkoordinate kann dazu verwendet werden, um die Eigenschaften der Szene in einer bestimmten Region zu beeinflussen. So ließen sich unter anderem die Texturen (Farbe / Muster der Oberflächen) eines Objektes austauschen oder verändern, sobald man in dessen Nähe kommt. Verfügt die 3-D- Anwendung über Funktionen zur Simulation von Gravitationskräften, so hätte man die Möglichkeit, die physikalischen Gesetze in der Nähe der Raumkoordinate zu beeinflussen oder komplett außer Kraft zu setzen.


Steuerung der Szenenkamera

Um die 3-D- Szene am Bildschirm sichtbar zu machen, bedarf es einer sog. Szenenkamera. Die Parameter dieser Kamera legen die Größe des Sichtfeldes fest und geben den Standort vor, von dem der Anwender Einblick in den virtuellen Raum erhält. Die Positionswerte ließen sich hierbei zur Veränderung dieser Werte nutzen, was sich direkt auf die Darstellung des virtuellen Raums am Bildschirm auswirken würde. Den regelbaren Größen sind die Perspektive, der Fokuspunkt, die Blickrichtung und der Standpunkt der Kamera zuzuordnen.


Einflussnahme auf globale Merkmale

Die Positionswerte sind ebenso auf globale Merkmale der Szene anwendbar. Überträgt man die Lage der Fingerspitze des Anwenders auf die virtuellen Raumkoordinate, so kann dieser durch Handgesten verschiedene Parameter steuern. Dies erfolgt beispielsweise über eine Art Schieberegler- Funktion, bei der sich die Werte vergrößern, wenn der Benutzer die Hand von sich wegbewegt und verkleinern, wenn er sie zu sich heranzieht. Auf diesem Weg ließen sich unter anderem die Lautstärke der Audio- Ausgabe und die Helligkeit oder die Farbe des diffusen Lichtes verändern. Ebenso wäre es denkbar, dass der Benutzer das Laborsystem des gesamten virtuellen Raums auf der Fingerspitze balanciert, indem man Einfluss auf die Werte für Position und Rotation nimmt.


Anwendung auf das Verhalten von Objekten


Kontrolle von Akteuren in Computerspielen

Ein Beispiel hierfür sind sog. 3rd Person Computerspiele, bei denen der Anwender in der Vogelperspektive auf den Hauptcharakter blickt. Dieser übernimmt die Rolle des Spielers in der virtuellen Welt und wird beim Computer in der Regel über die Tastatur und die Maus gesteuert. Bei der Spielkonsole erfolgt die Eingabe über einen Controller. Die Funktionen dieser Eingabegeräte können durch Veränderungen der Raumkoordinate ausgeführt werden, indem man jedem Bewegungsmuster eine Aktion zuweist. Mit der gestischen Steuerung ließen sich in einem Computerspiel der Avatar kontrollieren und die Kontextmenüs bedienen, wenn deren Aufbau und Funktionalität speziell auf die Raumkoordinate ausgelegt sind.


Anwendungsbeispiel

Anforderungen



Das Anwendungsbeispiel dient zur Demonstration der Funktionsfähigkeit der Schnittstelle und aller Programmteile. Weiterhin soll es dazu beitragen, die Funktionsweise und den potentiellen Nutzwert des Systems zu veranschaulichen.


Demonstration der Funktionsfähigkeit

So soll die Funktionstüchtigkeit des Programmteils zur Positionsermittlung demonstriert und die erfolgreiche Einbindung der Raumkoordinate in eine 3-D- Anwendung aufgezeigt werden. Die Bedingung hierfür ist, dass der Austausch der Positionsdaten zwischen den einzelnen Programmteilen reibungslos abläuft.

Um ein erwartungskonformes Systemverhalten zu erzielen, wird vorausgesetzt, dass alle Bestandteile des Systems voll funktionsfähig sind und fehlerfrei miteinander arbeiten. Sollte es zu einem Störfall kommen, so lässt sich dies sofort am Bildschirm erkennen, da das virtuelle Objekt dann ein anderes Verhalten aufweist, als der detektierte Punkt im reellen Raum.

Das Anwendungsbeispiel dient natürlich nicht dazu, das System auf Fehlerfreiheit zu testen. Lässt sich aber ein direkter Zusammenhang zwischen der Systemreaktion und der extrahierten Raumkoordinate feststellen, der zudem noch den Anforderungen an das Anwendungsbeispiel entspricht, so ist dies ein Indiz dafür, dass das Programm einwandfrei arbeitet.


Aufzeigen der Funktionsweise

Das Anwendungsbeispiels ist so zu gestalten, dass dem Anwender die prinzipielle Funktionsweise des Interaktionssystems verständlich gemacht wird und dass er nachvollziehen kann, in welcher Form sich eine Raumkoordinate in der virtuellen Welt nutzen lässt.

Ist ein Bewegungsablauf des Anwenders auf dem Bildschirm nachvollziehbar, so lässt dies Rückschlüsse auf die Arbeitsweise des Systems zu. Hierbei kann verfolgt werden, wie die Raumkoordinate über die Kameras in das Berechnungsprogramm gelangt und von diesem zu verwertbaren Informationen weiterverarbeitet wird. Es ist zwar nicht ersichtlich, was die Systemteile im Detail machen, doch kann man die grundlegende Funktionsweise nachvollziehen, wenn sich ein direkter Bezug der Anwendung zum Bewegungsmusters herstellen lässt.


Lösungsansatz für ein mögliches Anwendungsbeispiel



Überträgt man die extrahierte Raumkoordinate auf ein Objekt in der 3-D- Szene, so lässt sich eine Bewegung im realen Raum an diesem Objekt direkt nachvollziehen. Hierzu müssen jedoch die Laborsysteme der virtuellen und der reellen Welt im direkten Bezug zueinander stehen.

Folgt das Objekt ohne zeitliche Verzögerung den Bewegungen des Anwenders, so weist dies darauf hin, dass das System fehlerfrei arbeitet. Weiterhin spiegelt das Objektverhalten alle Eigenschaften der Raumkoordinate wieder. So zeigt es eine veränderliche Position im Raum an, auf die der Anwender direkten Einfluss hat.

Die Funktionalität des Anwendungsbeispiels besteht also darin, die einzelnen Koordinaten zu einem Positionsvektor zusammenzufassen und diesen einem virtuellen Objekt in der 3-D- Szene zuzuweisen, welches dann in Echtzeit den Bewegungen des Anwenders bzw. der Veränderung des Standortes des extrahierten Objektpunktes folgt.


Umsetzung in der Praxis



Um die Übertragung der Positionsdaten kümmert sich eine Schnittstelle. Die Aufgaben der 3-D- Anwendung setzen sich somit aus der Interpretation der übertragenen Koordinaten und deren Einbindung in das Programmverhalten zusammen.

Die Schnittstelle stellt nach jedem Vorgang zur Detektion der Raumkoordinate drei Zahlen zur Verfügung, die zu verwertbaren Informationen weiterverarbeitet werden müssen. Für das Anwendungsbeispiel bedeutet dies, dass die Koordinaten den drei Achsen des Laborsystems zuzuordnen sind und nachfolgend einem Vektor zugewiesen werden. Dieser dient dann dazu, die Position eines 3-D- Körpers im virtuellen Raum festzulegen.


Anwendungsbeispiel - Systemplan


Schnittstelle zur Datenübertragung

Die Übertragung der Positionswerte erfolgt über eine Software- Schnittstelle. Diese ist in beide Programmteile eingebettet und setzt sich aus verschiedenen Schichten bzw. Protokollen zusammen, welche die einzelnen Funktionsschritte der Datenübertragung voneinander abgrenzen und festlegen, in welcher Form und auf welche Art und Weise diese von statten geht. Zur Spezifikation der Protokolle gibt es verschiedene Bestimmungen und Richtlinien wie das ISO/OSI- oder TCP/IP- Modell. Diese definieren die Aufgaben der Protokolle und den Aufbau der einzelnen Schichten.

Die Anzahl, die Bezeichnungen, sowie die Aufgaben der Schichten variieren von Modell zu Modell. Im Wesentlichen lässt sich herbei jedoch zwischen den Kommunikations- und den Transportprotokollen unterscheiden.

Kommunikationsprotokoll Das Kommunikationsprotokoll definiert die Beschaffenheit der Daten.
Übertragungs- / Netzwerkprotokoll Über das Transportprotokoll wird festgelegt, auf welche Art und Weise die Datenübertragung erfolgt.


Schnittstelle


Anforderungen



Die Übertragung der Daten vom Programmteil zur Positionsermittlung an die 3-D- Anwendung stellt Anforderungen an die Schnittstelle, welche eingehalten werden müssen, um einen reibungslosen Systemablauf zu garantieren. Neben allgemeinen Punkten wie der Fehlerfreiheit beim Datentransfer sind hierbei auch Anforderungen zu beachten, die speziell an die verwendete Schnittstelle und das Interaktionssystem geknüpft sind.

- Die Datenrate der Schnittstelle muss ausreichend hoch sein
- Die Schnittstelle muss dazu in der Lage sein, den Datentyp der Positionswerte zu übertragen
- Die Schnittstelle muss sich in beide Programmteile einbinden lassen
- Die drei Koordinatenwerte müssen als solche vom Empfänger erkannt werden


Übertragungsgeschwindigkeit

Erreicht die Schnittstelle nicht erforderliche Geschwindigkeit, so hat dies einen Datenstau am Ausgang des Programmteils zur Berechnung der Raumkoordinate zur Folge. Die Positionswerte können dann nur zu einem gewissen Teil übertragen werden, was dazu führt, dass das Objekt aufgrund der ausbleibenden Positionsangaben nicht jeder Bewegung des Anwenders folgen kann. Damit es nicht zu einem solchen Datenstau kommt, muss die Schnittstelle so ausgelegt sein, dass sie über eine ausreichende Datenrate verfügt. Für Export, Transfer und Import bedeutet das, dass sie mindestens so schnell erfolgen müssen, wie die Positionsermittlung.


Unterstützung des Datentyps

Die Schnittstelle muss auf die Übertragung des Datentyp der Raumkoordinate ausgelegt sein. Die Raumkoordinate setzt sich aus drei nummerischen Werten zusammen, welche als Integer- oder Float- Zahlentyp vorliegen. Es ist nicht erforderlich, dass die Schnittstelle dazu in der Lage ist, die Positionswerte oder den Datentypen zu verarbeiten. Wichtig ist lediglich, dass die Koordinaten unverfälscht in Form von drei Zahlenwerten am Zielpunkt ankommen und dass man auf Seiten der Anwendung noch weiß, welchem Achsenabschnitt sie jeweils zuzuordnen sind.


Kompatibilität zu beiden Programmteilen

Das Programm zur Berechnung der Raumkoordinate und die 3-D- Anwendung werden mit unterschiedlichen Programmiersprachen und Entwicklungswerkzeugen realisiert. Für die Schnittstelle bedeutet das, dass sie von beiden Programmteilen unterstützt werden muss, da sie sich sonst nicht einbinden lässt.


OSC & VRPN



OSC

Das OSC- Protokoll (Open Sound Control) ist ein Kommunikationsprotokoll, das ursprünglich für die Übertragung von Audiosignalen elektrischer Musikinstrumente wie Synthesizer entwickelt wurde. Die Steuersignale von OSC können auf Hardware- und Softwareebene übermittelt werden und lassen sich dazu nutzen, Informationen zwischen Programmen, Controllern oder aber Computern auszutauschen.

Die Daten werden als OSC- Nachrichten in Paketen verpackt und vom Client an den Server übertragen. OSC ist nicht an ein bestimmtes Netzwerkprotokoll gebunden. Der Transfer kann somit über TCP oder eine serielle Schnittstelle erfolgen. In der Regel wird jedoch UDP verwendet, was einen verhältnismäßig hohen Datendurchsatz erlaubt. Hierbei müssen jedoch Abstriche bei der Sicherheit der Übertragung gemacht werden, da die Pakete auf Seiten des Empfängers nicht auf Vollständigkeit und Fehlerfreiheit überprüft werden.


VRPN

Das Virtual- Reality Peripheral Network (VRPN) dient normalerweise dazu, Positionswerte von einem Tracker – das ist ein Gerät zur Erfassung der Lage im Raum – an eine 3-D- Engine zu übermitteln. In Kombination mit einem Tool wie „Opentracker“, das ein solches Gerät simulieren kann, ließe sich VRPN auch für das Interaktionssystem nutzen.

Der große Vorteil von VRPN ist, dass es von den meisten 3-D- Engines unterstützt wird. So verfügen diese in der Regel über Module, mit denen sich diese Schnittstelle leicht in die jeweilige Anwendung einfügen lässt.


Entscheidung zugunsten von OSC

VRPN ist für das Interaktionssystem kaum geeignet, da es sich nicht ohne weiteres in das verwendete Bildverarbeitungsprogramm EyesWeb einbinden lässt. So müsste von Hand eine Netzwerkschnittstelle aufgesetzt und ein Opentracker implementiert werden. Zwar gibt es hierfür Bibliotheken und Toolkits (z.B. von Studierstube), doch sind diese schlecht dokumentiert und somit lässt sich kaum abschätzen, ob die Einbindung in EyesWeb überhaupt möglich ist.

Für OSC existieren hingegen sowohl für das Bildverarbeitungsprogramm, als auch für die 3-D- Engine vorgefertigte Plugins, mit denen die Einrichtung einer Schnittstelle auf Basis dieses Protokolls problemlos möglich ist. Da das OSC- Kommunikationsprotokoll in Verbindung mit UDP zudem sämtliche Anforderungen erfüllt, die an die Schnittstelle gestellt werden, ist es ideal dazu geeignet, die Daten vom Positionsberechnungs- Programm zur 3-D- Anwendung zu übertragen.


Das Interaktionssystem

Verwendete Software

ARToolKit

ARToolKit ist ein kostenloses Toolkit für die Entwicklung von Augmented Reality Anwendungen.

Im Rahmen der Diplomarbeit wird es dazu verwendet, die intrinsischen Parameter der Webcams zu ermitteln. Weiterhin bildet die ARToolKit- Bibliothek mit den Funktionen zur Detektion von Positionsmarkern die Grundlage des Programmteils zur Konfiguration des Kamerasystems bzw. zur Bestimmung der extrinsischen Parameter.


Augmented Reality



Augmented Reality bedeutet soviel wie „erweiterte Realität“ und beschreibt im Allgemeinen die Ergänzung der reellen Welt durch virtuelle, interaktiv steuerbare Objekte.

Für die praktische Anwendung bedeutet dies, dass dreidimensionale Elemente am Rechner erzeugt und bereits bei der Aufnahme in das Videobild einer Kamera eingebettet werden. Dabei lehnt sich die Position und die Orientierung der Objekte an die Perspektive des reellen Raums an, sodass die virtuelle Welt und die reale Umgebung im direkten Bezug zueinander stehen.


Vergleich: ARToolKit und ARToolKit Plus



ARToolKit ist in zwei Versionen erhältlich, welche jeweils einer anderen Philosophie folgen und auf unterschiedliche Verwendungszwecke ausgelegt sind.


ARToolKit

Das umfangreiche ARToolKit beinhaltet neben der Programmbibliothek zur Markerdetektion auch einige Beispielanwendungen und Utilities zur Kamerakalibrierung. Es verwendet die Grafikbibliotheken GLUT und OpenGL und bietet dem Anwender somit eine in Echtzeit steuerbare grafische Oberfläche mit 3D Elementen. Die Programmierung erfolgt in C.


ARToolKit Plus

Die Version ARToolKit Plus bietet eine wesentlich kleinere Auswahl an Funktionen zur Markerdetektion und Videokontrolle. Sie basiert auf der API C++ und kann auf der Homepage von Studierstube heruntergeladen werden.

Dank der Kompatibilität zur Kamera-Kalibrierungstoolbox von MATLAB und der robusten Trackingverfahren liefert ARToolKit Plus zuverlässigere Ergebnisse, gilt jedoch nicht als Weiterentwicklung, da es speziell für Systeme mit schwacher Leistung wie Handhelds bzw. PDAs entwickelt wurde und nicht den vollen Funktionsumfang von ARToolKit bietet.

Beide Versionen sind kompatibel zu den Betriebssystemen Windows, Linux und OSX und lassen sich durch wenige Handgriffe an jede dieser Plattformen anpassen.


Vor- und Nachteile


Vorteile

ARToolKit ARToolKit Plus
  • einfache API ( C )
  • bietet grafische Oberfläche<br\>
- Grafikbibliothek GLUT<br\>
- OpenGL- Rendering<br\>
- Unterstützung von VRML
  • Verwendung mehrerer Kameras möglich
  • unterstützt verschiedene Kameratypen und Datenports
  • beinhaltet Utilities, Beispielanwendungen und Programme zur Kalibrierung der inneren Kameraparameter
  • klassenbasierte API ( C++ )
  • gleichzeitig bis zu 4096 Marker möglich
  • automatische Anpassung des Threshold
  • Unterstützung von Low-End Systemen
  • Direktimport von MATLAB Dateien
  • stabiles Tracking


Nachteile

ARToolKit ARToolKit Plus
  • Markererkennung / Tracking in Grenzbereichen fehlerhaft
  • Gimbal- Lock bei Eulerwinkeln und Rotationsmatrizen
  • 3D Grafiken stellen hohe Anforderungen an das System
  • bei Verwendung von MATLAB:
Konvertierung in ARToolKit- Datenformate notwendig
  • wird nicht mehr weiterentwickelt
  • keinerlei Dokumentation oder Support
  • grafische Oberfläche nicht vorhanden
  • sehr gute Fachkenntnisse in C++ erforderlich
  • VRML wird nicht unterstützt


Für das Verfahren zur Positionsermittlung ist das umfangreiche ARToolKit trotz kleinerer Schwächen bei der Markererkennung besser geeignet, da es im Gegensatz zu ARToolKit Plus ausreichend – wenn auch nicht vollständig – dokumentiert ist und dank OpenGL und GLUT die Möglichkeit zur Darstellung von 3D Objekten bietet.


Funktionsweise von ARToolKit- Programmen



Markerdetektion

ARToolKit ermittelt unter Zuhilfenahme der inneren Kameraparameter aus dem Videobild die Position und Orientierung von quadratischen Positionsmarkern im reellen Raum in Relation zur aufzeichnenden Kamera.

Hierzu vergleicht das Programm die Unterschiede zwischen der Abbildung der Positionsmarker und Referenzmodellen, die im System hinterlegt sind. Aus dem Grad der perspektivischen Verzerrung, dem Größenunterschied und der Rotationslage lassen sich Marker- und Kameraposition berechnen.


Markerdetektion


(*) Beispielhafte Abbildung: Das Referenzmuster ist nicht als Bild, sondern in Form von nummerischen Werten im System gespeichert.


Darstellung virtueller 3-D- Objekte im Videobild

Darstellung von 3-D- Objekten im Videobild

Wie zuvor beschrieben, verfügt ARToolKit über die Möglichkeit, dreidimensionale Objekte direkt im Videobild zu platzieren. Dies geschieht durch die Verwendung von OpenGL in Kombination mit GLUT.


OpenGL

OpenGL (Open Graphics Library) ist eine von Plattform und Programmiersprache unabhängige Grafikbibliothek und dient der Entwicklung von 3-D- Computergrafiken.

OpenGL Funktionen sind auf Echtzeit- Rendering Anwendungen wie 3-D- Spiele ausgelegt und werden meist von der Grafikkarte ausgeführt, wenn die dafür notwendigen Treiber installiert sind. Fehlen die Befehlsroutinen für den Grafikchip, so müssen die Arbeiten vom Hauptprozessor übernommen werden, was zulasten der Systemleistung geht.

Da OpenGL eine reine Grafikbibliothek ist, beinhaltet sie weder einen Rendering- Kontext, noch Funktionen zur Fenster- oder Pufferverwaltung. Diese Aufgaben werden daher von einer Systemschnittstelle wie GLUT, WGL oder SDL übernommen.


GLUT

GLUT (OpenGL Utility Toolkit) ist eine plattformunabhängige Bibliothek zur Erstellung und Verwaltung von Fenstern und Rendering- Kontexten. Hierbei ist es möglich, mit GLUT einfache Objekte wie Würfel, Zylinder oder Kugeln in das Ausgabefenster zu zeichnen. Zudem beinhaltet es Routinen zur Verwaltung von Key- Events der Tastatur und der Maus.

Die Schnittstelle wird zwar seit Jahren nicht mehr weiterentwickelt, reicht für die Darstellung der 3-D- Elemente im Ausgabefenster jedoch vollkommen aus.

Für jedes Videofenster legt GLUT ein eigenen Rendering- Kontext an, der unter anderem die Perspektive des Bildausschnittes und die Lage der Kamera bestimmt. Wird zwischen den Kameras gewechselt, so muss der Kontext des Fensters entsprechend angepasst werden.


Bezugssysteme: Marker & Kamera

Bei den Bezugssystemen unterscheidet man in ARToolKit zwischen dem Kamera- und dem Markersystem. Beide Arten stellen das körperfeste System des jeweiligen Objektes im Raum dar und können gleichermaßen als Laborsystem verwendet werden. Ein Wechsel zwischen den Bezugssystemen ist durch die Invertierung der ARToolKit- Transformationsmatrix bzw. eine Koordinatentransformation jederzeit möglich.


Verhältnis zwischen Kamera / Positionsmarker und Bezugssystem

Körperfestes System Marker Kamera
Basis im Zentrum des Markers im Fokuspunkt des Kameraobjektives
x- Achse vom Symbol ausgehend nach rechts gerichtet nach unten gerichtet
y- Achse vom Symbol ausgehend nach oben gerichtet nach rechts gerichtet
z- Achse steht senkrecht auf der Markerebene verläuft entlang der optischen Achse


Vor der Ermittlung der Transformationsmatrizen durchläuft jedes Kamerabild eine Funktion, welche die radialen Verzeichnungen des Objektives nachträglich rechnerisch korrigiert. Werden die daraus resultierenden Idealen Bildkoordinaten in anderen Programmen verwendet (z.B. zur Bildverarbeitung) , so ist darauf zu achten, dass die Korrektur der Linsenverzerrung auch dort erfolgen muss, da sich die idealen Pixelkoordinaten von denen des aufgezeichneten Kamerabildes in der Regel stark unterscheiden.


Grundlegender Programmablauf

  1. Der Videostream wird von der Kamera aufgezeichnet und an den PC übermittelt.
  2. ARToolKit durchsucht jedes einzelne Bild nach quadratischen Flächen / Markern.
  3. Wird ein Quadrat im Videobild gefunden, so berechnet das Programm aus dessen Lage, Größe, Perspektive und Muster die Positionen und Orientierung der Kamera im reellen Raum in Relation zu diesem Quadrat.
  4. Ist die Lage der Kamera bekannt, so wird deren virtuelles Ebenbild im 3-D- Raum erstellt.
  5. Die Identifikation der Marker erfolgt über unterschiedliche Symbole, die sich innerhalb der Quadrate auf den Positionsmarkern befinden.
  6. 3-D- Objekte werden mit den Transformationsmatrizen der Positionsmarker versehen, sodass sie mit den Objekten im reellen Raum perspektivisch übereinstimmen.
  7. Die dreidimensionalen Körper werden in Echtzeit im Videobild dargestellt.


Markerdetektion und Platzierung von virtuellen 3-D- Objekten

Markerdetektion und Platzierung von virtuellen 3-D- Objekten


Programmstruktur

Programmstruktur


Grenzen der Markererkennung



Sichtbarkeit

Der Positionsmarker muss sich für den Tracking- Vorgang im Sichtfeld der Kamera befinden und darf nicht verdeckt sein. Weiterhin müssen die Lichtverhältnisse so bestimmt sein, dass sich der Rahmen und das Symbol des Markers im Binärbild des Videostreams deutlich vom Hintergrund abheben.

Die Erkennung der Orientierung des Positionsmarkers im Raum erfolgt über das Symbol und die Eckpunkte des quadratischen Rahmens. Aus diesem Grund darf der Winkel zwischen der Kamera und dem Marker nicht zu flach sein, da das System bei einem Winkel unterhalb von etwa 20° Probleme beim Erkennen der Muster hat.

Reichweite

Die Reichweite bei der Markerdetektion hängt zum Teil von der Auflösung der Kamera ab. Je weiter ein Objekt entfernt ist, desto kleiner erscheint es auf dem Videobild. Dementsprechend stehen auch weniger Pixel bzw. Bildinformationen für die Mustererkennung zur Verfügung. Dieser Effekt verstärkt sich, wenn die Kamera nicht senkrecht auf den Marker blickt. Im Extremfall wäre bei einem sehr flachen Winkel in Verbindung mit einer geringen Auflösung auf dem Videobild nur eine dünne Linie, nicht aber der Marker zu erkennen.

Weiterhin spielt die Komplexität des Markersymbols eine entscheidende Rolle. Besteht das Muster aus feinen Linien, so können diese ab einer gewissen Distanz auf dem Kamerabild nicht mehr detektiert werden.


Größe des Positionsmarkers

Der Interaktionsraum, der durch die Reichweite des Systems begrenzt ist, lässt sich durch die Vergrößerung des Markers deutlich erweitern.

Größe des Positionsmarkers

EyesWeb

EyesWeb ist eine OpenSource Software zur Realisierung von Bildverarbeitungssystemen. Das Programm wurde am „Laboratorio di Informatica Musicale“ der Universität von Genua für die wissenschaftliche Forschung entwickelt und dient bei der Realisierung bei der Positionserfassung dazu, mit Hilfe verschiedener Bildverarbeitungsverfahren die gesuchten Bildpunkte aus den Videos zu extrahieren. Zudem erfolgt in EyesWeb die Berechnung der Raumkoordinate über sog. Funktionsblöcke, die zuvor in Microsoft Visual C++ 6.0 implementiert und in die Bibliothek des Programms eingebunden werden.


Vorgehensweise bei der Bildverarbeitung



Die Bildverarbeitung ist ein Teilbereich der Mustererkennung und dient dazu, gezielt bestimmte Bildinhalte wie beispielsweise eine Farbe oder den Schwerpunkt einer Fläche zu erkennen, diese einzugrenzen und nachfolgend als verwertbare visuelle Informationen zur Verfügung zu stellen. In der Praxis müssen Mustererkennungssysteme oftmals trainiert werden, bevor sie einsatzbereit sind. In der sog. Lernphase erfolgt wiederholt die Übergabe eines Referenzmodells an das System, welches bei jedem Trainingsdurchlauf die markanten Merkmale des Musters extrahiert, einer zuvor festgelegten Klasse zugeordnet und miteinander vergleicht. Die Wiederholung des Lernprozesses dient dazu, möglichst robuste Referenzdaten für die Objekterkennung aus der Summe der Messwerte zu erhalten. Kennt das Bildverarbeitungssystem die entscheidenden Merkmale des zu extrahierenden Objektes, so folgt die Arbeitsphase, welche sich in der Regel aus mehreren Arbeitsschritten zusammensetzt.


Schritte der Bildverarbeitung

Schritte der Bildverarbeitung


Aufbau der Programmoberfläche



EyesWeb- Programmoberfläche


Eyesweb programmoberflaeche.jpg


Die Programmoberfläche von EyesWeb ist in drei Bereiche unterteilt. Auf der linken Seite befindet sich eine Bibliothek mit Programmblöcken, welche die Funktionalität des Bildverarbeitungstools beinhalten. Rechts davon liegt eine Ebene, in der die Funktionsblöcke platziert und miteinander verbunden werden. Am unteren Rand der Anwendung erstreckt sich ein Informationsfenster, über das der aktuelle Programmstatus ausgegeben wird.


Realisierung eines EyesWeb- Programms



Um ein Bildverarbeitungsprogramm zu erstellen, müssen die benötigten Programmblöcke aus der Bibliothek gewählt und auf der Ebene rechts davon platziert und vernetzt werden.

Der Ablauf des Bildverarbeitungsprogramms wird durch die Reihenfolge Bestimmt, in der ein Parameter die Funktionsblöcke durchläuft. Dies schließt jedoch nicht aus, dass mehrere Prozesse zeitgleich ablaufen können. So ist es möglich, ein extrahiertes Merkmal im Videobild durch eine optische Markierung hervorzuheben und parallel dazu den nummerischen Wert dieses Merkmals über eine Schnittstelle an ein anderes Programm zur Weiterverarbeitung zu übertragen.


Ausgabe des Videobildes am Bildschirm

Beispiel

Die Ausgabe des unveränderten Videobildes lässt sich mit dem „Framegrabber“ und dem „Display“ realisieren, welche über eine Schnittstelle miteinander verbunden werden.

Hierbei holt sich der Framegrabber den Videostream von der Webcam und leitet die Bildinformationen an das Display weiter, welches automatisch ein neues Fenster für die Ausgabe des Kamerabildes erstellt und nachfolgend verwaltet.


Unterstützung von OSC



EyesWeb verfügt über einen vorgefertigten Programmblock, der eine Netzwerkschnittstelle mit dem OSC- Kommunikationsprotokoll beinhaltet. Dieser stellt zusammen mit dem OSC- Plugin von Virtools einen einfachen und unkomplizierten Weg zur Datenübertragung dar, da es nicht notwendig ist, einen eigenen Programmblock für eine Schnittstelle (z.B. auf Basis von VRPN) zu implementieren.

Die Verwendung des OSC- Kommunikationsprotokolls in Verbindung mit der vorgefertigten Netzwerkschnittstelle ermöglicht eine Zeitersparnis von zwei bis drei Wochen.

Der daraus gewonnene Zeitgewinn ist sinnvoller genutzt, wenn er für die Optimierung der Funktionen zur Positionserkennung und Kamerakalibrierung verwendet wird, da sich hierdurch die Störanfälligkeit des Systems deutlich vermindern lässt.


Virtools

Das französische Softwareprogramm Virtools ist eine Kombination aus einer echtzeitfähigen 3-D- Engine und einer Entwicklungsumgebung für 3-D- Anwendungen.

Virtools wird zur Realisierung des Anwendungsbeispiels verwendet, da mit diesem Tool im Vorfeld der Arbeiten bereits Erfahrungen gesammelt wurden und da es über ein spezielles Plugin für den Import von OSC- Nachrichten über eine UDP- Netzwerkschnittstelle verfügt.

Da das Programm keine Möglichkeit zur Objektmodellierung bietet, müssen die dreidimensionalen Polygonkörper mit Modellierungswerkzeugen wie Cinema4D oder 3D Studio Max erstellt und über die Importfunktion in die Szene eingebunden werden. Die Programmierung der 3-D- Anwendung erfolgt über die Vernetzung von Programmblöcken, welche das Verhalten der Szene inklusive der darin enthaltenen Objekte bestimmen.

Virtools unterscheidet sich entsprechend des Verwendungszwecks grundlegend von Modellierungstools wie Cinema4D und 3ds Max. So ist die Engine auf die Hardware des Systems ausgerichtet und beinhaltet Einstellungsoptionen, die gezielt auf die Fähigkeiten der Grafikkarte des Rechners zugreifen.


Aufbau der Programmoberfläche



Virtools- Programmoberfläche


Virtools- Programmoberfläche


Die Virtools- Programmoberfläche ist – ebenso wie Eyesweb – in drei Bereiche unterteilt. Hierzu zählen die 3-D- Vorschau, die Bibliothek und der Level Manager.

Die 3D-Vorschau erlaubt es dem Nutzer, schon während der Entwicklungsphase, Einblick in die spätere 3D Anwendung zu erhalten. Links davon befindet sich ein Menü, über das Änderungen an Szenenobjekten vorgenommen werden können. Die rechte Seite der Oberfläche beinhaltet eine Bibliothek mit den sog. "Building Blocks", den Programmblöcken. Dies sind vordefinierte Funktionsbausteine, die in der Regel über mehrere Ein- und Ausgänge, sowie Schnittstellen zur Parameterübergabe verfügen. Wird im unteren Bereich über den Level Manager ein Script erzeugt, so erscheint dieses in der Schematic Anzeige. Die Programmblöcke aus der Bibliothek lassen sich per Drag & Drop im Script ablegen und miteinander vernetzen. Über die Wahl eines Objektes im Level Manager werden dessen Einstellungsmöglichkeiten aufgerufen. Diesen Elementen sind beispielsweise 3D-Objekte, Meshes, Lichtquellen, Materialien oder aber Texturen zuzuordnen.

Die Implementierung des Programmverhaltens folgt dem gleichen Prinzip wie EyesWeb. Die Funktionsblöcke werden auch hier der Bibliothek entnommen, auf einer Ebene platziert und miteinander verbunden.


OSC- Plugin



Die Entwicklungsumgebung verfügt von Grund auf über eine ausreichende Anzahl an Funktionen und lässt sich durch Module beliebig erweitern. Im offiziellen Infernetforum von Virtools ist ein kostenloses Plugin für eine OSC- Schnittstelle zu finden. Der Anbieter übernimmt zwar keine Gewährleistung für die Fehlerfreiheit des Produktes, doch haben Tests gezeigt, dass die Schnittstelle zuverlässig arbeitet.

Die Verwendung des OSC- Plugins ermöglicht den Transfer der Positionsdaten von Eyesweb nach Virtools. Die Einbindung der Schnittstelle ist hierbei sehr einfach durchzuführen, da lediglich die Ports der Netzwerkschnittstelle und die localhost- Adresse (127.0.0.1) anzugeben sind.


Bestandteile einer 3-D- Szene



Aus Kapitel 4 ist bekannt, dass sich die Szene einer 3-D- Anwendung Im Wesentlichen aus einer Ansammlung von Objektkörpern zusammensetzt, welche als Charaktere entweder bestimmte Funktionen übernehmen oder aber in Form von Hintergrundobjekten zur Ausgestaltung der virtuellen Umgebung dienen.

Neben den Objektkörpern sind in einer solchen Szene aber auch eine oder mehrere Lichtquellen anzutreffen, welche über verschiedene Einstellungsmöglichkeiten verfügen und das Erscheinungsbild des Raumes maßgeblich prägen.


3-D- Objekte

3-D- Körper setzen sich aus einer oder mehreren zweidimensionalen Flächen – auch Polygone genannt – zusammen. Diese haben jeweils drei Eckpunkte bzw. Vertices, welche unterschiedliche Positionen im Raum einnehmen und zusammen ein Dreieck aufspannen. Ein geschlossener Verbund aus mehreren Polygonen wird als 3-D- Körper oder Mesh bezeichnet. Auf diesem liegen die Materialien, welche mit Texturen und Oberflächeneffekten bestückt sind und die Außenhaut des dreidimensionalen Körpers bilden. Allgemein kann man also sagen, dass ein 3-D- Objekt aus einem Verbund hierarchisch gestaffelter Eigenschaften besteht, welche das Aussehen, die Form und die Lage im Raum definieren. Die Modellierung der 3-D- Objekte erfolgt in Cinema4D, einem Tool, mit dem bevorzugt Animationen und Filmeffekte erstellt werden. Der volle Funktionsumfang von Cinema4D muss hierbei jedoch nicht genutzt werden, da im Rahmen des Anwendungsbeispiels lediglich zwei Objekte aus einfachen Grundkörpern zu erstellen sind.

Zum einen ist das der Hintergrund der Anwendung und zum anderen das Objekt, auf das die Positionswerte der Raumkoordinate übertragen werden.

Das Modellierungsprogramm spielt somit eine untergeordnete Rolle und wird in dieser Arbeit dementsprechend nur am Rande behandelt.


Objektoberfläche / Material

Wird ein Objektkörper an Virtools übergeben, so gehen die Texturen und Oberflächeneffekte des Materials verloren, da diese an das Modellierungsprogramm gebunden sind und beim Export nicht in die Datei eingebettet werden.

Das Material als solches bleibt hingegen mit allen weiteren grundlegenden Eigenschaften erhalten und muss lediglich neu mit Grafiken bestückt werden.

Die Übernahme von Oberflächeneffekten aus Cinema4D oder 3D Studio Max ist in der Regel nicht möglich, da sie unterschiedliche Rendermethoden und Effektfilter verwenden, welche nicht übertragbar sind. Dies ist darauf zurückzuführen, dass durch die Verwendung von Modellierungstools grafisch hochwertige Ergebnisse erzielt werden sollen, 3-D- Engines hingegen auf die Echtzeit- Grafikverarbeitung ausgelegt sind.

In Virtools erfolgt die Einbindung von Texturen per Drag & Drop. Zieht man eine Grafik in die Programmoberfläche, so wird automatisch eine Kopie des Bildes erzeugt, welche beim Speichern der Szene mit allen anderen Informationen in einer „cmo“- Kompositionsdatei zusammengefasst wird. Nach der Einbindung werden die importierten Texturen über ein Material Setup- Menü den jeweiligen Materialien zugeordnet. In den Einstellungen lassen sich hierbei Justierungen am Lichtverhalten, den Oberflächeneffekten und der Transparenz vornehmen.


Lichtquellen

Das Setzen von Lichtquellen in Virtools ist mit Einschränkungen verbunden, da das Programm je nach Systemkapazitäten meist nur acht – in Sonderfällen auch mehr – aktive Lichter zulässt.

Die unvollständige Dokumentation von Virtools trägt dazu bei, dass sich kaum abschätzen lässt, welche Mindestanforderungen an den Rechner gestellt werden, um die gewünschte Anzahl von Lichtquellen gleichzeitig darstellen zu können.

Weiterhin unterscheidet sich eine virtuelle Lichtquelle vom Verhalten realen Lichtes. So bestimmt unter anderem das Render- Device, wie die Beleuchtung der Szene letztendlich aussieht. Betrachtet man DirectX und OpenGL, so weisen diese in Bezug auf Schattenwurf, Beleuchtungsweite und Lichtfarbe starke Diskrepanzen auf.


Funktionsweise

Funktionsweise


Positionsbestimmung

Konfiguration des Kamerasystems

Intrinsische Kameraparameter



Die Bestimmung der inneren Kameraparameter wird mit Hilfe zweier ARToolKit- Utilities durchgeführt. Diese ist für jede der beiden Kameras durchzuführen und setzt sich aus folgenden Arbeitsschritten zusammen.


Ermitteln der Linsendistortion

Zunächst werden mit Hilfe des Tools „calib_dist“ die Distortionswerte der Linse für eine bestimmte Auflösung und Brennweite ermittelt. Diese sind zu notieren und nachfolgend in die Programmkonsole des Utilitys „calib_cparam“ einzutragen.

Übergabeparameter

- Bildgröße in Pixel (die Distortionswerte sind abhängig von der verwendeten Bildgröße)
- Distortionszentrum im Videobild
- Distortionsfaktor
- Scale- Faktor


Bestimmen der Projektionsmatrix

Im zweiten Schritt bestimmt man mit dem Programm „calib_cparam“ für die gleiche Auflösung die Projektionsmatrix der Kamera. Hierzu ist es notwendig, die Distortionswerte per Hand in die Programmkonsole einzutragen, sodass die radialen Verzeichnungen die Berechnungsergebnisse für die Brennweite und die anderen Parameter nicht verfälschen.

Übergabeparameter

- Distortionswerte (werden aus „calib_dist“ übernommen)
- Bildgröße in Pixeln
- Projektionsmatrix


Speichern der intrinsischen Parameter

Die perspektivische Projektionsmatrix wird mit der Bildgröße und den Werten der Distortion in einer Struktur zusammengefasst und in einer Parameterdatei abgespeichert.


Parameterdateien

Webcam 1 <Arbeitsumgebung>\Data\camera_para1.dat
Webcam 2 <Arbeitsumgebung>\Data\camera_para2.dat


Extrinsische Parameter & Sichtfeld der Kamera



Nach jeder Neupositionierung der Kameras sind die äußeren Parameter und der Hilfswert für die Positionsberechnung über ein eigens implementiertes C- Programm zu bestimmen. Dieses verwendet die ARToolKit- Bibliothek und ermittelt auf Basis der inneren Parameter über die Detektion eines Positionsmarkers die Standorte und Sichtfelder der Webcams.

Eine grafische 3-D- Oberfläche auf Basis von GLUT und OpenGL soll hierbei die Ausrichtung der Kameras erleichtern. Gleichzeitig dient sie dazu, Fehlerquellen auszuschalten, da der Anwender über mehrere optische Hilfsmittel die Möglichkeit hat, eine Sichtkontrolle durchführen zu können.


Import der Parameter- und Konfigurationsdateien

Der Import der Parameter- und Konfigurationsdateien erfolgt ebenso wie die Initialisierung beider Kameras und die Identifikation des Positionsmarkers automatisch durch das System.


Parameter- und Konfigurationsdateien


Webcam 1

Identifikation <Arbeitsumgebung>\Data\WDM_camera_flipV1.xml
Parameter <Arbeitsumgebung>\Data\camera_para1.dat


Webcam 2

Identifikation <Arbeitsumgebung>\Data\WDM_camera_flipV2.xml
Parameter <Arbeitsumgebung>\Data\camera_para2.dat


Positionsmarker

Identifikation <Arbeitsumgebung>\Data\patt.<markername>


Ermitteln der extrinsischen Parameter

Nach Programmstart durchsuchen die Funktionen aus der ARToolKit- Bibliothek das Videobild der ersten Kamera nach dem Positionsmarker. Befindet sich dieser deutlich sichtbar im Blickfeld der Webcam, so ist das System dazu in der Lage, über verschiedene Berechnungen die Position, die Rotationslage und das Sichtfeld der Kamera in Relation zum Positionsmarker zu ermitteln. Dieser Vorgang wird laufend ausgeführt, sodass der Anwender die Ausrichtung der Webcam am Bildschirm mitverfolgen und kontrollieren kann.

Wurde der Standort für die erste Kamera gewählt, so wird nun auf die andere Webcam umgeschaltet und auf die gleiche Weise verfahren. Durch einen Blick auf die 3-D- Darstellung wird abschließend kontrolliert, ob die Ausrichtung der Kameras korrekt durchgeführt wurde. Das Programm speichert bei der Betätigung der Eingabetaste auf der Tastatur alle Werte in einer Datei ab, die für die nachfolgende Berechnung der Raumkoordinate benötigt werden.

Übergabewerte für die Positionsberechnung

- Bildgröße in Pixeln
- Durchstoßpunkt der optischen Achse durch das Videobild
- Distortionswerte
- Transformationsmatrix
- Größe des Sichtfeldes für den Abstand zwischen der Kamera und dem Positionsmarker


Speichern der Werte für die Positionsberechnung

Für jede Webcam wird eine eigene Export- Struktur angelegt, welche die extrinsischen Parameter der Kamera in Relation zum Positionsmarker beinhaltet. Weiterhin sind in der Struktur alle Variablen für die Positionsberechnung abgelegt. Hierzu zählen das Sichtfeld für den Abstand zwischen der Kamera und dem Positionsmarker, die Distortionswerte, die Pixelposition des Durchstoßpunktes der optischen Achse im Ausgabebild und die Bildgröße. Beide Strukturen werden zusammen in einer Datei abgelegt.


Export- Datei mit den Berechnungswerten

Berechnungsvariablen für beide Kameras <Arbeitsumgebung>\Data\camera_data.dat


Steuerung der Anwendung

Ausrichtung der Kameras 
- [1] [2]     aktive Kamera wechseln
- [ENTER]     Berechnungsvariablen speichern
- [TAB]       Berechnungsvariablen auslesen
 
Steuerung der 3-D- Ansicht 
- Tastenkontrolle *
  [a] [d]     3D Ansicht horizontal drehen
  [q] [e]     3D Ansicht vertikal drehen
  [w] [s]     3D Ansicht zoomen
  [x]         3D Ansicht zuruecksetzen
- Maus
  Mausbewegung bei gedrückter linker Taste     3D Ansicht drehen
  Mausbewegung bei gedrückter rechter Taste    3D Ansicht zoomen 

Anwendung schließen 
- [ESC]       Alle Prozesse beenden und Programm herunterfahren

(*) Die Steuerung über die Tastatur ist erst dann möglich, wenn sie zuvor über die Variable „key_control“ im Quellcode freigeschaltet wurde.


Funktionsweise der grafischen Oberfläche


Aufbau

Die Programmoberfläche setzt sich aus dem 3-D- Ausgabefenster und der Programmkonsole zusammen.

Das 3-D- Ausgabefenster besteht aus der 3-D- Ansicht, dem Videobild der aktiven Kamera und einem Textfeld mit Angaben über die Kamerapositionen. Über die Programmkonsole erfolgt die Ausgabe aller Informationen, welche für die Steuerung des Programms und für die nachfolgende Berechnung der gesuchten Raumkoordinate von Bedeutung sind.


Programmoberfläche


Programmkonsole

Über die Programmkonsole erhält der Anwender Einsicht in den Programmstatus und die Berechnungsvariablen bzw. Parameter.

Bildschirmausgabe
- Intrinsische Kameraparameter für beide Webcams
- Extrinsische Kameraparameter für beide Webcams
- Tastenbelegung
- Systemstatus
   - Initialisierung der Kameras
   - Datei mit Berechnungsvariablen öffnen / speichern
   - Fehlermeldungen
   - Programm herunterfahren


3-D- Ansicht

Die 3-D- Ansicht gibt Aufschluss über die Position und die Blickrichtung der beiden Webcams. Sie beinhaltet zudem mehrere Elemente, wie die Achsen des Laborsystems oder das Raster, die dazu dienen, dem Anwender die Ausrichtung der Kameras auf den Positionsmarker zu erleichtern.


Elemente der 3-D- Ansicht


Videobild

Das Videobild gibt das Blickfeld der aktiven Webcam wieder. Ebenso wie die 3-D- Ansicht hat es die Aufgabe, den Anwender bei der Ausrichtung der Kameras zu unterstützen. Hierzu verfügt es mit den Kontrollpunkten und den Achsen des Laborsystems über zwei Hilfsmittel, die in das Videobild eingebunden werden und dazu dienen, die Fehlerfreiheit bei der Detektion des Markers sicherzustellen.


Elemente im Videobild


Textfeld

Anzeige der Kamerapositionen


Koordinatenextraktion

Die Extraktion der Raumkoordinate erfolgt in EyesWeb durch die Kombination von Programmblöcken zur Bildverarbeitung und Positionsberechnung.


EyesWeb- Programm zur Extraktion der Raumkoordinate (für blaue Objekte)


Pixelpositionen der Bildpunkte



Die Bildverarbeitungsverfahren wurden für das Anwendungsbeispiel so gewählt, dass sich der Schwerpunkt eines blauen, roten oder grünen Objektes im Kamerabild detektieren lässt.

Weiterhin wurde ein Programmblock auf Basis von OpenCV entwickelt, mit dem sich die Fingerspitze des Anwender detektieren lässt. Dieser ist in der EyesWeb- Bibliothek zu finden und kann bei Bedarf in das Programm eingebunden werden.

Nachfolgend wird die Funktionsweise für die Detektion eines blauen Referenzobjektes beschrieben.


Schritte der Bildverarbeitung


Entfernen von störenden Bildelementen

Bei Bedarf kann eine Hintergrundsubtraktion durchgeführt werden. Dies ist immer dann sinnvoll, wenn störende Elemente mit der Farbe des gesuchten Objektes nicht aus dem Sichtfeld der Kamera entfernt werden können.

Wird zu Beginn des Bildvearbeitungsprozesses ein Screenshot des Videobildes erstellt, so entfernt das Programm die dabei aufgezeichneten Bildinhalte aus allen nachfolgenden Frames. Hierbei muss jedoch bedacht werden, dass das Objekt in der Regel nicht detektiert werden kann, wenn es sich vor dem störenden Bildelement befindet.


Detektion des gesuchten Objektes im Videobild

Damit das blaue Objekt im Videobild vom Programm detektiert werden kann, müssen im Vorfeld alle Elemente der gleichen Farbe aus dem Sichtfeld der Webcam entfernt werden. Ist dies nicht möglich, so sind die störenden Bildinhalte durch eine Hintergrundsubtraktion zu beseitigen.

Ist dies geschehen, so kann das System durch die Separation des blauen Farbkanals und die Anwendung verschiedener Filter eine Fläche im Binärbild detektieren, welche der Größe der Projektion des gesuchten Objektes entspricht.

Sind im Videobild des Fensters mit der Bezeichnung „Cam1/2 – Threshold“ Störungen in Form von weißem Rauschen zu sehen, so ist der Schwellwert bzw. Threshold über den Schieberegler zu erhöhen. Wird das Objekt hingegen nur zum Teil oder gar nicht im Videobild dargestellt, so muss der Schwellwert vom Anwender gesenkt werden. Grundsätzlich gilt hierbei, dass der Threshold immer dann angepasst werden muss, wenn sich die Lichtverhältnisse im Raum verändern.


Wahl des richtigen Schwellwertes über den Schieberegler

Wahl des richtigen Schwellwertes über den Schieberegler


Über die Parameter in den Programmblöcken zur Separation des Farbkanals lassen sich durch die Wahl des entsprechenden Farbkanals neben den blauen auch rote oder grüne Objekte detektieren. Soll hingegen ein anderes Merkmal aus dem Videobild extrahiert werden, so lässt sich der in der Abbildung gelb markierte Bereich durch ein anderes Verfahren aus der Bildverarbeitung ersetzen.


Ermitteln der Position des Bildpunktes

Wurde das Objekt erfolgreich detektiert, so ermittelt das Programm im nächsten Schritt den Schwerpunkt der weißen Fläche im Binärbild. Hierbei gilt zu beachten, dass der Schwerpunkt dieser Fläche nur im Ausnahmefall mit dem des reellen Objektes übereinstimmt, da der detektierte Gegenstand mitunter stark verzerrt auf die Bildebene der Kamera projiziert wird.

Dies führt zwangsläufig zu Diskrepanzen zwischen den Schwerpunkten der weißen Flächen in den Videobildern der beiden Webcams, da diese aus unterschiedlichen Perspektiven auf das Objekt blicken.

Grundsätzlich gilt, dass die Genauigkeit der Detektion des Schwerpunktes von der Position der beiden Kameras und von der Form und Größe des Referenzkörpers abhängig ist.

Abhilfe kann man hierbei durch die Verwendung einer Kugel als Referenzobjekt schaffen. Ist diese im Videobild vollständig zu sehen, so stimmen deren Schwerpunkt und derjenige der projizierten Kreisfläche in beiden Videobildern überein, unabhängig davon, wie groß die Kugel ist. Hält man einen bestimmten Mindestabstand zu den beiden Webcams ein, so sind kleine Gegenstände mit komplexen Formen ebenso geeignet, da die Lage der Schwerpunkte in den Videobildern aufgrund der kleineren Projektionsfläche nur geringen Schwankungen unterliegt.

Die Positionen der extrahierten Bildpunkte werden in den Videobildern der Fenster „cam1/2 – Bildpunkt“ in Form von kleinen gelben Kreuzen angezeigt.


Raumkoordinaten des Objektes



Die Positionsberechnung erfolgt mit einem Programmblock, welcher in C implementiert und über den EyesWeb Block Creator in die EyesWeb- Bibliothek eingebunden wurde.


Berechnung der Raumkoordinate


Import der Datei mit den Berechnungsvariablen

Zur Berechnung der Raumkoordinate benötigt der Programmblock mit der Bezeichnung „CoordCalc“ die Prameter und Hilfswerte, die zuvor bei der Kamerakalibrierung ermittelt wurden.

Der Pfad zur Datei mit den Berechnungswerten „camera_data.dat“ ist hierfür in das Parameter- Fenster von „CoordCalc“ einzutragen. Wurden die Werte in der Datei im Rahmen einer Neukonfiguration des Kamerasystems überschrieben, so muss EyesWeb neu gestartet werden, damit die Änderungen wirksam werden.

Berechnungsvariablen für beide Kameras <ARToolKit – Arbeitsverzeichnis>\Data\camera_data.dat


Import der Berechnungswerte über das Parameter- Fenster des Blocks „CoordCalc“


Import der Berechnungswerte über das Parameter- Fenster des Blocks „CoordCalc“


Berechnung der Koordinaten

Befindet sich das Objekt im Blickfeld der Kameras und wurde in beiden Videobildern der Schwerpunkt korrekt detektiert, so berechnet der Programmblock „CoordCalc“ die Koordinaten des gesuchten Objektpunktes unter Verwendung des in Kapitel 3 beschriebenen Verfahrens.


Berechnung der Koordinaten


Kippen der Achsen des Laborsystems

Nach der Positionsberechnung lassen sich die Achsen des Koordinatensystems kippen. Dies ist immer dann sinnvoll, wenn sich die Rotationslage des Laborsystems von der des Positionsmarkers unterscheiden soll. Die Lage des Laborsystems lässt sich im Programmblock „FlipKS“ durch die Anpassung des Parameters „quadrant“ verändern.

Quadrant ID Lage des Laborsystems
0 Vertauschen der Achsen [ X ] und [ Z ]
1 Vertauschen der Achsen [ Y ] und [ Z ]
2 Es wird keine Veränderung an den Achsen vorgenommen


Anpassen der Positionswerte


Skalieren der Koordinatenwerte


Bevor die Positionsdaten an die 3-D- Anwendung weitergeleitet werden, besteht die Möglichkeit letzte Anpassungen an den einzelnen Koordinatenwerten vorzunehmen. So lassen sich die Minima und Maxima neu festlegen, die den Rahmen vorgeben, in dem sich die Positionswerte bewegen dürfen. Diese Skalierung ist immer dann vorzunehmen, wenn das Größenverhältnis zwischen dem virtuellen Raum und der reellen Umgebung nicht übereinstimmt.


Schnittstelle

Über eine Netzwerkschnittstelle wird die ermittelte Raumkoordinate an die 3-D- Engine Virtools weitergeleitet. Hierzu werden die drei Koordinaten in OSC- Nachrichten verpackt und über UDP (User Datagram Protocol) an verschiedene Ports der localhost- IP- Adresse gesendet. Befindet sich auf dem Rechner eine aktive Firewall, so sind die Ports 7100, 7200 und 7300 freizuschalten. Zudem darf EyesWeb und Virtools der Zugang zum Netzwerk nicht verwehrt werden.

OSC- Nachricht Port Empfänger IP
x- Koordinate 7100 127.0.0.1
y- Koordinate 7200 127.0.0.1
z- Koordinate 7300 127.0.0.1


3-D- Anwendung

Grafische Elemente des Anwendungsbeispiels

3-D- Szene



Kontrolle des Interaktions- Objekts

In Virtools werden die Positionsdaten zu einem Vektor zusammengefasst, der dann dazu dient, den Standort des Interaktions- Objektes in der virtuellen Welt festzulegen.


Elemente der 3-D- Szene


Interaktions- Objekt

Das 3-D- Objekt, auf das in der Anwendung die Positoinsdaten übertragen werden, besteht aus einem sternförmigen Kernelement und drei lang gestreckten Quadern, welche parallel zu den Achsen des Laborsystems ausgerichtet sind. Diese durchstoßen die drei Hintergrundflächen im 90°- Winkel und dienen als Orientierungshilfe im Raum. Die Farbgebung des Kernelements entspricht der des Laborsystems in ARToolKit.


Hintergrund

Der Hintergrund der 3-D- Szene besteht aus drei Ebenen, welche senkrecht aufeinander stehen und die Ecke eines Raumes bilden. Jede Fläche ist mit einem Raster versehen. Zusammen mit dem Durchstoßpunkt der lang gezogenen Quader des Interaktions- Objektes dient es dazu, die Position des Kernelements besser abschätzen zu können.


Textlabels zur Anzeige der Raumkoordinate

Neben der Funktion zur Steuerung des 3-D- Objektes verfügt das Anwendungsbeispiel über drei Textfelder, an denen der Anwender die einzelnen Koordinatenwerte ablesen kann.


Implementierung

Programmverzeichnis

Vor Beginn der Implementierung wird ein Arbeitsverzeichnis angelegt, in dem sämtliche Funktionen und Programme zusammengefasst werden. An dieser Stelle sind auch die Konfigurations- und Parameterdateien der ARToolKit- Anwendungen zu finden.


Kameraeigenschaften: Auflösung und Framerate

Bei handelsüblichen Webcams sollte eine Auflösung von 352 x 288 Pixel und eine Framerate von 25 - 30 fps gewählt werden. Wird eine niedrigere Auflösung gewählt, so sind die Informationen für die Bildverarbeitung meist nicht ausreichend. Ist sie hingegen zu hoch, so kommt es aufgrund der USB- Schnittstellenauslastung und Schwankungen bei der Bildwiederholfrequenz dazu, dass die Daten unregelmäßig übertragen werden.

Hat man sich für eine Auflösung entschieden, so wird sie ohne Ausnahme für alle Programmteile verwendet.


Konfiguration des Kamerasystems

Verwendete Software
- ARToolKit 2.72
   - calib_dist
   - calib_cparam
- Microsoft Visual C++ 6.0


Intrinsische Parameter

Linsendistortion



Unter den Utilities von ARToolKit befindet sich ein Programm mit der Bezeichnung „calib_dist“, mit dem sich die Distortionswerte einer Digitalkamera ermitteln lassen.

Bevor mit der Kalibrierung begonnen werden kann, ist ein Punktraster auf einen weißen Karton im DinA3- Format auszudrucken. Die Einhaltung dieses Formats ist notwendig, da die im System abgelegten Referenzdaten über den Abstand, die Anordnung und die Gesamtzahl der Punkte mit dem Ausdruck übereinstimmen müssen.

<ARToolKit>\patterns\calib_dist.pdf

Hat man die Kamera angeschlossen und das Raster ausgedruckt, so wird nun das Utility ausgeführt und eine Auflösung von 352 x 288 Pixel in die Eingabemaske eingetragen. Hierbei gilt zu beachten, dass die Distortionswerte nur für diese eine Auflösung gültig sind.


Vorgehensweise bei der Kalibrierung

Für die Bestimmung der inneren Parameter ist die nachfolgend beschriebene Verfahrensweise mehrmals durchzuführen. Hierbei nimmt mit steigender Anzahl der Wiederholungen die Genauigkeit der erzielten Ergebnisse zu, da ein Mittelwert aus allen Durchgängen berechnet wird.

Durch einen Klick mit der linken Maustaste wird ein Screenshot des Videos erstellt, auf dem die einzelnen Punkte nun zeilenweise zu markieren sind. Vor jeder Aufnahme wird dabei die Kamera in einem anderen Winkel auf das Punktraster ausgerichtet, sodass möglichst viele unterschiedliche Perspektiven bei der Berechnung des Distortionswertes berücksichtigt werden. Hierbei ist stets darauf zu achten, dass das Muster vollständig auf dem Screenshot zu sehen ist.


Markierungsreihenfolge


Markierungsreihenfolge


Anmerkung:

Das Ausgabebild springt nach dem Setzen des ersten Markierungspunktes um ein Frame weiter.
Generell stellt dies kein Problem dar, doch wenn die Kamera im Moment der Aufnahme schnell
bewegt wird, weist der Bildausschnitt deutliche Unterschiede auf.

Bei jedem Mausklick erscheint an der Stelle des Cursors ein kleines rotes Kreuz. Dieses muss sich im Zentrum des jeweiligen Punktes befinden, um sicherstellen zu können, dass das Programm möglichst genaue Ergebnisse liefert.

Insgesamt sind für jeden Screenshot 24 Markierungen zu setzen. Der Vorgang ist fünf bis zehn mal zu wiederholen, bevor man das Programm damit beauftragt, die Linsendistortion zu ermitteln. Die Berechnung hierfür kann einige Minuten in Anspruch nehmen.

Abschließend sind die Werte zu notieren, da sie für den nächsten Kalibrierungsschritt benötigt werden.


Hervorhebung der Markierungen


Ergebnisse

Ergebnisse


Die Tabellen zeigen deutlich, dass die Ergebnisse zum Teil starken Schwankungen unterliegen. Diese sind auf eine unterschiedliche Anzahl der Durchgänge und Abweichungen bei der Markierung der Punkte zurückzuführen. Grundsätzlich gilt, dass sich für höheren Auflösungen genauere Werte ermitteln lassen.

Zur Überprüfung der Ergebnisse wird für jeden Screenshot ein Kontrollbild angezeigt. Hierbei zeichnet das Programm rote Linien durch die Markierungskreuze. Schneiden diese alle Rasterpunkte in der Mitte, so war die Kamerakalibrierung für die Linsendistortion erfolgreich.


Extrinsische Parameter & Berechnungs- Hilfswert

Die Ermittlung der äußeren Kameraparameter, sowie die Bestimmung des Sichtfeldes, welches bei der nachfolgenden Positionsberechnung als Hilfswert dient, geschieht über ein eigens implementiertes C- Programm. Dieses nutzt hierfür einen Positionsmarker und baut auf den Bibliotheken von ARToolKit, OpenGL und GLUT auf.

Das C- Programm erfüllt hauptsächlich folgende Aufgaben

- Initialisierung der Kameras und Import aller Konfigurations-
  und Parameterdateien 
- Ermitteln der äußeren Kameraparameter 
- Berechnung der Sichtfelder, die als Referenzwerte für die
  Positionsermittlung verwendet werden 
- Anzeige einer grafischen Oberfläche mit Steuerungsmöglichkeiten,
  mit deren Hilfe der Anwender eine Sichtkontrolle der Markerdetektion
  durchführen kann 
- Export der Parameterdatei, welche alle relevanten Informationen
  für die Positionsberechnung beinhaltet


Identifikation der Kameras



Die Identifikation der Kameras erfolgt in ARToolKit ab der Version 2.71 über XML- Dateien, welche Informationen zur Kamera und deren Ausgabebild / Pixelformat beinhalten und zur Laufzeit der Anwendung in das Programm eingebunden werden.


XML- Datei
Kamera
input_device = "WDM_CAP" (WDM_VIDEO_CAPTURE_FILTER)

Für den Videoinput wird das DirectShow- System verwendet, welches Videostreams (z.B. den einer USB- Webcam) verarbeiten kann.

friendly_name = "Kamera" Für jede Hardwarekomponente existiert ein sog. „friendly_name“. Dieser genügt dem System in der Regel, um ein Gerät (so auch die Webcams) eindeutig zu identifizieren.

Der „friendly_name“ eines Geräts kann bei Windows im Gerätemanager der Systemsteuerungen abgelesen werden.

show_format_dialog = "false" An dieser Stelle wird festgelegt, ob das Fenster zur Einstellung der Auflösung, Framerate und Farbtiefe angezeigt werden soll.

Beim Konfigurationsprogramm des Kamerasystems hat der Anwender nicht die Möglichkeit, Änderungen vorzunehmen, da Bildwiederholfrequenz, Farbtiefe und Auflösung beider Kameras identisch sein müssen und nicht verändert werden dürfen.

frame_width = "352"
frame_height = "288"
frame_rate = "30.0“
Über diese Werte werden das Bildformat (bei quadratischen Pixeln), die Auflösung und die Framerate eingestellt.
Pixelformat
RGB32 Diese Angabe legt fest, mit welcher Farbtiefe das Videobild aufgezeichnet wird. Hier handelt es sich um ein RGB- Bild mit einer Farbtiefe von 32bit, was einer Anzahl von ca. 4,3 Milliarden Farben entspricht.
flip_h = "false"
flip_v = "true"
Die booleschen Variablen „flip_h“ und „flip_v“ bestimmen, ob das Ausgabebild horizontal bzw. vertikal gespiegelt auf dem Bildschirm erscheint.

Die Spiegelung ist notwendig, da das Videobild aufgrund der Gesetze der Zentralprojektion auf dem Kopf steht.


XML- Dateien der verwendeten Webcams

Techsolo: WDM_camera_flipV1.xml

<?xml version="1.0" encoding="UTF-8"?>
<dsvl_input>
  <camera
    input_device       = "WDM_CAP"
    friendly_name      = "VIMICRO USB PC Camera (ZC0301PLH)"
    show_format_dialog = "false"
    frame_width        = "352"
    frame_height       = "288"
    frame_rate         = "30.0“
  >
    <pixel_format>
      <RGB32
        flip_h = "false"
        flip_v = "true"
      />
    </pixel_format>
  </camera>
</dsvl_input>
Creative: WDM_camera_flipV2.xml

<?xml version="1.0" encoding="UTF-8"?>
<dsvl_input>
  <camera
    input_device       = "WDM_CAP"
    friendly_name      = "Live! Cam Optia"
    show_format_dialog = "false"
    frame_width        = "352"
    frame_height       = "288"
    frame_rate         = "30.0“
  >
    <pixel_format>
      <RGB32
        flip_h = "false"
        flip_v = "true"
      />
    </pixel_format>
  </camera>
</dsvl_input>


Identifikation des Positionsmarkers



Für jeden ARToolKit- Positionsmarker ist eine Referenzdatei im Unterverzeichnis der Arbeitsumgebung hinterlegt. Diese beinhaltet die meisten Informationen, welche notwendig sind, um von der Markerprojektion auf dem Videobild auf die Lage der Kamera im reellen dreidimensionalen Raum zu schließen.

Im Programmcode sind zusätzlich die Markergröße und die Lage seines Mittelpunktes anzugeben. Da es möglich ist, gleichzeitig mehrere Positionsmarker zu verwenden, sind eine Identifikationsnummer und die Gesamtzahl der Marker festzulegen.

char	*patt_name     = "Data\\patt.hiro";	// Referenzdatei
double	patt_center[2] = {0.0, 0.0};		// Physikalisches Zentrum
						// des Patterns (X|Y) in [mm]. Z = NULL
double	patt_width     = 80.0;			// Seitenlaenge des quadratischen
						// Pattern-Rahmens in [mm]
int	patt_id;				// Identifikationsnummer
int	patt_num;				// Pattern - Gesamtzahl


Programminterne Verwaltung der Kameravariablen



Die Verwaltung der Kameradaten erfolgt über ein Array mit zwei Kamera- Strukturen. Über die Arraypositionen werden die Webcams mit den Zahlenwerten „0“ und „1“ ausgewählt, was einen bequemen Wechsel ermöglicht.


Aufbau der Kamera- Struktur

struct camera_data {

	AR2VideoParamT		*vid_param;		// Kameraspezifische Video Parameter
							// (benoetigt fuer ar2-Funktionen)
	ARUint8			*vid_pic;		// Videobild der jeweiligen Kamera
	ARMarkerInfo		*patt_info;		// Kameraspezifische Marker Informationen
							// (Position im Bild usw.)
	ARParam			cam_param, gl_param;	// intrinsische Kameraparameter
	double			gl_param_trans[16];	// OpenGL Transformationsmatrix
							// der intrinsischen Kameraparameter
	char			*cam_conf;		// Name der Kamera Identifikationsdatei
	char			*cam_param_name;	// Name der Datei der internen Kameraparameter
	double			c_quat[4];		// Rotationslage der Kamera: Quaternion
	double			c_pos[3];		// Position der Kamera: Vektor
	double			c_transmat[3][4];	// Transformationsmatrix: Kamerasystem
	double			p_transmat[3][4];	// Transformationsmatrix: Markersystem
	double			patt_pixp[2];		// Marker Pixelposition von links oben
	double			patt_pixc[2];		// Abstand zur optischen Achse in Pixeln
	int			vid_2Dsize[2];		// Videobild Groesse (X|Y) in Pixeln
	double			vid_3Dsize[3];		// Sichtfeld im 3D Raum (X|Y|Z) in [mm];
							// Dient als Referenz für die Tiefenberechnung
	double			vid_center[2];		// Lage der optischen Achse in Pixeln
	double			point_pixp[4][2];	// Position der vier Kontrollpunkte
	double			point_pixc[4][2];	// Mittelpunktabstand der vier Kontrollpunkte
	double			point_mm_cam[4][3];	// 3D Position der vier Kontrollpunkte (Kamera)
	double			point_mm_pat[4][3];	// 3D Position der vier Kontrollpunkte (Marker)
	double			point_size;		// Grösse der Kontrollpunkt- Kugeln 

} cam[2];


Elemente der Kamera- Struktur

- Kamera Konfigurationsvariablen
- OpenGL Renderkontext
- Name der Parameter- und Identifikationsdateien
- Rotationslage und Position der Kamera
- Informationen zur Lage des Markers im Raum und im Videobild
- Verhältnis von Videobild zum Sichtfeld
- Informationen zu den Kontrollpunkten


Anmerkung:

Die OpenGL Transformationsmatrix der intrinsischen kameraparameter
wird benötigt, um den Rendering- Kontext des Ausgabefensters an die
aktive Kamera anzupassen.

Der Wechsel des Kontextes muss mit dem Umschalten zwischen den Webcams
erfolgen, da diese unterschiedliche intrinsische Parameter aufweisen.
Die virtuellen dreidimensionalen Objekte können anderenfalls nicht
korrekt  im Ausgabebild platziert werden, da deren Lage abhängig
von den Kameraparametern und somit vom Rendering- Kontext ist.

ARToolKit verwaltet die intrinsischen Parameter einer Kamera über eine
eigene Matrix, die von GLUT bzw. OpenGL nicht verarbeitet werden kann.
Daher ist eine OpenGL Transformationsmatrix zu erstellen, in die alle
Elemente der ARToolKit- Matrix transferiert werden.


Exportstruktur der für die Berechnung benötigten Variablen



Alle für die nachfolgende Berechnung notwendigen Variablen werden vor dem Speichern in eine Struktur für den Export übertragen. Dadurch bleiben die Variablen als solche erhalten und können unverändert vom Programmteil zur Positionsberechnung übernommen werden. Für den Kopiervorgang genügt eine einzige Exportstruktur, da diese immer wieder überschrieben werden kann.

struct export_data {

  	int			vid_2Dsize[2];		// Videobild Grösse (X|Y) in Pixeln
	double			vid_3Dsize[3];		// Sichtfeld im 3D Raum (X|Y|Z) in [mm];
							// Dient als Referenz für die Tiefenberechnung
	double			vid_center[2];		// Lage der optischen Achse in Pixeln		
	double			c_transmat[3][4];	// Transf.-matrix: Kamera im Markersystem
	double			dist_factor[4];	// Distortion- Werte

};


Funktionsbeschreibung



Liste der Funktionen


main(...); Hauptfunktion des Programms
init(...); Initialisierung der Kameras und des Markers
mainLoop(...); Aufruf der sich ständig wiederholenden Funktionen in einer Hauptschleife
showActiveCam(...); Wechsel / Anzeige der aktiven Kamera
changeARparam(...); Anpassung des Rendering- Kontextes des Ausgabefensters an die aktive Kamera
exitProgram(...); Beenden des Videocapturings, Cleanup und Verlassen des Programms
errorHandler(...); Fehlerbehandlung
Berechnung der Kamera- Sichtfelder und Kontrollpunkte
calculatePos(...); Berechnung der Transformationsmatrizen und der Koordinaten der Kontrollobjekte
calculateDist(...); Bezugspunkt im Kamerabild von der linken oberen Ecke auf die Pixelposition der optischen Achse setzen
Dateiverwaltung
copyStruct(...); Kopieren der Elemente einer Kamera- Struktur in die Exportstruktur
saveFile(...); Speichern der Werte für die Positionsberechnung
openFile(...); Öffnen der Positionsberechnungsdatei
Benutzereingabe
printTastenbelegung(...); Ausgabe der Tastenbelegung
keyEvent(...); Verarbeitung der Tastenbefehle
mouseEvent(...); Verarbeitung der Tastenbefehle der Maus
motionEvent(...); Verarbeitung der Mausbewegung
mouseEvent(...); Verarbeitung der Tastenbefehle der Maus
Grafische Oberfläche
* setQuadrant(...); Wahl desjenigen 2-D- Koordinatensystems, in das die Vektoren abgebildet werden
* getAngleFromVector(...); Berechnung der drei Winkel, die vom Marker und den beiden Kameras eingeschlossen werden
drawString(...); Anzeige des Textfeldes mit den Positionswerten der Kameras
drawExview(...); Anzeige der OpenGL 3-D- Ansicht
calculateEVtrans(...); Berechnung der OpenGL- Transformationsmatrix für die Funktion drawExview(...);
drawCamera(...); Zeichnen der 3-D- Kamera Objekte
setupLight(...); Einrichten der Lichtquellen
drawObjects(...); Zeichnen der Marker- Koordinatenachsen in das Videobild


(*) Diese Funktionen sind eigentlich dem Hilfswert zuzuordnen, dienen an dieser Stelle jedoch ausschließlich zur Visualisierung der Ebene, auf welche die Vektoren bei der Positionsberechnung abgebildet werden.


main();

Die main();- Funktion ist die Hauptfunktion des Programms.

- Initialisierung des Ausgabefensters über die GLUT- Hauptfunktion glutInit();
- Aufruf von init(); zur Initialisierung des Markers und der beiden Kameras
- Start des Videocapturings
   - für Kamera 1
   - für Kamera 2
- Aufruf von glutMotionFunc(); zur Detektion von motionEvents der Maus
- Starten der Hauptschleife argMainLoop();


init();

Die init();- Funktion wird von main(); aufgerufen und dient der Initialisierung der Kameras und des Positionsmarkers. Sie beinhaltet eine Funktionsschleife, welche zweifach durchlaufen wird. Dabei wird jeweils eine der beiden Kameras initialisiert.

Funktionen innerhalb der Schleife

- * Identifikation der Videoquelle / aktiven Kamera über die XML- Identifikations Datei
- * Auslesen der Videobildgröße in Pixeln aus der XML- Identifikations Datei
- * Import der intrinsischen Parameter aus der Parameterdatei der aktiven Kamera
- Überschreiben der default- Parameterstruktur mit den Werten aus der Parameterdatei
- Initialisierung der aktualisierten intrinsischen Parameter
- Übertragung der intrinsischen Parameterwerte in die Kamerastruktur
- Transformation der intrinsischen Parameter- Matrix vom ARToolKit- in das OpenGL- Format
- Bildschirmausgabe der intrinsischen Kameraparameter

Funktionen außerhalb der Schleife

- Ändern des Rendering- Kontextes des Ausgabefensters
- * Laden der Referenzdaten des Positionsmarkers aus der Marker- Identifikations Datei
- Ausgabe der Tastenbelegung am Bildschirm
- Initialisierung der „gsub“- Bibliothek

(*) Diese Funktionen benachrichtigen den errorHandler();, sobald ein Fehler auftritt.


mainLoop();

Der Aufruf von mainLoop(); erfolgt ebenfalls in main();. Über die Programmschleife werden die Funktionen zur Verwaltung der Kameraparameter, zur Positionsberechnung und zum Zeichnen der grafischen Oberfläche laufend aufgerufen. Die Schleife wird erst verlassen, wenn die Anwendung vom Benutzer geschlossen wird.

- Aufruf der Funktion showAcriveCam(); mit der ID der aktiven Kamera
- Füllen des Ausgabe- Strings mit den Koordinaten
   - für Kamera 1
   - für Kamera 2
- Aufruf der Zeichenfunktionen der grafischen Oberfläche


showActiveCam();

Diese Funktion wird laufend von der Hauptschleife des Programms aufgerufen und dient der Verwaltung der Webcams. Bei jedem Durchgang erhält showActiveCam(); die Identifikationsnummer der aktiven Kamera. Diese ID dient zudem als Zeiger für das Array der Kamerastrukturen.

Die grafische Oberfläche setzt sich aus der 3-D- Ansicht, dem Videobild und dem Textfeld mit dem String der Kamerapositionen zusammen. Für jeden der drei Bestandteile sind verschiedene Parameter von OpenGL und GLUT zu konfigurieren, da sie anderenfalls fehlerhaft dargestellt werden. Dies betrifft beispielsweise den 2-D- Rendering- Modus, welcher einzuschalten ist, bevor das Videobild oder das Textfeld ausgegeben werden.

- Aufnahme eines Videobildes der aktiven Kamera
   - Sleeptimer zur Begrenzung der Verarbeitungsgeschwindigkeit
- Konfiguration der GLUT- und OpenGL- Parameter
- Anzeigen des Videobildes im Ausgabefenster
- * Detektieren des Markers im Videobild
- Aufruf von calculatePos(); zur Berechnung der Kameraposition

(*) Diese Funktion benachrichtigt den errorHandler();, sobald ein Fehler auftritt.


changeARparam();

Die Funktion changeARparam(); wird aufgerufen, sobald der Anwender die aktive Kamera umschaltet. Sie führt hierbei den Wechsel des Rendering- Kontextes durch.

- * Laden der Parameter aus der Kamerastruktur
   - für die aktive Kamera
- Überschreiben der alten Parameter
- Initialisieren der neuen Kameraparameter

(*) Diese Funktion benachrichtigt den errorHandler();, sobald ein Fehler auftritt.


exitProgram();

Die Funktion exitProgram(); wird beim Verlassen des Programms aufgerufen und gibt die Systemressourcen wieder frei, die von der ARToolKit- Anwendung in Anspruch genommen wurden.

- Mitteilung an den User, dass das Programm nun verlassen wird
- Beenden des Videocapturings
   - für Kamera 1
   - für Kamera 2
- Freigeben der Videoquelle / Kamera
   - für Kamera 1
   - für Kamera 2
- Schließen der „gsub“- Bibliothek


errorHandler();

Der errorHandler(); wird aufgerufen, sobald ein Fehler aufgetreten ist. Er gibt die Fehlerart aus und steuert nachfolgend die Funktion exitProgram(); an, wenn das Programm nicht weiter ausgeführt werden kann.

- Ausmachen der Fehlerquelle
   - ID 1: Fehler beim Öffnen der Datei
   - ID 2: Fehler beim Schreiben in die Datei
   - ID 3: Fehler beim Ausführen der Funktion <Name der Funktion>
   - default: unbekannter Fehler
- Ausgabe der Fehlermeldung über die Konsole oder den Bildschirm
- Überprüfen, ob das Programm beendet werden muss
   - kritischer Fehler
      - Aufruf der Funktion exitProgram();
   - Fehler hat keine schwerwiegenden Folgen
      - Empfehlung an den User, das Programm zu beenden


calculatePos();

calculatePos(); wird von der Funktion showActiveCam(); angesteuert und berechnet für jede Kamera die räumliche Lage, die Größe des Sichtfeldes und die Position der Kontrollpunkte im 3-D- Raum.

- Größe der 3-D- Kugeln festlegen, welche die Lage der Kontrollpunkte anzeigen
- Berechnung der Transformationsmatrix des Markers im körperfesten System der aktiven Kamera
- Invertieren der Transformationsmatrix zur Bestimmung der Lage der Kamera im Laborsystem
- Extraktion des Positionsvektors und der Quaternion
- Verteilen der Kontrollpunkte auf die vier Pixelpositionen in den Ecken des Videobildes
- Aufruf der Funktion calculateDist();
- Berechnung des Sichtfeldes der aktiven Kamera
- Kontrolle der Berechnungsergebnisse über das Bildformat
- Berechnung der räumlichen Lage der Kontrollpunkte im Laborsystem des Positionsmarkers
Anmerkung:

Funktionsweise der Kontrollpunkte

Für die vier Kontrollpunkte werden zunächst die Pixelpositionen im Videobild angegeben.
Diese sind so zu wählen, dass die blauen Kugeln – welche nachfolgend die Lage der Punkte
visualisieren sollen – bündig mit den Rändern des Videobildes abschließen, sodass sie
gerade noch vollständig zu sehen sind.

Sind die Pixelpositionen gewählt, so ist der Hilfswert für die
Positionsberechnung zu ermitteln.

Im nächsten Schritt wird über den ersten Strahlensatz der Mathematik für jeden der vier
Kontrollpunkte die Position im virtuellen Raum in Relation zum Sichtfeld bestimmt.
Abschließend erfolgt eine Koordinatentransformation vom körperfesten System der
Kamera in das Laborsystem des Positionsmarkers.

Am Ende dieser Berechnung liegen für die Kontrollpunkte vier Positionswerte im 3-D- Raum vor,
welche sich jeweils in einer Ecke des Sichtfeldes der Kamera befinden sollten. Überträgt man
die Koordinaten der Kontrollpunkte auf Kugel- Objekte, so gibt deren Lage im Videobild
Aufschluss darüber, ob die Markerdetektion und die Berechnung des Sichtfeldes erfolgreich
verlaufen ist. Sind hierbei Fehler aufgetreten, so entspricht die Lage der blauen Kugeln
nicht der Pixelposition der Kontrollpunkte.


calculateDist();

calculateDist(); gehört zur Funktion calculatePos(); und dient dazu, den Pixelabstand zwischen einem Punkt und der optischen Achse im Videobild zu berechnen.

Überprüfen, ob sich der Punkt links/rechts bzw. unter-/oberhalb der optischen Achse befindet Berechnung der hor. und ver. Distanz zwischen dem Punkt und der optischen Achse


copyStruct();

Die Funktion copyStruct(); wird ein Mal pro Kamera von saveFile(); aufgerufen. Sie überschreibt die Exportstruktur mit den Daten aus einer der beiden Kamerastrukturen.

Übergabewerte

- Pixelposition der optischen Achse
- Größe des Videobildes in Pixeln
- Größe des Sichtfeldes für die Distanz zwischen der Kamera und dem Positionsmarker
- Kamera- Transformationsmatrix
- Distortionswerte


saveFile(...);

Über die ENTER- Taste wird die Funktion saveFile(); aufgerufen. Diese überträgt die Berechnungsdaten in die Datei mit dem Namen „camera_data.dat“.

<Arbeitsverzeichnis>\Data\camera_data.dat
- Ausgabe von Statusmeldungen am Bildschirm
- Erstellen bzw. Öffnen der Datei „camera_data.dat“
- Aufruf der copyStruct();- Funktion
   - für Kamera 1
   - für Kamera 2
- Speichern der Exportstruktur in der Datei
   - für Kamera 1
   - für Kamera 2
- Schreibpuffer leeren
- Schließen der Datei
- Aufruf der openFile();- Funktion zur Kontrolle


openFile();

Die openFile();- Funktion wird von saveFile(); aufgerufen, sobald die Datei mit den Positionsdaten beschrieben wurde. Weiterhin besteht die Möglichkeit, sich den Inhalt der Datei über die TAB- Taste ausgeben zu lassen. Die openFile();- Funktion dient an dieser Stelle der Sichtkontrolle, ob die Ablage der Daten erfolgreich war.

- Ausgabe von Statusmeldungen am Bildschirm
- Öffnen der Datei „camera_data.dat“
- Auslesen der Datenstruktur
   - für Kamera 1
   - für Kamera 2
- Ausgabe der Berechnungsdaten am Bildschirm
   - für Kamera 1
   - für Kamera 2
- Lesepuffer leeren
- Schließen der Datei


printTastenbelegung();

printTastenbelegung(); gibt die Tastenbelegung zur Steuerung des Programms aus.

Ausgabe auf der Programmkonsole

- Tastenkontrolle *
  [a] [d]              3D Ansicht horizontal drehen
  [q] [e]              3D Ansicht vertikal drehen
  [w] [s]              3D Ansicht zoomen
  [x]                  3D Ansicht zuruecksetzen
- [1] [2]              Kamera umschalten
- [ENTER]              Kamerapositionen speichern
- [TAB]                Kamerapositionen auslesen
- [ESC]                Programm beenden

(*) Die Steuertasten werden nur dann angezeigt, wenn sie über die boolesche Variable „key_control“ im Quellcode freigeschaltet sind.


keyEvent();

keyEvent(); fängt alle Benutzereingaben auf der Tastatur ab und steuert die Funktionen gemäß der betätigten Kontrolltasten an.

Funktion der Kontrolltasten

- [ESC]                Aufruf der exitProgram();- Funktion zum Verlassen der Anwendung
- [TAB]                Auslesen der „camera_data.dat“ Datei über die openFile();- Funktion
- [ENTER]              Datenablage in der „camera_data.dat“- Datei über die saveFile();- Funktion
- [1] [2]              Wechsel der aktiven Kamera auf Webcam 1 bzw. 2
                       - Umschalten der Kamera- ID
                       - Erneute Initialisierung der Markererkennung
                       - Wechsel des Rendering- Kontextes über den Aufruf von changeARparam();

Steht die boolesche Variable „key_control“ auf TRUE, so lässt sich die Szenenkamera bzw. das Sichtfeld des Anwenders auf die 3-D- Umgebung über die Kontrolltasten der Tastatur steuern.

- Drehen der Szenenkamera – die Winkelangaben beziehen sich auf einen
  Schleifendurchlauf der mainLoop();- Funktion
   [a] / [A]           um 5° nach links drehen
   [d] / [D]           um 5° nach rechts drehen (horizontaler Winkel: 0° - 360°)
   [e] / [E]           um 5° nach oben neigen
   [q] / [Q]           um 5° nach unten neigen (vertikaler Winkel: 5° - 90°)

- Distanz zwischen der Szenenkamera und dem Positionsmarker
   [w] / [W]           um 50 mm verringern
   [s] / [S]           um 50 mm vergrößern (Grenzen: 1000 mm – 4000 mm)

- Szenenkamera zurücksetzen
   horizontaler Rotationswinkel:               0°
   vertikaler Rotationswinkel:                 45°
   Distanz zwischen Kamera und Marker:         2000 mm


mouseEvent();

Die mouseEvent();- Funktion dient zur Steuerung der 3-D- Umgebung. Bewegt man die Maus bei gedrückter linker Taste so verändert man den Betrachtungswinkel auf die 3-D- Szene. Über die rechte Maustaste wird der Abstand zwischen der Szenenkamera und dem Positionsmarker verändert.

- Überprüfen, ob eine der Maustasten gedrückt wurde
   - Es wurde keine Maustaste gedrückt
      - keine Aktion
   - mouseEvent ist eingetreten
      - Identifikation der gedrückten Maustaste über GLUT- Parameter
      - Ermitteln der Pixelposition des Mauszeigers im Fenster der 3-D- Umgebung
      - Übergabe der Informationen über die Maustaste und die
        Pixelposition des Cursors an die motionEvent();- Funktion


motionEvent();

Ist eine der Maustasten gedrückt, so überprüft die motionEvent();- Funktion, ob sich die Position des Mauszeigers im Vergleich zur Lage im letzten Schleifendurchlauf verändert hat. Ist dies der Fall, so führt sie entweder eine Drehung der Szenenkamera aus oder verändert den Betrachtungsabstand entlang der optischen Achse.

- Überprüfen, ob die Position des Mauszeigers verändert wurde
   - Maus wurde nicht bewegt
      - keine Aktion
   - Mauszeiger wurde bewegt
      - Überprüfen, ob eine Maustaste gedrückt ist
      - keine Maustaste gedrückt
         - keine Aktion
      - linke Maustaste ist gedrückt
         - Veränderung des Betrachtungswinkels
      - rechte Maustaste ist gedrückt
         - Veränderung des Betrachtungsabstands


setQuadrant();

Die setQuadrant();- Funktion ermittelt über die Lage der Kameras zum Positionsmarker, in welchem 2-D- Koordinatensystem bzw. Berechnungsquadranten der Schnittpunkt der projizierten Geraden ermittelt werden soll.

Das Ergebnis dieser Funktion wird nicht an die Positionsberechnung übergeben, da sie in gleicher Form in EyesWeb zur Laufzeit des Programms ausgeführt wird. Dies hat den Sinn, dass der Bezugspunkt für die Kameras ohne großen Mehraufwand verändert werden kann. So ließe sich anstelle des Positionsmarkers bei Bedarf auch die letzte bekannte Position der extrahierten Raumkoordinate als Referenzpunkt für die Ermittlung des 2-D- Koordinatensystems verwenden.

- Rechenoperationen in den drei 2-D- Koordinatensystemen XY, XZ und YZ
   - Aufruf der Funktion getAngleFromVector();
   - Quadrieren des Sinus des Winkels ( Kamera1 – Positionsmarker – Kamera2 )
   - Ermittlung der Distanz zwischen den Webcams
   - Multiplikation des linearen Wertes für den Winkel mit der Kamera- Distanz
- Größenvergleich der Ergebnisse von XY, XZ und YZ
- Auswahl des 2-D- Koordinatensystems, für das der größte Gesamtwert
  aus Kameraabstand und Winkel ermittelt wurde


getAngleFromVector();

Die getAngleFromVector();- Funktion berechnet für setQuadrant(); die drei Winkel, welche die Kameras mit dem Positionsmarker in den jeweiligen 2-D- Koordinatensystemen einschließen.

- Kontrolle der Kamerapositionen im XY- System zur Vermeidung stumpfer und negativer Winkel
- Berechnung des Winkels ( Kamera1 – Positionsmarker – Kamera2 )
   - im XY- System
   - im XZ- System
   - im YZ- System


drawString();

Die drawString();- Funktion wird laufend über die Hauptschleife aufgerufen. Sie zeichnet das Textfeld mit den Positionsangaben der Kameras in die grafische Oberfläche. Den Inhalt des Strings erhält sie von der mainLoop();- Funktion.

- Aufruf verschiedener GLUT- und OpenGL- Funktionen zur Initialisierung des Textfeldes
- Positionierung des Textfeldes
- Zeichnen eines schwarzen OpenGL- Frames im 3-D- Raum, welches als
  Hintergrund für den weißen Ausgabetext dient
- Positionierung des weißen Ausgabetextes
- Zeichnen eines GLUT- BitmapCharacters für jedes char- Element im String


drawExview();

Die drawExview();- Funktion verwaltet die 3-D- Szene im Ausgabebild. Das 2-D- Koordinatensystem, in dem der Schnittpunkt der projizierten Geraden ermittelt werden soll, erhält einen grünen Farbton. Die anderen beiden Koordinatensysteme werden mit einem unauffälligen Grau versehen. Über die Farben kann der Anwender erkennen, in welchem Quadranten die Berechnung stattfinden wird.

- Aufruf der setQuadrant();- Funktion zur Bestimmung des Berechnungsquadranten
- Zuweisen der Farben zu den drei Berechnungsquadranten
- Aufruf der Funktion zur Berechnung der OpenGL- Transformationsmatrix
- Aufruf verschiedener GLUT- und OpenGL- Funktionen zur Initialisierung des virtuellen 3-D- Raums
- Initialisierung der virtuellen Lichtquellen über die setupLight();- Funktion
- Zeichnen des Punktrasters, welches Aufschluss über die Auflagefläche des Markers gibt
- Zeichnen der drei Achsen des Laborsystems
- Zeichnen der quadratischen Rahmen der drei Berechnungsquadranten
- Färben der quadratischen Rahmen
- Aufruf der Funktionen zum Zeichnen der 3-D- Kamera- Objekte


calculateEVtrans();

Die calculateEVtrans();- Funktion transferiert die Werte der intrinsischen Parameter der Szenenkamera in eine OpenGL- Transformationsmatrix. Dieser Schritt muss durchgeführt werden, da GLUT / OpenGL und ARToolKit unterschiedliche Formate verwenden, die nicht kompatibel sind.

- Berechnung der horizontalen und vertikalen Winkel der Szenenkamera
- Bestimmen der Länge der Achsen des Laborsystems
- Instanzierung der 4x4 OpenGL- Matrix
- Auffüllen der OpenGL- Matrix
- Invertieren der Matrix
- Abgleich der OpenGL- Matrix mit dem Rendering- Kontext


drawCamera();

Die drawCamera();- Funktion wird von drawExview(); aufgerufen. Sie zeichnet ein Ebenbild von jeder Webcam in den virtuellen 3-D- Raum.

- Extrahieren des Positionsvektors und der Quaternion aus der Transformationsmatrix der Webcam
- Übertragen der Lage auf ein virtuelles 3-D- Objekt im Ausgabefenster
- Zeichnen des Kamera- Objektes, bestehend aus zwei Würfeln für Gehäuse und Objektiv


setupLight();

Über setupLight(); wird die Lichtstimmung der 3-D- Szene konfiguriert.

- Konfiguration
   - Lichtstimmung
   - Oberflächeneffekte (Reflexion, Glanz, usw.)


drawObjects();

Die Funktion drawObjects(); zeichnet die Koordinatenachsen des Positionsmarkers und die Kugeln zur Anzeige der Kontrollpunktpositionen in das Videobild der aktiven Kamera.

- Aufruf verschiedener GLUT- und OpenGL- Funktionen zur
  Initialisierung der Zeichenebene auf dem Videobild
- Abgleich des Rendering- Kontextes mit den intrinsischen Parametern der aktiven Kamera
- Zeichnen der Koordinatenachsen auf den Markermittelpunkt
- Zeichnen der vier Kugeln zur Anzeige der Lage der Kontrollpunkte

Koordinatenextraktion

Die Koordinatenextraktion erfolgt in EyesWeb über die Verkettung von Programmblöcken, welche die hierfür erforderlichen Funktionen in einer Schleife wiederholt ausführen. Die Blöcke zur Bildverarbeitung und Datenübertragung lassen sich aus der Bibliothek von EyesWeb entnehmen. Für die Positionsberechnung müssen hingegen neue Funktionen in Microsoft Visual C++ 6.0 implementiert und über den EyesWeb- Block- Creator in das Programm eingebunden werden.

Verwendete Software
- EyesWeb 3.3.0
- EyesWeb Block Creator
- OpenCV (wird nicht benötigt, sollte aber installiert werden)
- Microsoft Visual C++ 6.0
Dieser Teil der Anwendung erfüllt im Wesentlichen folgende Aufgaben

- Initialisierung der Kameras
- Ermittlung eines markanten Punktes der Objektprojektion in beiden Videobildern
- Anzeige der Zwischenergebnisse der Positionsermittlung über Videobilder und Zahlenwerte
- Import der Datei mit den Berechnungsvariablen
- Berechnung der Raumkoordinate
- Export der Positionsdaten (erfolgt über die OSC/UDP Netzwerkschnittstelle)


Bildpunkterkennung

Initialisierung der Kameras



Die beiden Webcams werden über den FrameGrabber- Programmblock in EyesWeb eingebunden. Über das Parameter- Fenster des Blocks lassen sich die Einstellungen der Kameras verändern.


FrameGrabber


Elemente des Parameterfensters

Params
Device Über das Device wird die Webcam ausgewählt. Die Identifikation der Kameras erfolgt über den „friendly name“, welcher identisch mit dem der XML- Dateien ist. Bei der Zuweisung muss beachtet werden, dass man die Kameras nicht untereinander vertauscht, da sonst die im Konfigurationsteil ermittelten Parameter nicht mit denen der Webcam übereinstimmen.

Webcam 1: VIMICRO USB PC Camera (ZC0301PLH) Webcam 2: Live! Cam Optia

Grabber Properties Über diesen Button im Parameterfenster werden Einstellungen am Videobild vorgenommen. Hierzu zählen beispielsweise die Helligkeit, die Farbstimmung oder der Kontrastumfang.

Ist der Automatikmodus für den Weißabgleich, die Helligkeitsregelung oder die Farbanpassung aktiviert, so muss dies bei der Hintergrundsubtraktion und der Anpassung des Schwellwertes berücksichtigt werden.

Capture Properties An dieser Stelle werden die Auflösung, die Framerate und die Farbtiefe eingestellt.
Type = "RGB24" Diese Angabe legt fest, mit welcher Farbtiefe das Videobild aufgzeichnet wird. Hier handelt es sich um ein RGB- Bild mit einer Farbtiefe von 24bit, was einer Anzahl von ca. 16,7 Millionen Farben entspricht. Dieser Wert unterscheidet sich von der Farbtiefe, die in ARToolKit verwendet wird. Da zwischen EyesWeb und ARToolKit keine Bildinhalte übertragen werden, stellt dies jedoch kein Problem dar.
Width = "352"
Height = "288"
Über diese Werte werden die Auflösung und das Bildformat (bei quadratischen Pixeln) eingestellt. Sie gelten für beide Kameras und sind aus ARToolKit zu übernehmen.
Fps = "25" Dieser Wert unterscheidet sich von der Bildwiederholfrequenz von 30fps, die in den „Capture Properties“ einzustellen ist. Anscheinend handelt es sich hierbei um einen Bug in der EyesWeb- Software. Dieser wirkt sich jedoch nicht merkbar aus und kann daher ignoriert werden.


Bildverarbeitung



Mit Hilfe der nachfolgend aufgelisteten Bildverarbeitungsverfahren wird die Pixelposition des gesuchten Objektpunktes in beiden Videobildern extrahiert.


Hintergrundsubtraktion

Durch die Hintergrundsubtraktion lassen sich störende Bildelemente ausblenden. Auf Knopfdruck erstellt man hierzu eine Momentaufnahme vom Videostream, welche von allen nachfolgenden Frames subtrahiert wird.


Hintergrundsubtraktion


Separation des blauen Farbkanals

Nach der Separation des Farbkanals sollten nur noch blaue Objekte im Videobild zu sehen sein, doch gilt hierbei zu beachten, dass sich Weiß bei der additiven Farbmischung eines RGB- Bildes aus Lichtwellen aller Farben zusammensetzt. Dies hat zur Folge, dass die hellen Bildelemente auch nach der Separation zu sehen sind. Aus diesem Grund wird vom blauen Farbkanal eine der anderen beiden Grundfarben abgezogen. Dies bewirkt eine Auslöschung aller hellen Anteile im Bild. Ob hierfür der grüne oder der rote Farbkanal verwendet wird, spielt keine Rolle.


Separation des blauen Farbkanals


Median Operator

Mit dem Median Operator werden durch den Abgleich eines Bildpunktes mit seinen benachbarten Pixeln Bildstörungen in Form von Rauschen unterdrückt.


NonlinearFilter


Binarisierung

Zur Detektion des Objektes muss die Aufnahme in ein Binärbild umgewandelt werden. Der Schwellwert gibt dabei an, bei welchem Tonwert die Trennung von Hintergrund und Objekt erfolgt.


ThresholdBitonal


Closing Operator

Die morphologische Bildoperation Closing schließt Löcher in der detektierten Objektfläche des Binärbilds. Beim Closing wird zuerst eine Dilatation (Schließen von Löchern, Vergrößerung der Objektfläche) durchgeführt, gefolgt von einer Erosion (Verkleinerung der Objektfläche auf die ursprüngliche Größe).


MorphologicalOp


Konvertierung

EyesWeb verändert willkürlich die Position des Referenzpunktes des Videobildes. Damit stets sichergestellt ist, dass er sich im linken oberen Eck befindet, muss das Bild konvertiert werden.


Convert


Schwerpunkt

Im Binärbild wird der Schwerpunkt der weißen Fläche ermittelt. Dieser dient nachfolgend als Ausgangspunkt für die Bestimmung der Projektionslinie.


Extraktion des Schwerpunktes

Positionsberechnung

Die Implementierung des Programmblocks zur Positionsberechnung erfolgt in Microsoft Visual C++ 6.0. Hierzu wird der EyesWeb Block Creator in die Entwicklungsumgebung eingebunden und ein neues „EyesWeb Module Library“- Projekt erstellt.


Programmblock zur Positionsberechnung



Einbinden des Block Creators von EyesWeb 3.x in MS Visual C++ 6.0

Hierbei gilt zu beachten, dass der Block Creator von EyesWeb 3.x nur zur sechsten Programmversion von Microsoft Visual C++ kompatibel ist.


1. Kopieren der Dateien „EyesWebWz.awx“ und „EywBlkCreator.dll“

Datei von nach
EyesWebWz.awx
EywBlkCreator.dll
<EyesWeb>\Dev\Sdk\Bin\ <MS Visual Studio>\Common\MsDev98\Bin\IDE\
<MS Visual Studio>\Common\MsDev98\AddIns\


2. EyesWeb Block Creator in MS Visual C++ 6.0 einbinden

- Extras
   - Anpassen
      - Add-Ins und Makrodateien
         [ Durchsuchen ]
           - Dateiname: <MS Visual Studio>\Common\MsDev98\AddIns\EywBlkCreator.dll
           - Dateityp:  Add-Ins (.dll)


3. Einbinden der Include- Dateien und Bibliotheken

- Extras
   - Optionen
      - Verzeichnisse
         - Verzeichnisse anzeigen für [Include- Dateien]
            [ Neu ] <EyesWeb>\Dev\Sdk\Include\
            [ Neu ] <EyesWeb>\Dev\cv\Include\
            [ Neu ] <EyesWeb>\Dev\cxcore\Include\
         - Verzeichnisse anzeigen für [Bibliothekdateien]
            [ Neu ] <EyesWeb>\Dev\Sdk\Library\
            [ Neu ] <OpenCV>\lib\


4. Hinzufügen der Menüpunkte zum (De-) Registrieren von Programmblöcken

- Extras
   - Anpassen
      - Extras
         [ Neu ]
            - Steuerelement re&gistrieren
               Befehl:              C:\WINDOWS\system32\regsvr32.exe
               Argumente:           /v "$(TargetPath)"
               Ausgangsverzeichnis: $(TargetDir)
            - Steuerelement &deregistrieren
               Befehl:              C:\WINDOWS\system32\regsvr32.exe
               Argumente:           /u "$(TargetPath)"
               Ausgangsverzeichnis: $(TargetDir)


Berechnungsblock in MS Visual C++ 6.0 erstellen


1. Neues Projekt erstellen

- Datei
   - Neu
      - Projekte
          Projekt:     EyesWeb Module Library AppWizard
          Projektname: Coordinates3D
          Pfad:        C:\Bideo\EW_Blocks\


2. Berechnungsblock anlegen

- EywBlkCreator Command
   1. Dialogfeld: Objekttyp
      EyesWeb Object:         Block
      Name of Block/Datatype: CoordCalc
   2. Dialogfeld: Hersteller und Block- Version (nicht notwendig)
   3. Dialogfeld: Libraries (wird OpenCV verwendet, so muss cv.h eingebunden werden)
   4. Dialogfeld: Block Informationen
      Type of Block:          Passive
   5. Dialogfeld: Parameter
      [ Add... ]
         Type:                File Name
         Name:                cd_file
         [  ]                 Is exportet by default
         [  ]                 Disabled
         [ √]                 Design-time
         [ √]                 Runtime
   6. Dialogfeld: Inputs
      [ Add... ]
         Input name:          in_caX
         Type of input:       Scalar
         Interface:           IDT Scalar
         [ √]                 Required for Init
         [  ]                 Required for Exe
      Arbeitsschritt wiederholen für
         in_caY
         in_cbX
         in_cbY
   7. Dialogfeld: Outputs
      [ Add... ]
         Output name:         outX
         Type of output:      Scalar
         Interface:           IDTScalar
         Any Index:           -1
         In-place Index:      -1
      Arbeitsschritt wiederholen für
         outY
         outZ
   8. Dialogfeld: Aussehen des Blocks (nicht notwendig)
   9. Dialogfeld: Fertig stellen


Verlinken der Bibliotheken

- Projekt
   - Einstellungen
      - Linker
        Objekt-/Bibliothek-Module: EyesWebSDKd.lib


Einbinden des Programmblocks in EyesWeb

Nach der Implementierung wird der Programmblock an EyesWeb übergeben. Hierzu muss EyesWeb geschlossen sein.


1. Coordinates3D.dll- Datei erstellen

- Erstellen
   - Coordinates3D.dll erstellen


2. Coordinates3D.dll als Steuerelement registrieren

- Extras
   - Steuerelement registrieren


Import- Struktur der für die Berechnung benötigten Variablen



Alle für die nachfolgende Berechnung notwendigen Variablen werden nach dem Öffnen der Datei „camera_data.dat“ in ein Array mit zwei Import- Strukturen übertragen. Über die Arraypositionen lassen sich die Kameras durch die Zahlenwerte „0“ und „1“ ansprechen, was den leichten Wechsel zwischen den beiden Webcams ermöglicht.

struct import_data {

  	int			vid_2Dsize[2];		// Videobild Grösse (X|Y) in Pixeln
	double			vid_3Dsize[3];		// Sichtfeld im 3D Raum (X|Y|Z) in [mm];
							// Dient als Referenz für die Tiefenberechnung 

	double			vid_center[2];		// Lage der optischen Achse in Pixeln 

	double			c_transmat[3][4];	// Transf.-matrix: Kamera im Markersystem

	double			dist_factor[4];	// Distortion- Werte
	
} import[2];


Struktur mit den Elementen zur Schnittpunktbildung



Da für beide Kameras die Vektoren bzw. Geraden aufzustellen sind, wird auch an dieser Stelle ein Array mit zwei Strukturen verwendet.

struct sline_data {

	int			incomingX;		// x- Koordinate am Eingang des Blockes

	int			incomingY;		// y- Koordinate am Eingang des Blockes

	double			p_pix_distortion[2];	// Pixelposition des Bildpunktes
							// (Distortion nicht korrigiert)

	double			p_pix_p[2];		// Pixelposition des Bildpunktes
							// (Distortion ausgeglichen)

	double			p_pix_c[2];		// Abstand zur optischen Achse in Pixeln
							// (Distortion ausgeglichen)

	double			p_mm_cam[3];		// 3D Position des Referenzwertes (Kamera)

	double			a[3];			// 3D Position des Geradenpunktes A (Marker)
							// entspricht der Kamera

	double			b[3];			// 3D Position des Geradenpunktes B (Marker)
							// entspricht dem Referenzwert

} sline[2];


Funktionsbeschreibung



Liste der Funktionen

Execute(...); Hauptfunktion des Programms
Berechnungquadrant
setQuadrant(...); Wahl desjenigen 2-D- Koordinatensystems, in das die Vektoren abgebildet werden
flipQuadrant(...); Kippen der Achsen des Laborsystems
unflipQuadrant(...); Ursprüngliche Lage der Achsen wiederherstellen
Pixelposition des Bildpunktes
calculatePpixC(...); Bezugspunkt im Kamerabild von der linken oberen Ecke auf die Pixelposition der optischen Achse setzen
correctDistortion(...); Korrektur der Distortion für die Pixelposition des Bildpunktes
Schnittpunkt der Geraden
calculateLine(...); Aufstellen der Geradengleichung
crossLine(...); Schnittpunkt zweier Geraden ermitteln
Dateiveraltung
openFile(...); Öffnen der Positionsberechnungsdatei


Execute();

Die Execute();- Funktion ist die Hauptfunktion des Programms. Sie wird aufgerufen, sobald die extrahierten Koordinaten des Schwerpunktes den Berechnungsblock erreichen.

- Sperren der Ein- und Ausgänge des Programmblocks
- Übergabe der 4 Input- Werte an die Berechnungs- Strukturen
- Überprüfen, ob die Datei „camera_data.dat“ bereits eingelesen wurde
   - Werte bereits importiert
      - Datei wird nicht geöffnet
   - Werte noch nicht importiert
      - Ausgabe des Dateipfades am Bildschirm
      - Aufruf der Funktion openFile();
      - Überprüfen, ob beim Öffnen der Datei ein Fehler aufgetreten ist
         - Fehler ist aufgetreten
            - Fehlermeldung am Bildschirm
            - Raumkoordinate auf die Position ( 0 | 0 | 0 ) setzen
         - Datei wurde erfolgreich geöffnet
            - Aufruf der setQuadrant();- Funktion
            - Bildschirmausgabe der Berechnungsdaten
               - für Kamera 1
               - für Kamera 2
            - Ausgabe des Berechnungsquadranten am Bildschirm
            - Berechnung des Referenzpunkte beider Kameras
               - Pixelkoordinaten des Bildpunktes
                  - Aufruf der correctDistortion();- Funktion
                  - Aufruf der calculatePpixC();- Funktion
               - Raumkoordinaten des Referenzpunktes
                  - Berechnung der Raumkoordinaten im körperfesten System der Kamera
                  - Koordinatentransformation in das Laborsystem des Markers
            - Berechnung der Position des gesuchten Objektes im Raum
               - Aufruf der crossLine();- Funktion
            - Übergabe der Positionswerte an die 3 Ausgänge des Programmblockes
- Freigabe der Ein- und Ausgänge


setQuadrant();

Die setQuadrant();- Funktion ermittelt über die Lage der Kameras zum Positionsmarker, in welchem 2-D- Koordinatensystem bzw. Berechnungsquadranten der Schnittpunkt der projizierten Geraden ermittelt werden soll.

- Kontrolle der Kamerapositionen im XY- System zur Vermeidung stumpfer und negativer Winkel
- Rechenoperationen in den drei 2-D- Koordinatensystemen XY, XZ und YZ
   - Berechnung des Winkels ( Kamera1 – Positionsmarker – Kamera2 )
   - Quadrieren des Sinus des Winkels ( Kamera1 – Positionsmarker – Kamera2 )
   - Ermittlung der Distanz zwischen den Webcams
   - Multiplikation des linearen Wertes für den Winkel mit der Kamera- Distanz
- Größenvergleich der Ergebnisse von XY, XZ und YZ
- Auswahl des 2-D- Koordinatensystems, für das der größte Gesamtwert aus
  Kameraabstand und Winkel ermittelt wurde
Anmerkung:

Der Sinus eines Winkels beschreibt eine Wellenfunktion, welche bei 90° und 270°
den Wert 1 bzw. -1 und bei 0° und 180° den Wert 0 erreicht. Der Sinus allein ist
für die Bestimmung des Berechnungsquadranten kaum geeignet, da er nicht linear
ansteigt bzw. abfällt und somit keine vergleichbaren Ergebnisse liefert.

Quadriert man jedoch die Sinusfunktion, so erhält man eine sägezahnförmige
Funktionskurve, welche linear steigt und fällt. Die Maxima dieser Funktion
liegen bei 90° und 270°, die Minima hingegen bei 0° und 180°. Das Quadrat
des Sinus ist somit ideal dazu geeignet, um über eine Multiplikation mit der
Distanz zwischen den beiden Webcams einen vergleichbaren Wert zu ermitteln,
der dazu genutzt werden kann, das 2-D- Koordinatensytstem mit der größten
Fehlertoleranz zu bestimmen.


flipQuadrant();

flipQuadrant(); wird von der Funktion crossLine(); aufgerufen und dient dazu, die Achsen des Laborsystems zu kippen. Dies hat den Sinn, dass die Formel zur Berechnung des Schnittpunktes im XY- Koordinatensystem auf alle drei Quadranten angewendet werden kann. Wurde bei der Qualitätskontrolle das XZ- oder das YZ- System ausgewählt, so bildet die Funktion flipQuadrant(); die Positionswerte auf das XY- System ab.

- Überprüfen, welcher Quadrant für die Berechnung ausgewählt wurde
   - Quadrant: 0 – YZ- System
      - Abbildung der Koordinaten von YZX auf XYZ
   - Quadrant: 1 – XZ- System
       - Abbildung der Koordinaten von XZY auf XYZ
   - Quadrant: 2 – XY- System
       - Keine Veränderung am Berechnungsquadranten


unflipQuadrant();

unflipQuadrant(); wird nach der Berechnung des Schnittpunktes im XY- System von der Funktion crossLine(); aufgerufen und dient dazu, die Achsen des Laborsystems wieder in ihre ursprüngliche Lage zurückzusetzen.

- Überprüfen, welcher Quadrant für die Berechnung ausgewählt wurde
   - Quadrant: 0 – YZ- System
      - Abbildung der Koordinaten von YZX auf XYZ
   - Quadrant: 1 – XZ- System
       - Abbildung der Koordinaten von XZY auf XYZ
   - Quadrant: 2 – XY- System
       - Keine Veränderung am Berechnungsquadranten


openFile();

Die openFile();- Funktion wird von Execute(); aufgerufen, sobald der Programmblock zum ersten Mal gestartet wird.

- Öffnen der Datei „camera_data.dat“
   - Fehler ist aufgetreten
      - Mitteilung an Execute(); - Fehler beim Öffnen der Datei
   - Datei wurde erfolgreich geöffnet
      - Mitteilung an Execute(); - Datei erfolgreich geöffnet
      - Auslesen der Datenstruktur
         - für Kamera 1
         - für Kamera 2
      - Lesepuffer leeren
      - Schließen der Datei
- Mitteilung an Execute(); - Funktion openFile(); ausgeführt


calculatePpixC();

calculatePpixC(); wird von Execute(); nach der Korrektur der Linsendistortion aufgerufen und dient dazu, den Pixelabstand zwischen einem Punkt und der optischen Achse im Videobild zu berechnen.

- Ermitteln, ob sich der Punkt links/rechts bzw. unter-/oberhalb
  der optischen Achse befindet
- Berechnung der horizontalen und vertikalen Distanz zwischen dem
  Punkt und der optischen Achse


correctDistortion();

Die Funktionalität von correctDistortion(); wurde der ARToolKit- Bibliothek entnommen. CorrectDistortion(); wird von Execute(); aufgerufen und hat die Aufgabe, die Wirkung der Linsendistortion auf die Pixelposition des Bildpunktes rechnerisch auszugleichen.


calculateLine();

caluculateLine(); stellt die Geradengleichungen im ausgewählten Quadranten auf. Der Aufruf dieser Funktion erfolgt von crossLine();.

- Berechnung der Steigung
- Berechnung des Achsenabschnittes


crossLine();

crossLine(); berechnet die Raumkoordinaten des gesuchten Objektpunktes über den Schnittpunkt der Geraden in zwei Berechnungsquadranten. Der Aufruf von crossLine(); erfolgt am Ende der Funktion Execute();.

- Aufruf der Funktion flipQuadrant();
   - Kamera 1 & Referenzpunkt 1
   - Kamera 2 & Referenzpunkt 2
- Aufruf der Funktion calculateLine();
   - XY- Quadrant: Kamera 1 – Referenzpunkt 1
   - XY- Quadrant: Kamera 2 – Referenzpunkt 2
   - XZ- Quadrant: Kamera 1 – Referenzpunkt 1
- Ermitteln der x- Koordinate
- Schneiden der Geraden
   - XY- Quadrant: Kamera 1 – Referenzpunkt 1
   - XY- Quadrant: Kamera 2 – Referenzpunkt 2
- Ermitteln der y- Koordinate
- Einsetzen der x- Koordinate in die Gerade
   - XY- Quadrant: Kamera 1 – Referenzpunkt 1
- Ermitteln der z- Koordinate
- Einsetzen der x- Koordinate in die Gerade
   - XZ- Quadrant: Kamera 1 – Referenzpunkt 1
- Aufruf der Funktion unflipQuadrant();
   - Koordinaten des Schnittpunktes


Programmblock zum Kippen der Achsen des Laborsystems



Der Programmblock zum Kippen der Achsen arbeitet nach dem gleichen Prinzip wie die Funktion flipQuadrant();. Über einen Eingabeparameter wird angegeben, welche Koordinaten untereinander vertauscht bzw. um welche Achse das Koordinatensystem im 90° Winkel gedreht werden soll. Der Block verfügt über drei Ein- und Ausgänge für Integer- Werte.


Bearbeitung der Positionswerte



Konvertieren

Die Positionswerte verlassen den Block zur Berechnung bzw. den Block zum Kippen der Achsen in Form von Integer- Werten, welche keine Nachkommastellen besitzen. Bei einer Neuskalierung gingen somit Informationen verloren, wenn der Dividend kein ganzzahliges Vielfaches des Divisors ist. Um dem entgegenzuwirken, ist eine Konvertierung in Gleitkommazahlen vorzunehmen. Dies geschieht mit dem „DomainConv“- Programmblock.

DomainConv
Parameter Type: Integer -> Real


Neuskalieren

Da die Größenverhältnisse der virtuelle Szene von Virtools nicht mit denen des reellen Raumes übereinstimmen, muss mit dem „Rescaler“- Block eine Neuskalierung der Positionswerte durchgeführt werden.

Rescaler
Parameter Rescaling mode: Linear
Input Min: -1000
Input Max: 1000
Output Min: -500
Output Max: 500


OSC / UDP- Schnittstelle

EyesWeb



Datenübertragung

Für die Datenübertragung an Virtools wird das OSC- Kommunikationsprotokoll verwendet. Über drei Ports einer UDP- Netzwerkschnittstelle werden hierbei die Positionswerte laufend an die 3-D- Engine übertragen.

Das TCP/IP- Protokoll weist zwar eine höhere Sicherheit bei der Datenübertragung auf und wäre somit eigentlich besser für den Transfer der Raumkoordinaten geeignet, doch gibt es für Virtools kein Plugin, welches das TCP/IP- Protokoll unterstützt. Weiterhin ist UDP bedenkenlos einsetzbar, da der Datentransfer auf der Softwareebene innerhalb des localhost- Rechners erfolgt.


ScalarToOSC


Virtools



Virtools OSC- Plugin

Um in Virtools OSC- Nachrichten empfangen zu können, ist die Einbindung eines OSC- Plugins erforderlich, welches als ZIP- Archiv im Forum der offiziellen Virtools- Homepage zu finden ist.


Kopieren der Datei „osc.dll“

Nach dem Entpacken des ZIP- Archivs hat man die Möglichkeit, das Plugin neu zu kompilieren. Dies ist jedoch nicht unbedingt erforderlich, da die Datei „osc.dll“ bereits vorkompiliert ist und in der Regel einwandfrei arbeitet.

Datei von nach
osc.dll ..\OSC-GPL\OSC\bin\ <Virtools>\Virtools 4.0\BuildingBlocks\


OSC- Building Blocks

Wurde das Plugin in das BuildingBlocks- Verzeichnis von Virtools kopiert, so erscheinen in der 3-D- Entwicklungsumgebung mit dem „OSC/UDP Parameter Receiver“ und dem „OSC/UDP Parameter Sender“ zwei neue Building Blocks.


Komposition & Level- Script erstellen

- File
   - New Composition

- Level manager
   - Level
      [ Create Script ]

Für die OSC- Schnittstelle wird in Virtools ein Level Script erzeugt, in das nachfolgend drei „OSC/UDP Parameter Receiver“- Blöcke eingebunden und vernetzt werden. Die Vorgehensweise ist hierbei identisch mit der Platzierung der Bildverarbeitungsblöcke in EyesWeb.


OSC Nachrichten entgegennehmen

Um die Verbindung zu EyesWeb herzustellen, wird für jeden der drei Programmblöcke der entsprechende Port angegeben. Über die Ports geschieht zudem die Identifikation der einzelnen Koordinaten, da neben den Zahlenwerten keine Meta- Daten in Form von Achsenbezeichnungen übertragen werden. Über den Ausgang „Pout 1 / 2 / 3“ wird pro OSC- Empfänger eine der drei Koordinaten an ein ausgelagertes Script mit den Anzeigefeldern der Positionswerte und an den Programmblock „Set Component“ gesendet.


OSC/UDP Parameter Receiver


Anwendungsbeispiel

Das Anwendungsbeispiel ist in die Virtools- Komposition der Schnittstelle eingebettet. Hierzu sind das Interaktions- 3-D- Objekt und der statische Hintergrund mit dem Modellierungstool Cinema4D zu erstellen und in die Virtools- Szene zu importieren. Drei Textfelder zur Ausgabe der empfangenen Positionswerte vervollständigen das Programm.

Verwendete Software
MAXON Cinema4D 9
Virtools 4


Objektmodellierung in Cinema4D



Virtools verfügt bekanntlich nicht über die Möglichkeit zur Modellierung von 3-D- Körpern. Aus diesem Grund wird Cinema4D verwendet, mit dem sich alle Elemente der Szene erzeugen lassen. Hierzu zählen ein Objekt, auf das die Positionswerte der ermittelten Raumkoordinate übertragen werden und der Hintergrund bzw. die Umgebung der virtuellen Szene.


Grundkörper erzeugen und bearbeiten

- Objekte
   - Grundobjekte
      - Würfel (Objekt)
      - Ebene (Hintergrund)

Für das 3-D- Objekt werden sechs Würfel- Grundkörper in das Projekt eingebunden und auf der Polygon- Ebene entlang ihrer Achsen skaliert. Der Hintergrund der Szene setzt sich aus drei Ebenen zusammen, welche ebenfalls aus der Objektbibliothek geladen und auf Maß gebracht werden. Weiterhin ist hierbei für jede Ebene eine Translation entlang einer der Achsen durchzuführen, sodass sie drei Seitenflächen eines Raums aufspannen. Die Maße für alle Elemente sind den Tabellen aus „Elemente der 3-D- Szene“ zu entnehmen.


Objekte gruppieren

- Objekte
   - Nullobjekt
      - Objektkörper zuweisen

Das Interaktions- Objekt und der Hintergrund der Szene setzen sich aus mehreren 3-D- Körpern zusammen. Diese müssen gruppiert werden, sodass sie von Virtools als zusammenhängendes Element erkannt werden.


Export der Objekte

Vor dem Export des Interaktion- Objektes bzw. des Hintergrundes muss sichergestellt sein, dass sich nur eines der beiden Objekte im Projekt befindet, da sie sonst als zusammenhängendes Gebilde übertragen werden. Weiterhin sind alle Rendering- Filter zu entfernen, da Virtools diese nicht fehlerfrei verarbeiten kann. Um die Materialien muss man sich hingegen nicht kümmern, da Cinema4D diese automatisch erzeugt und zusammen mit den Objektkörpern in einer .3ds Datei ablegt.

- Datei
   - Exportieren
      - 3D Studio
         - Interaktions- Objekt
            Dateiname: 3d_object.3ds
         - Hintergrund
            Dateiname: background.3ds


Elemente der 3-D- Szene


Elemente der 3-D- Szene


3-D- Szene einrichten



Setzen der Lichtquellen in Virtools

Für die Beleuchtung der Szene sorgen zwei Punkt- Lichtquellen. Diese werden im „3D Layout Explorer“ angewählt und in die 3-D- Ansicht gezogen. Über den „Level Manager“ wird das „Point Light Setup“ aufgerufen. Die Positionen und Eigenschaften der Lichtquellen sind so zu wählen, dass der Raum gleichmäßig ausgeleuchtet und gut einzusehen ist.

- Level Manager
   - Level
      - Lights
         [ Point Light Setup ]
            - Lichtquelle 1
               Name:          lq 1
               Position:      [ X ]     30.00
                              [ Y ]     20.00
                              [ Z ]   - 20.00
               Type:          Point
               Color:         RGB       75, 75, 75
               Attenuation:   Constant   1.00
                              Linear:    2.50
                              Quadratic: 4.00
            - Lichtquelle 2
               Name:          lq 2
               Position:      [ X ]    -10.00
                              [ Y ]     10.00
                              [ Z ]   - 30.00
               Type:          Point
               Color:         RGB      255, 255, 255
               Attenuation:   Constant   1.00
                             Linear:    0.00
                             Quadratic: 0.00


Import der Objekte

Ist die Objektmodellierung vollständig abgeschlossen, so werden beide Elemente in die Szene von Virtools importiert und mit Materialfarben, Texturen und eindeutigen Bezeichnungen versehen.

- Resources
   - Import File As
      - Character
         - Interaktions- Objekt
            Dateiname: 3d_object.3ds
            Dateityp:  Autodesk 3DS (*.3ds)
         - Hintergrund
            Dateiname: background.3ds
            Dateityp:  Autodesk 3DS (*.3ds)

Die Farbgebung des Interaktions- Objektes erfolgt über die diffuse Lichtfarbe im Fenster „Material Setup“.

Die Textur des Positionsrasters wird mit Photoshop erstellt und per Drag & Drop in die Programmoberfläche von Virtools eingebunden. Hierzu wählt man zunächst das Material einer der Ebenen aus und zieht dann das Bild in das Fenster mit dem Reiter „Material Setup“. Virtools weist die Textur dann automatisch den Hintergrundobjekten zu.


Ausrichten der Szenenkamera

Die Szenenkamera wird so ausgerichtet, dass der Hintergrund ihr Sichtfeld vollständig ausfüllt und das Interaktions- Objekt auch dann gut zu sehen ist, wenn es seine Position im Raum verändert. Die Grenzwerte für den Bewegungsspielraum werden in EyesWeb durch die Skalierung der Raumkoordinaten vorgegeben.

- Level Manager
   - Level
      - Cameras
         [ Target Camera Setup ]
            - Szenenkamera
               Name:                Szenenkamera
               Position (World):    [ X ]     45.00
                                    [ Y ]     25.00
                                    [ Z ]   - 45.00
               Orientation (World): [ X ]     20.00
                                    [ Y ]     45.00
                                    [ Z ]      0.00
               Target:              None
               Projection Type:     Perspective
               Aspect Ratio:        Active
                                    Type:      Normal
                                    X / Y:     4 / 3
                                    Ratio:     1.3333
               Perspective:         50 mm
                                    Field of view:    9.50
                                    Focal length:  1341.00
               Clipping:            Near clip:        1.00
                                    Far clip:      4000.00

Setzen der Textfelder

Die Ausgabe der Positionswerte erfolgt über drei transparente 2D- Frames, die an die Kamera gebunden sind. Somit nehmen sie unabhängig von der Beobachtungsperspektive immer die gleiche Position im Bild ein. Jedes Frame besteht aus zwei Polygonflächen, die als Träger für ein Textfeld dienen, welches zur Laufzeit des Programms dynamisch erzeugt wird.

2D Frame Position X ; Y Größe X ; Y
posX
posY
posZ
5 ; 10
5 ; 50
5 ; 95
100 ; 40


Script erstellen

- Level manager
   - Level
      [ Create Script ]
         - 2D label
         - 3D body

Die Steuerung des Interaktions- Objektes und die Ausgabe der Zahlenwerte erfolgen über zwei Scripte, in welche die Programmblöcke eingebunden werden.


Objektposition steuern



Positionsvektor erstellen


Positionsvektor erstellen


Über „Set Component“ wird der Positionsvektor für die gesuchte Raumkoordinate laufend aktualisiert und über den „Shortcut Source“- Parameter „trans_vec“ an „Set Position“ im 3D body Script weitergeleitet. Hierzu sind der entsprechende Parameteryp einzustellen und die Inputs mit den „OSC/UDP Parameter Receiver“- Blöcken zu verbinden.


Set Component


Übertragung der Raumkoordinate auf die Objektposition


Set Position


Das „3D body Script“ überträgt mit dem „Set Position“ Programmblock den Positionsvektor der extrahierten Raumkoordinate auf das 3-D- Interaktionsobjekt. Diese Funktion wird laufend ausgeführt, sodass das virtuelle Objekt in Echtzeit den Bewegungsabläufen aus dem reellen Raum folgt.


Set Position


Ausgabe der Positionswerte


Ausgabe der Positionswerte


Zeichensatz erstellen


Create System Font


Um die Positionswerte im virtuellen Raum sichtbar machen zu können, muss zunächst ein Schrift- bzw. Zeichensatz- Objekt erstellt werden. Dies geschieht mit dem Programmblock „Create System Font“, welcher neben der Schriftart auch den Schrifteffekt festlegt.


Eigenschaften des Zeichensatzes einrichten

Im nächsten Schritt werden die Eigenschaften des Zeichensatz- Objekts definiert. Hierzu zählen die Schriftgröße, der Zeichenabstand, sowie die Farbe und die Transparenz.


Set Font Properties


Textfelder erstellen


Der Programmblock „2D Text“ holt sich einen der Float- Zahlenwerte von der OSC- Schnittstelle, wandelt diesen in einen String um, weist ihm nachfolgend das Zeichensatz- Objekt zu und legt ihn schließlich auf eines der zweidimensionalen Text- Labels.


2D Text

Optimierung und Tests

Hardwarekomponenten

Computersysteme



Das Interaktionssystem wurde auf drei unterschiedlichen Rechnern getestet. Hierzu zählen ein Notebook aus dem unteren Preissegment und zwei Desktop- Systeme der mittleren bzw. gehobenen Preisklasse.


Getestete Systeme

Testsystem 1 – unteres Preissegment
Prozessor Intel Celeron 2,6 Ghz
Grafikkarte ATI Mobility Radeon 9000 IGP, max. 128 MB shared Memory
Arbeitsspeicher 768 MB DDR- RAM
Besondere Merkmale Die meisten Komponenten sind auf der Hauptplatine verbaut. (OnBoard)


Testsystem 2 – mittlere Preisklasse
Prozessor AMD Athlon XP 2500+ Barton, 1833 Mhz
Grafikkarte ATI Radeon 9800 Pro, 256 MB DDR- RAM
Arbeitsspeicher 1024 MB DDR- RAM
Besondere Merkmale keine


Testsystem 3 – gehobene Klasse
Prozessor Intel Core2Duo 6300 2x 1,86 Ghz
Grafikkarte SLI System: 2x NVIDIA GeForce 7600 GT, je 256 MB DDR RAM
Arbeitsspeicher 1024 MB DDR- RAM (später auch 2048 MB DDR- RAM - Dual Channel)
Besondere Merkmale Das Testsystem verfügt über eine zusätzliche USB- Controllerkarte.


Verwendete Webcams

Kamera 1 Techsolo TCA-4810
Kamera 2 Live! Cam Optia
Bildwiederholfrequenz 30 fps
Auflösung 352 x 288 Pixel


Auf den Rechnern wird das Betriebssystem WindowsXP (32bit – Home Edition) mit dem ServicePack2 verwendet. Weiterhin sind auf allen Systemen die gleichen Treiber und Softwareupdates für die Webcams installiert.


Auslastung des Systems

Das Interaktionssystem läuft auf dem zweiten und dem dritten Testsystem einwandfrei. Im Durchschnitt nimmt der Programmteil zur Extraktion der Raumkoordinate bei beiden Rechnern 20% der verfügbaren Ressourcen in Anspruch. Bezieht man die 3-D- Anwendung mit ein, so steigt die Auslastung auf bis zu 60% an. Die Angaben gelten sowohl für den Hauptprozessor, als auch für den Arbeitsspeicher. Während das Programm auf den Desktop- Systemen bei einer niedrigen bis mittleren Auslastung einwandfrei arbeitet, treten beim Notebook zwei Probleme auf.

So arbeiteten die Hardware- Komponenten des Notebooks auf Volllast, sobald auch nur der Programmteil zur Positionsermittlung aktiviert wird. Dies hat einen deutlichen Anstieg der Temperatur der Hardwarekomponenten und nicht selten auch einen Komplettabsturz des Systems zur Folge.

Das Problem ist mit Sicherheit auf die Hardwarekonfiguration zurückzuführen. Die Leistungsangaben auf dem Papier ähneln zwar denen des Rechners aus dem mittleren Preissegment, doch sind die meisten Komponenten, wie die Soundkarte, die Netzwerkkarte und die Grafikkarte beim Notebook auf der Hauptplatine untergebracht, was in der Regel eine Verlangsamung des Systems zur Folge hat. Zudem greift die Grafikkarte auf den Hauptspeicher zu, wodurch von den insgesamt 768 MB maximal 736 MB und minimal 640 MB genutzt werden können. Zusammen mit dem im Verhältnis kleineren Cache- Speicher des Prozessors und der Architektur des Motherboards wirkt sich dies augenscheinlich so deutlich auf die Leistungsfähigkeit des Rechners aus, dass das Notebook wider der Leistungsangaben nicht die notwendigen Systemressourcen zur Verfügung stellen kann.


USB

Das schwerwiegendere Problem bei der Verwendung des Notebooks besteht jedoch darin, dass die Frameraten beider Kameras 15 fps und somit die Mindestanforderung deutlich unterschreiten. Zum Teil dauert es zwei Sekunden und mehr, bis ein neues Bild für die Extraktion des Bildpunktes zur Verfügung gestellt wird.

Die Verbindung der Kameras über die USB- Schnittstelle kann hierbei Aufschluss über die Ursache des Problems geben. Alle Testsysteme verfügen über mehrere USB1.0 und USB2.0- Steckplätze, wobei jedoch zu beachten ist, dass sämtliche Ports in der Regel auf einen oder zwei sog. USB- Controller zurückgreifen und sich somit auch die gleichen Ressourcen teilen. Übersteigt die Auslastung durch beide Kameras die verfügbare Bandbreite des Controllers, so ist eine Inbetriebnahme nur eingeschränkt oder aber überhaupt nicht möglich.


Auslastung des USB- Hostcontrollers


Um diesem Problem entgegen zu wirken, gibt es zwei verschiedene Ansätze.


Wahl des richtigen Ports

Über ein Hardware- Diagnoseprogramm lässt sich feststellen, über wie viele USB- Controller ein System verfügt und wie diese ausgelastet sind. Anhand der daraus gewonnenen Informationen lassen sich die Webcams so auf die USB- Steckplätze verteilen, dass die Last gleichmäßig auf die Controller verteilt ist. Das gleiche Ergebnis lässt sich aber auch erzielen, indem man einfach die Kameras probeweise an die verschiedenen USB- Ports anschließt und überprüft, ob beide zeitgleich funktionieren. Weiterhin gibt es Webcams, die abwärtskompatibel sind, was den Einsatz an einem USB1.0 Port möglich macht.


USB- Controller PCI- Karte

Ein Desktop- System lässt sich durch einen oder mehrere USB- Controller erweitern. Diese sind auf PCI- Steckkarten verbaut, welche auf das Mainboard des Rechners aufgesteckt werden. Leider ist die Aufrüstung eines Notebooks mit einem zusätzlichen Controller in der Regel nicht durchführbar.


Kameras



Neben den Computersystemen wurden auch zwei USB- Webcams unterschiedlicher Hersteller getestet. Ein dritter Kameratyp fand zwar ebenso Anwendung, doch stammt das Modell aus dem Jahr 1999, sodass keinerlei Beschreibungen und Handbücher mehr zu finden sind, die Aufschluss über die Kenngrößen hätten geben können.


Kamera 1
Bezeichnung Techsolo TCA-4810
max. Auflösung 800 x 600 Pixel
Bildwiederholfrequenz 30 fps
Farbtiefe 24 Bit


Kamera 2
Bezeichnung Creative Labs WebCam Live Optia
max. Auflösung 640 x 480 Pixel
Bildwiederholfrequenz 30 fps
Farbtiefe 24 Bit


Die erste Kamera arbeitet bei jeder Auflösung und Bildwiederholfrequenz einwandfrei. Zudem besitzt sie eine zuverlässige Automatik zur Regulierung der Bildschärfe.

Die Testkamera von Creative ist das im Vergleich teurere Modell und bietet zahlreiche Features, sowie einen großen Softwareumfang. Die Kamera weist jedoch deutliche Schwächen bei der Bildqualität auf und verfügt über keine automatische Schärferegulierung.

Ein Vergleich der Webcam- Modelle verschiedener Hersteller ist an dieser Stelle wenig sinnvoll, doch sind bei der Verwendung dieser beiden Kameras Auffälligkeiten aufgetreten, die allgemein Gültigkeit besitzen und denen man durchaus Beachtung schenken sollte, da sie sich deutlich auf die Leistungsfähigkeit des Interaktionssystems auswirken.


Inbetriebnahme baugleicher Webcams

Sollen zwei Kameras gleichen Fabrikats zeitgleich eingesetzt werden, so ist darauf zu achten, dass die Treiber der Webcams auf einen solchen Betriebsmodus ausgelegt sind. Oftmals kommt es hierbei zu Problemen, da das System die Kameras nicht eindeutig identifizieren kann.

So war es nicht möglich, zwei Modelle des Typs „Techsolo TCA-4810“ einzusetzen, da hierbei Treiberkonflikte auftraten. Ob der Betrieb zweier baugleicher Kameras möglich ist, hängt vom jeweiligen Modell ab und sollte vor dem Kauf beim Hersteller erfragt werden.


Probleme bei hohen Auflösungen

Bei einer Auflösung von 640 x 480 Pixel treten bei der Kamera von Creative Probleme auf. Laut den Spezifikationen wird diese zwar unterstützt, doch lässt sie sich in EyesWeb nicht auswählen.

Zudem tritt – wie unten abgebildet – in ARToolKit ein Bildfehler auf, der eine Detektion des Positionsmarkers unmöglich macht. Die Symmetrie und die Form der Anomalie lassen vermuten, dass es sich hierbei um einen Bildeffekt der Kamerasoftware handelt, doch gibt es keinerlei Möglichkeit, diesem entgegen zu wirken, bzw. diesen Effekt auszuschalten.


Probleme bei hohen Auflösungen


Wahl der richtigen Webcam

Die Aufnahmen einer der beiden Testkameras weisen einen deutlichen Farbstich ins Blaue auf. Zudem benötigt sie verhältnismäßig viel Umgebungslicht, um kontrastreiche Bilder liefern zu können. In diesem Fall wirkt sich das nachteilig auf die Bildverarbeitung aus, da der blaue Farbkanal nicht sauber getrennt werden kann.

Generell gilt, dass die Leistungsfähigkeit des Interaktionssystems maßgeblich von der verwendeten Kamera abhängig ist. Hierbei spielen die Schärfe und Farbtreue des Videobildes, sowie die Qualität des Objektives eine entscheidende Rolle.

Die Kamera sollte folgende Merkmale aufweisen

- Automatische Schärferegulierung
- Lichtstarkes Objektiv
- Möglichst exakte Farbwiedergabe
- VGA Auflösung (640 x 480) – nicht interpoliert
- 24 Bit Farbtiefe
- Bildwiederholfrequenz von 30 fps


Maximale Reichweite des Systems

Das System ist auf einen Interaktionsradius von bis zu zwei Metern ausgelegt und wurde dahingehend entwickelt und optimiert, dass es in diesem Nahbereich zuverlässig arbeitet. Betrachtet man aber den theoretischen Lösungsansatz, so sollte sich das Verfahren zur Positionsermittlung auf jede endliche Distanz anwenden lassen. Ob die Extraktion der Raumkoordinate im Fernbereich auch in der Praxis durchführbar ist, soll anhand von Versuchen und Überlegungen überprüft werden.

Grundsätzlich lässt sich sagen, dass die maximale Reichweite von der Lage und den Eigenschaften des Positionsmarkers, den Merkmalen des zu extrahierenden Objektes, sowie von den extrinsischen und intrinsischen Parametern beider Kameras bestimmt wird.


Positionsmarker



Die erfolgreiche Kalibrierung der extrinsischen Kameraparameter stellt die Grundlage für die Extraktion der Raumkoordinate dar. Da diese über die Detektion des Positionsmarkers erfolgt, wird sie durch dessen Eigenschaften, wie der Lage im Raum, den geometrischen Abmessungen, sowie des verwendeten Marker- Symbols entscheidend beeinflusst.


Lage des Positionsmarkers

Die Position des Markers in Relation zu den beiden Webcams legt das Zentrum und die Grenzen des Bereichs fest, in dem sich die Raumkoordinate bewegen darf. Ist die Distanz zwischen den Kameras und dem Marker gering, so steht auch nur ein kleiner Raum für die Erfassung der Position zur Verfügung. Entsprechendes gilt, wenn der Abstand vergrößert wird.

Neben der Position im Raum kann die Wahl geeigneter Betrachtungswinkel entscheidend zur Vergrößerung der Reichweite beitragen. Blicken die Kameras senkrecht auf den Marker, so stehen mehr Bildpunkte und somit auch mehr Bildinformationen für die Markerdetektion zur Verfügung. Dadurch ist es möglich, die Webcams in einer größeren Entfernung aufzustellen.


Größe des Positionsmarkers

Ruft man sich die Angaben aus der Softwarebeschreibung von ARToolKit in Erinnerung, so ist bekannt, dass sich die Reichweite ebenso über die Abmessungen des Positionsmarkers vergrößern lässt.


Markergröße Reichweite
Zoll cm Zoll cm
2,75
3,50
4,25
7,37
7,00
8,89
10,80
18,72
16,00
25,00
34,00
50,00
40,64
63,50
86,36
127,00


Die Angaben in der Tabelle stammen von der ARToolKit Homepage. Tests mit Markergrößen von 8 cm, sowie 16 cm und einer Auflösung von 352x288 Pixel haben gezeigt, dass die Detektion des Positionsmarkers und die Ermittlung der extrinsischen Parameter auch dann noch akzeptablen Toleranzen unterliegt, wenn die maximale Reichweite um mehr als 50% überschritten wird.

Hierzu muss der Marker jedoch absolut eben aufliegen und darf nicht gebogen oder zerknittert sein. Weiterhin ist es wichtig, die Kamera möglichst senkrecht auf ihn auszurichten, sodass der Rahmen einen verhältnismäßig großen Bildausschnitt ausfüllt und das Symbol gut zu erkennen ist. Werden diese Punkte nicht eingehalten, so kann ARToolKit zwar den Marker detektierten, doch hat es gleichzeitig Probleme, die Lage der Achsen zu bestimmen. Dies führt zu Messungenauigkeiten, die schlagartig zunehmen, sobald die maximale Reichweite überschritten wird.

Die erzielbaren Werte hängen weiterhin von den verwendeten Kameras und den gewählten Auflösungen ab. Die Angaben in der Tabelle entsprechen somit zuverlässigen Richtwerten, die einen gewissen Spielraum bieten, der für die jeweilige Webcam individuell ermittelt werden muss.


Markersymbol

Das Markersymbol gibt Aufschluss über die Richtung, aus der die Kamera den Marker im Blickfeld hat. Kann es nicht vollständig erkannt werden, so lassen sich keine eindeutigen Aussagen über die Rotationslage der Webcam treffen.

Aus diesem Grund darf das Symbol des Positionsmarkers keine feinen Linien beinhalten. Ebenso sollte man runde und symmetrische Formen vermeiden, da für diese aus verschiedenen Betrachtungsperspektiven keine differenzierbaren Merkmale feststellbar sind.


Verwendung mehrerer Positionsmarker

Mit zwei Positionsmarkern wäre es zudem möglich, die Kameras auch in einer Entfernung von mehr als 2 Metern beliebig im Raum zu positionieren. Hierzu müssen jedoch der Abstand zwischen den beiden Markern und die ihre Rotationslage im Raum bekannt sein.

Das Interaktionssystem ist nicht auf die Verwendung mehrerer Marker ausgelegt, ließe sich bei Bedarf aber dahingehend erweitern.


Kameras



Weiterhin lässt sich die Reichweite vergrößern, wenn man bei der Positionierung der Kameras und der Wahl der Auflösung einige Punkte beachtet.


Position

Die Kalibrierung der extrinsischen Parameter ist stets mit gewissen Messungenauigkeiten verbunden.

So weisen die von ARToolKit detektierten Kamerapositionen Schwankungen in einem Bereich von wenigen Millimetern bis hin zu mehreren Zentimetern auf, deren Größe davon abhängig ist, wie deutlich der Marker auf dem Videobild zu sehen ist. Grundsätzlich gilt hierbei, dass die Berechnung der Standpunkte der Kameras nur dann genaue Ergebnisse liefern kann, wenn ausreichend Bildinformationen über den Positionsmarker zur Verfügung stehen.


Vergrößerung der Distanz zwischen den Kameras und dem Positionsmarker

Will man die Position des Markers als Zentrum des Laborsystems und somit auch als Bezugspunkt für die Interaktion nutzen, so ist die Distanz zwischen ihm und den Webcams zu vergrößern. Dies bedeutet jedoch zugleich, dass der Positionsmarker nicht mehr genau erfasst werden kann, was sich negativ auf die Genauigkeit der Messergebnisse auswirkt. Bei der Platzierung der Kameras sollte somit versucht werden, einen möglichst großen Abstand zwischen die beiden Geräte zu bringen, da die Toleranzen der extrinsischen Parameter in diesem Fall deutlich weniger Einfluss auf die Ermittlung der Raumkoordinate ausüben.


Vergrößerung der Distanz zwischen den Kameras und dem Positionsmarker


Verlagerung des Interaktionsbereiches

Ein weiterer Ansatz zur Vergrößerung der Systemreichweite besteht darin, den Raum zur Interaktion hinter den Positionsmarker zu verlegen. Richtet man die Webcams möglichst parallel zueinander aus, sodass sie neben dem Marker auch einen identischen Hintergrund im Blickfeld haben, so lässt sich dieser als Bereich für die Interaktion nutzen.


Verlagerung des Interaktionsbereiches


Tests ergaben, dass sich der Interaktionraum auf bis zu vier Meter hinter den Standort des Markers versetzen lässt. Die Positionswerte der detektierten Raumkoordinate weisen mit zunehmender Distanz jedoch auch größer werdende Abweichungen auf.


Distanz * Abweichungen
100 cm < 3 cm
200 cm < 8 cm
300 cm < 20 cm
400 cm < 50 cm
500 cm und mehr >> 50 cm


(*) Die Angaben entsprechen dem Durchschnitt aller Werte aus mehreren Durchgängen für die drei Koordinaten der detektierten Objektpunktposition.

Die Webcams waren bei der Versuchsreihe 20cm voneinander entfernt und blickten parallel auf einen Positionsmarker mit einer Kantenlänge von 16cm. Die Entfernung zum Marker betrug ca. 30cm, die Auflösung war mit 352x288 Pixel angegeben.

Weitere Untersuchungen haben gezeigt, dass die verhältnismäßig kleine Distanz zwischen den beiden Kameras in Kombination mit der parallelen Ausrichtung und der geringen Auflösung zu diesen Messungenauigkeiten führen. Betrachtet man die vom System ermittelten Positionen beider Kameras, so lassen sich diese dank der geringen Entfernung zum Positionsmarker sehr präzise bestimmen, sodass die Berechnung des Schnittpunktes prinzipiell auch bei großen Entfernungen ohne diese deutlichen Abweichungen von 50cm und mehr gelingen sollte. Sind die Kameras jedoch parallel auf das gesuchte Objekt ausgerichtet, so führt dies zu einem Problem, das auch bei der Korrespondenzanalyse zu finden ist. Die Kamerabilder weisen bei einer Auflösung von nur 352 x 288 Pixeln bei einem Abstand von mehr als vier Metern keine wesentlichen Unterschiede mehr auf, sodass sich die Projektionslinien nicht eindeutig berechnen lassen.

Dem Problem lässt sich entgegenwirken, indem man die optischen Achsen der Kameras neigt und / oder eine höhere Auflösung wählt. In beiden Fällen stehen dann ausreichend Bildinformationen für die Berechnung des Schnittpunktes und somit auch für die Ermittlung der Raumkoordinate zur Verfügung. Ebenso lässt sich natürlich der Abstand zwischen den Kameras vergrößern, wodurch es jedoch notwendig wird, den Marker näher an den Interaktionsbereich zu versetzen.


Auflösung

Die Auflösung ist entscheidend, wenn man eine Objektposition in einer Entfernung von mehr als 4 Metern bestimmen möchte. So lässt sich mit einer Bildgröße von 640 x 480 Pixel die maximale Reichweite bei der Markerdetektion nahezu verdoppeln. Weiterhin stehen mit einer hohen Auflösung auch eine größere Anzahl an Bildinformationen zur Verfügung, was sich nicht nur auf die Erkennung des Positionsmarkers positiv auswirkt. So lässt sich auch die Raumkoordinate eindeutiger erfassen, was sich bei der Genauigkeit der erzielten Ergebnisse bemerkbar macht.


Merkmale des detektierten Objektes



Bei dem Objekt sollte darauf geachtet werden, dass es eine angemessene Größe hat und keine komplexen Formen aufweist. Ein kugelförmiger Gegenstand mit einer Farbe, die sich deutlich vom Hintergrund abhebt, ist generell besonders gut geeignet, da der Schwerpunkt des Objektkörpers mit denen der Projektionsflächen auf den Videobildern übereinstimmt.

Für alle Distanzen eignet sich weiterhin eine Leuchtdiode, da sich diese durch die Helligkeit deutlich vom Hintergrund abhebt und ihre Lage im Videobild aufgrund der geringen Größe sehr genau zu bestimmen ist.