08.12.2012 Aufrufe

Verfahren zur Rekonstruktion von 3D-Szenen

Verfahren zur Rekonstruktion von 3D-Szenen

Verfahren zur Rekonstruktion von 3D-Szenen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong><br />

<strong>3D</strong>-<strong>Szenen</strong><br />

Bachelorarbeit <strong>von</strong><br />

Christian Käser<br />

An der Fakultät für Informatik<br />

Institut für Betriebs- und Dialogsysteme,<br />

Lehrstuhl für Computergrafik<br />

Beginn: 14. Oktober 2011<br />

Ende: 12. März 2012<br />

Erstgutachter: Prof. Dr.-Ing. Carsten Dachsbacher<br />

Betreuender Mitarbeiter: Dipl.-Inf. Tim Reiner<br />

KIT – Universität des Landes Baden-Württemberg und nationales Forschungszentrum der Helmholtz-Gesellschaft www.kit.edu


Inhaltsverzeichnis<br />

1 Einleitung 1<br />

1.1 Ziel dieser Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />

2 Bisherige Arbeiten und Einsatzgebiete 3<br />

3 Überblick über verschiedene Typen <strong>von</strong> <strong>3D</strong>-Kamerasystemen und <strong>3D</strong>-Scannern 5<br />

3.1 Passive Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

3.1.1 Monokulare Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

3.1.2 Stereoskopische Systeme . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

3.2 Aktive Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

3.2.1 Time of Flight Laserscanner . . . . . . . . . . . . . . . . . . . . . . . 8<br />

3.2.2 Time of Flight Kameras . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

3.2.3 Structured Light Systeme . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

3.2.3.1 Microsoft Kinect . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

3.3 Kontaktbasierte <strong>3D</strong>-Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

4 <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten 13<br />

4.1 <strong>Rekonstruktion</strong> <strong>von</strong> Gebäudefassaden mit Hilfe <strong>von</strong> Symmetrieeigenschaften 13<br />

4.1.1 Vorverarbeitung und Kantenerkennung . . . . . . . . . . . . . . . . . 13<br />

4.1.2 Identifikation <strong>von</strong> Oberflächen . . . . . . . . . . . . . . . . . . . . . 14<br />

4.1.3 Zuordnung der Bildpixel <strong>zur</strong> entsprechenden Oberfläche . . . . . . . 15<br />

4.1.4 Ausnutzung <strong>von</strong> Symmetrien <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> Details . . . . 15<br />

4.1.5 Herausarbeiten der Details als Flächen mit Offset . . . . . . . . . . . 16<br />

4.2 Echtzeitrekonstruktion aus Depth Maps mit Kinect Fusion . . . . . . . . . . 17<br />

4.2.1 Vorverarbeitung der Scannerdaten . . . . . . . . . . . . . . . . . . . 17<br />

4.2.2 Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

4.2.3 <strong>Rekonstruktion</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

4.2.4 Darstellung der rekonstruierten Szene . . . . . . . . . . . . . . . . . 20<br />

4.2.5 Segmentierung <strong>von</strong> beweglichen <strong>Szenen</strong>komponenten . . . . . . . . . 21<br />

4.3 Featurebasiertes Mapping mit einer einzelnen Kamera . . . . . . . . . . . . 21<br />

4.3.1 Repräsentation der Messunsicherheit durch ein stochastisches Modell 22<br />

4.3.2 Auswahl und Erkennung <strong>von</strong> trackbaren Features . . . . . . . . . . . 23<br />

4.3.3 Tracking <strong>von</strong> gefundenen Features . . . . . . . . . . . . . . . . . . . 24<br />

4.3.4 Variation des <strong>Verfahren</strong>s <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> Außenarealen . . . 24<br />

5 Implementierung auf Enduserhardware 27<br />

5.1 Zugriff auf die Bilddaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

5.2 Parallelisierungstechniken <strong>zur</strong> Beschleunigung . . . . . . . . . . . . . . . . . 28<br />

5.3 Implementierung eines einfachen Punktwolkenbetrachters . . . . . . . . . . 28<br />

5.3.1 Die Benutzeroberfläche . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

5.3.2 Erzeugung der Punktwolke . . . . . . . . . . . . . . . . . . . . . . . 29<br />

5.3.3 Mögliche Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

iii


iv Inhaltsverzeichnis<br />

6 Analyse und Vergleich verschiedener <strong>Verfahren</strong> 31<br />

6.1 Limitierungen bei der <strong>Rekonstruktion</strong> . . . . . . . . . . . . . . . . . . . . . 31<br />

6.2 Genauigkeit der <strong>Rekonstruktion</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

6.3 Geschwindigkeit und Echtzeitfähigkeit . . . . . . . . . . . . . . . . . . . . . 33<br />

6.4 Daraus resultierende Einsatzgebiete . . . . . . . . . . . . . . . . . . . . . . . 34<br />

7 Zukünftige Anwendungen 37<br />

7.1 Natural User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

7.1.1 Skeletal Tracking und Gestensteuerung . . . . . . . . . . . . . . . . 37<br />

7.1.2 Berührungssteuerung und Multitouch auf beliebigen Oberflächen . . 38<br />

7.2 Erfassung <strong>von</strong> Personen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

7.2.1 Verwendung <strong>von</strong> Gesichtsscans in Videospielen . . . . . . . . . . . . 39<br />

7.2.2 Trafficeffiziente Videochats . . . . . . . . . . . . . . . . . . . . . . . 39<br />

7.2.3 Digitale Umkleidekabinen . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

7.3 Vereinfachte Akquisition <strong>von</strong> Modellen . . . . . . . . . . . . . . . . . . . . . 41<br />

7.3.1 <strong>3D</strong>-Kopien in Massenproduktion . . . . . . . . . . . . . . . . . . . . 41<br />

7.3.2 Basis für prozedural erstellte Städte . . . . . . . . . . . . . . . . . . 41<br />

7.4 <strong>3D</strong>-Keying als Alternative zum Chroma-Keying . . . . . . . . . . . . . . . . 42<br />

8 Fazit 43<br />

Literaturverzeichnis 45<br />

Bildquellen 47<br />

iv


1. Einleitung<br />

(Kurzen Einleitungstext einfügen) ToDo<br />

1.1 Ziel dieser Arbeit<br />

Diese Arbeit soll verschiedene Arten <strong>von</strong> <strong>3D</strong>-Scannern sowie verschiedene Algorithmen <strong>zur</strong><br />

<strong>Rekonstruktion</strong> <strong>von</strong> Modellen aus den Rohdaten dieser Scanner vorstellen und deren Vorund<br />

Nachteile insbesondere im Hinblick auf den Einsatz auf Enduserhardware gegenüberstellen.<br />

Kapitel 2 stellt eine kurze Einführung in die Thematik dar, in der Einsatzgebiete <strong>von</strong><br />

<strong>3D</strong>-Scannern sowie frühere Arbeiten zum Thema vorgestellt werden. Kapitel 3 soll einen<br />

kurzen Überblick über die grundlegenden Typen <strong>von</strong> Kamerasystemen und Scannern <strong>zur</strong><br />

dreidimensionalen Objekterfassung sowie deren Funktionsweise geben. Anschließend werden<br />

in den Kapiteln 4 und 5 einige <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>Szenen</strong> aus den<br />

Kamerarohdaten in Theorie und Praxis vorgestellt. Diese werden in 6 im Hinblick auf<br />

Einsatzgebiet, Geschwindigkeit und Qualität der <strong>Rekonstruktion</strong> miteinander verglichen.<br />

Abschließend werden in Kapitel 7 Überlegungen angestellt, inwieweit <strong>3D</strong>-Scanner in Zukunft<br />

beim Endanwender zum Einsatz kommen könnten.<br />

(Eigene Implementierung an richtiger Stelle einsortieren) ToDo<br />

1


2. Bisherige Arbeiten und Einsatzgebiete<br />

(Übernommen aus ” Einführung in die Thematik“. Entsprechend umarbeiten ToDo<br />

und auf Arbeiten verweisen)<br />

Im Lauf der letzten Jahre wurden verschiedenste Technologien <strong>zur</strong> Anfertigung <strong>von</strong> <strong>3D</strong>-<br />

Scans entwickelt. Wo noch vor kurzem Spezialhardware für mehrere tausend Euro nötig<br />

war, um wenigstens ein niedrig aufgelöstes Bild zu erhalten, da ist es jetzt – oder zumindest<br />

in sehr naher Zukunft – möglich, mit einem Mittelklasse-PC und günstigen Scannern oder<br />

Kameras sehr gute Ergebnisse zu erzielen.<br />

Mit dem Aufkommen mehr oder weniger bezahlbarer Systeme wurden diese schnell für<br />

eine Vielzahl <strong>von</strong> Anwendungen eingesetzt:<br />

Gestensteuerung<br />

In der aktuellen Spielekonsolengeneration geht der Trend weg vom klassischen Controller,<br />

bei dem Aktionen per Tastendruck ausgelöst werden und hin zu einer als natürlicher<br />

empfundenen Bewegungssteuerung. Während Nintendo und Sony auf Controller mit Beschleunigungssensoren<br />

und ein sehr rudimentäres optisches Tracking setzen, ist Microsofts<br />

Kinect eine <strong>3D</strong>-Kamera, die den gesamten Körper des Spielers erfasst. Somit kann die<br />

Spielfigur in begrenztem Umfang auf eine intuitive Weise direkt gesteuert werden. Ähnliche<br />

Ansätze sind auch für eine berührungslose Steuerung <strong>von</strong> PCs denkbar.<br />

Motion Capturing<br />

Zur Produktion <strong>von</strong> Videospielen und Animationsfilmen ist die realistische Wiedergabe<br />

<strong>von</strong> Bewegungsabläufen oft essentiell. Bis vor wenigen Jahren mussten diese entweder<br />

<strong>von</strong> Künstlern aufwändig <strong>von</strong> Hand erstellt oder aufwänding mittels am Körper eines<br />

Schauspielers angebrachten Markern und mehreren Kameras erfasst werden. Inzwischen<br />

gibt es Ansätze auf Basis <strong>von</strong> <strong>3D</strong>-Kameras, die denen <strong>zur</strong> Gestensteuerung ähneln. Sie<br />

erlauben es, Bewegungen ohne viel Vorbereitung an jedem beliebigen Ort zu filmen.<br />

Augmented Reality<br />

(Sinnvolle Beschreibung ausdenken) ToDo<br />

Akquisition<br />

Die manuelle Erstellung <strong>von</strong> <strong>3D</strong>-Modellen ist oft ein aufwändiger Prozess. Daher bietet es<br />

sich in einigen Fällen an, stattdessen reale Objekte zu scannen und bei Bedarf nachzubearbeiten.<br />

3


4 2. Bisherige Arbeiten und Einsatzgebiete<br />

Reproduktion<br />

Zusammen mit den immer häufiger werdenden <strong>3D</strong>-Druckern ermöglichen <strong>3D</strong>-Scans eine<br />

einfache Nachbildung <strong>von</strong> kleineren Gegenständen zum Beispiel aus Metall oder Kunststoff.<br />

Zwar ist nicht zu erwarten, dass die entsprechende Druckerhardware in absehbarer Zeit<br />

günstig genug wird, um für Privatabnehmer attraktiv zu werden, aber es existieren bereits<br />

einige Websites, deren Betreiber fremde Modelle günstig drucken.<br />

Robotik<br />

Für autonome Roboter ist es wichtig, ihre Umgebung einschätzen zu können, um sich zu<br />

orientieren, freie Lauf- beziehungsweise Fahrwege zu finden und bestimmte Objekte zu<br />

identifizieren. Viele dieser Aufgaben können durch die Verwendung <strong>von</strong> <strong>3D</strong>-Aufnahmen<br />

erfüllt werden.<br />

4


3. Überblick über verschiedene Typen<br />

<strong>von</strong> <strong>3D</strong>-Kamerasystemen und<br />

<strong>3D</strong>-Scannern<br />

Um <strong>Szenen</strong> und Objekte dreidimensional zu erfassen, gibt es zahlreiche verschiedene Systeme,<br />

die alle ihre jeweiligen Stärken und Schwächen aufweisen und sich auf unterschiedliche<br />

Art in Kategorien einordnen lassen:<br />

Grad der Interaktion mit der Szene<br />

Passive Systeme versuchen, aus normalen Farbfotos oder -videos Strukturen und Formen zu<br />

extrahieren, aus denen dann eine dreidimensionale Repräsentation errechnet wird. Hierbei<br />

findet keine direkte Interaktion mit der zu erfassenden Szene statt. Aktive optische<br />

Systeme interagieren dagegen insofern mit der Szene, dass sie diese mit einer LED oder<br />

einem Laser aktiv beleuchten und das reflektierte Licht erfassen, um daraus direkt die<br />

Entfernung zu Punkten in der Szene zu bestimmen. Kontaktbasierte Systeme weisen die<br />

stärkste Interaktion mit der Szene beziehungsweise dem zu vermessenden Objekt auf, da<br />

es – wie der Name andeutet – direkt berührt wird, um es zu vermessen. Diese Einteilung<br />

soll als Grundlage für den Aufbau dieses Kapitel dienen.<br />

Scanner gegenüber Kameras<br />

Scanner sind dadurch definiert, dass sie immer nur einen Punkt auf einmal erfassen können<br />

und durch Verschiebung oder Rotation der Messvorrichtung nach einem bestimmten Muster<br />

nach und nach die komplette Szene abarbeiten. Kameras hingegen nehmen tausende<br />

Bildpunkte gleichzeitig auf, was einen großen Geschwindigkeitsvorteil darstellt.<br />

Größe des erfassbaren Bereichs<br />

Während bestimmte <strong>Verfahren</strong> selbst auf mehrere hundert Meter Entfernung zu einem<br />

Objekt noch millimetergenaue Ergebnisse liefern und dadurch geeignet sind, große Areale<br />

am Stück zu erfassen, sind die meisten Systeme für Entfernungen <strong>von</strong> einigen Metern konzipiert<br />

und liefern darüber hinaus entweder nur sehr ungenaue oder gar keine Ergebnisse.<br />

Um abzuwägen, welche Hardware zum Einsatz kommen soll, gilt es also immer zu berücksichtigen,<br />

was genau erfasst werden soll und wie der Arbeitsaufwand auf Hard- und<br />

Software verteilt werden soll. Dabei gilt üblicherweise die Faustregel, dass komplexere<br />

5


6 3. Überblick über verschiedene Typen <strong>von</strong> <strong>3D</strong>-Kamerasystemen und <strong>3D</strong>-Scannern<br />

Hardware meist simplere <strong>Rekonstruktion</strong>sverfahren in der Software (siehe auch Kapitel 4)<br />

ermöglicht.<br />

3.1 Passive Systeme<br />

Als passive Systeme sind Kameras zu bezeichnen, die die aufzunehmenden Gegenstände<br />

weder optisch noch mechanisch selbst beeinflussen. Sie verlassen sich stattdessen ausschließlich<br />

auf die Verwendung <strong>von</strong> optischen Sensoren. Da die Szene nicht selbst beleuchtet<br />

wird, sind derartige Systeme in der Regel stark abhängig <strong>von</strong> den gegebenen Lichtverhältnissen.<br />

Bei un<strong>zur</strong>eichender oder räumlich inhomogener Beleuchtung können in der Regel<br />

nur stark verrauschte oder auch gar keine Ergebnisse erzielt werden.<br />

3.1.1 Monokulare Systeme<br />

Die aus Hardwaresicht einfachste Variante <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>Szenen</strong> besteht darin,<br />

die Bilddaten einer normalen Foto- oder Videokamera zu analysieren. Entsprechende <strong>Verfahren</strong><br />

können somit auch auf mobilen Plattformen wie etwa Mobiltelefonen zum Einsatz<br />

kommen. Durch einen hohen Verbreitungsgrad geeigneter Hardware sind derzeit die allermeisten<br />

Augmented Reality Anwendungen auf dem Markt für den Betrieb mit solchen<br />

monokularen Systemen ausgelegt.<br />

Dabei ist je nach Art und Anzahl der <strong>zur</strong> Verfügung stehenden Aufnahmen zwischen verschiedenen<br />

Möglichkeiten zum Einsatz <strong>von</strong> monokularen Systemen zu unterscheiden. Steht<br />

nur ein einzelnes Foto für die <strong>Rekonstruktion</strong> <strong>zur</strong> Verfügung, ist es oft nur möglich, Objekte<br />

und Strukturen, wie etwa in der Szene angebrachte Marker grob zu erkennen und<br />

zu isolieren. Um ein echtes dreidimensionales Modell zu erhalten, enthält ein Einzelbild<br />

aber meist nicht genug Informationen. Allerdings ist es durch zusätzliche Benutzereingaben,<br />

die weitere Informationen über den Aufbau der Szene liefern, teilweise möglich,<br />

zumindest ein grobes Modell zu erstellen [1]. Diese Informationen können zum Beispiel<br />

eine grobe Unterteilung in Quader, Zylinder und andere Primitive, sowie Angaben über<br />

Symmetrieeigenschaften beinhalten (Siehe auch 4.1).<br />

Um diese Probleme zu umgehen, werden in der Regel mehrere Bilder verwendet, die die<br />

Szene aus unterschiedlichen Blickwinkeln zeigen. Mit diesen verschiedenen Ansichten ist<br />

es dann möglich, mittels sogenannter ” Structure from Motion“ <strong>Verfahren</strong> (SFM) genauere<br />

Aussagen über die Räumliche Lage und Ausdehnung der einzelnen Objekte zu machen.<br />

Dazu ist es allerdings notwendig, dass verschiedene Parameter bekannt sind. Darunter<br />

fallen etwa die Brennweite des verwendeten Objektivs und die Verschiebung der Kamera<br />

zwischen den Aufnahmen. Je nach Zusammenhang der Bilder müssen dabei unterschiedliche<br />

Probleme gelöst werden. Bei Videostreams oder nahe beieinander aufgenommenen<br />

Einzelbildern ist es verhältnismäßig einfach, Korrespondenzen zwischen den Bildelementen<br />

zu ermitteln, während für die die Bestimmung der Kamerabewegung nicht genug Anhaltspunkte<br />

vorliegen, um ein rauschfreies Ergebnis zu erhalten. Das andere Extrem sind<br />

annähernd willkürlich zusammengestellte Fotosammlungen wie in [2]. Bei diesen liegt das<br />

Hauptproblem darin, überhaupt Korrespondenzen zwischen den Bildern zu finden, da in<br />

der Regel vorab nicht einmal ungefähre Schätzungen <strong>zur</strong> Kameraposition verfügbar sind.<br />

Außerdem sind in einem solchen Szenario bei weitem nicht alle Parameter bekannt, die<br />

<strong>zur</strong> Korrektur der Objektiveigenschaften benötigt werden. Diese müssen daher direkt aus<br />

den Fotos bestimmt werden.<br />

Ein weiterer unangenehmer Nebeneffekt bei der Verwendung <strong>von</strong> mehreren Bildern – egal<br />

ob nahe beeinander oder nicht – ist eine generelle Anfälligkeit gegenüber Bewegung in der<br />

Szene. Durch sich verändernde Konturen wird das Finden <strong>von</strong> Zusammenhängen zwischen<br />

zwei Bildern erschwert, was im Extremfall dazu führen kann, dass die Kameraposition nicht<br />

6


3.2. Aktive Systeme 7<br />

mehr korrekt bestimmt werden kann oder Objekte falsch zueinander zugeordnet werden.<br />

So könnte zum Beispiel ein vorbeifahrendes Auto, das nur in einigen wenigen Aufnahmen<br />

zu sehen ist, fälschlicherweise als Teil einer Hauswand erkannt werden.<br />

3.1.2 Stereoskopische Systeme<br />

Stereoskopische (oder binokulare) Kamerasysteme bestehen aus zwei Kameras, die gemeinsam<br />

auf einem Gestell oder in einem Gehäuse montiert sind, und jeweils gleichzeitig Bilder<br />

aufnehmen. Prinzipiell sind auch größere Kameraverbünde denkbar, dies ist aber eher unüblich.<br />

Derartige Systeme funktionieren auf der Softwareseite ähnlich, wie wenn man mit<br />

den im vorherigen Abschnitt beschriebenen monokularen Kamerasystemen mehrere Bilder<br />

hintereinander an unterschiedlichen Orten aufnimmt. Der Hauptunterschied besteht darin,<br />

dass zumindest die ungefähre Ausrichtung der Kameras zueinander im Voraus bekannt ist<br />

und somit nicht aus den Bilddaten berechnet werden muss. Eine entsprechende Berechung<br />

muss nur noch durchgeführt werden, um die Positionsdaten zu verfeinern, etwa falls die<br />

Abmessungen der Hardware nicht exakt bekannt sind oder eine Verformung der Hardware<br />

durch Wärme oder mechanische Spannungen zu befürchten ist. Eine vollständige Positionsbestimmung<br />

ist nur dann notwendig, wenn mehrere Bildpaare <strong>zur</strong> Verwendung mit<br />

SFM <strong>Verfahren</strong> aufgenommen werden. Dies ist aber wesentlich einfacher als bei monokularen<br />

Systemen, da zu jedem Zeitpunkt schon eine grobe <strong>Rekonstruktion</strong> der Szene <strong>zur</strong><br />

Verfügung steht, über die Korrespondenzen leichter gefunden werden können, als mit Einzelbildern.<br />

Aus ähnlichen Gründen ist die Problematik mit sich bewegenden <strong>Szenen</strong>teilen<br />

auch weniger kritisch, da auch deren dreidimensionale Position mit einem einzelnen Bildpaar<br />

abschätzbar ist und somit die Chance verringert wird, dass sie fehlerhaft mit anderen<br />

<strong>Szenen</strong>teilen identifiziert werden.<br />

Ein weiteres Einsatzgebiet für stereoskopische Kamerasysteme sind Anwendungsszenarien,<br />

in denen gar keine tatsächliche dreidimensionale <strong>Rekonstruktion</strong> notwendig ist, sondern<br />

nur eine dreidimensionale Wiedergabe vorgegebener Kameraeinstellungen erzielt werden<br />

soll. Prominentestes Beispiel sind die in den letzten Jahren sehr populär gewordenen <strong>3D</strong>-<br />

Kinofilme. Zwar wäre es auch möglich, eigentlich zweidimensionales Bildmaterial so nachzubearbeiten,<br />

dass zwei Bildspuren <strong>zur</strong> stereoskopischen Darstellung gewonnen werden<br />

können, diese wirken aber oft mehr wie eine Sammlung <strong>von</strong> Pappaufstellern als wie eine<br />

tatsächlich plastische Szene. Diese Technik wird daher in der Regel nur angewendet, wenn<br />

bereits zweidimensionales Bildmaterial vorliegt, das weiterverwendet werden soll, etwa bei<br />

der Aufarbeitung <strong>von</strong> älteren Filmen <strong>zur</strong> Wiederveröffentlichung in <strong>3D</strong> und in Fernsehern,<br />

die das zweidimensionale Fernsehsignal in Echtzeit in einen <strong>3D</strong>-Film konvertieren. Für die<br />

Neuproduktion <strong>von</strong> Filmen ist es dagegen am geschicktesten, stereoskopische Kamerasysteme,<br />

bei denen der Abstand zwischen den beiden Kameras in etwa dem menschlichen<br />

Augenabstand entspricht, einzusetzen. Das gewonnene Bildmaterial kann ohne weitere<br />

Nachbearbeitung stereoskopisch wiedergegeben werden und sorgt für einen wesentlich realistischeren<br />

Tiefeneindruck. Ähnliche Systeme existieren auch für <strong>3D</strong>-Fotografie, sind aber<br />

wesentlich weniger populär geworden.<br />

3.2 Aktive Systeme<br />

Als aktive Systeme werden Kameras und Scanner bezeichnet, die anstatt oder zusätzlich<br />

zu einem normalen Farbbild eine direkte Tiefenmessung vornehmen. Dazu wird die Szene<br />

in der Regel gezielt mit einem Infrarotlaser beleuchtet und je nach Kameratyp aus<br />

verschiedenen Eigenschaften der Reflexion ein Tiefenwert ermittelt.<br />

Gegenüber passiven Systemen haben aktive Systeme verschiedene Vor- und Nachteile. Da<br />

meist für jeden Bildpunkt eine eigene Tiefenmessung durchgeführt wird, müssen keine<br />

7


8 3. Überblick über verschiedene Typen <strong>von</strong> <strong>3D</strong>-Kamerasystemen und <strong>3D</strong>-Scannern<br />

Tiefenwerte aus explizit identifizierten Bildelementen errechnet werden. Somit ist es ohne<br />

Probleme möglich, auch <strong>Szenen</strong> mit wenigen Details zu erfassen. Durch die aktive Beleuchtung<br />

der Szene können außerdem auch in schlecht beleuchteten Räumen gute Ergebnisse<br />

erzielt werden. Im Freien kann diese Eigenschaft aber auch schnell zum Nachteil werden,<br />

falls starkes Sonnenlicht das ausgesendete Infrarotlicht überstrahlt.<br />

3.2.1 Time of Flight Laserscanner<br />

Wie der Name bereits verrät, messen Time of Flight Laserscanner – teilweise auch mit dem<br />

verwandten Begriff LIDAR (LIght Detection And Ranging) bezeichnet – die Entfernung<br />

d zu einem Objekt über die Zeit t, die ein kurzer Laserimpuls braucht, um die Strecke<br />

vom Scanner zum Objekt und wieder <strong>zur</strong>ück zu überbrücken. Sobald der Laserimpuls<br />

abgegeben wird, startet ein Timer, der gestoppt wird, sobald das reflektierte Licht den<br />

Sensor trifft. Die Entfernung ergibt sich dann mit Hilfe der Lichtgeschwindigkeit c sehr<br />

einfach aus folgender Formel.<br />

d =<br />

Die wesentliche Limitierung <strong>von</strong> Systemen nach dem Time of Flight Prinzip sind die sehr<br />

kurzen Zeitintervalle, die auftreten. Um eine Strecke <strong>von</strong> einem Millimeter hin und <strong>zur</strong>ück<br />

zu überbrücken, benötigt Licht nur ungefähr 6,7 Picosekunden. Daher müssen sehr schnelle<br />

Timer und Laser, die in der Lage sind, einen sehr kurzen Impuls abzugeben, eingesetzt<br />

werden, um präzise Messungen durchzuführen.<br />

Abhängig <strong>von</strong> der Wellenlänge und Stärke des eingesetzten Lasers ist es im Gegensatz zu<br />

den meisten anderen Arten <strong>von</strong> Systemen möglich, Messungen über sehr lange Distanzen<br />

bis hin zu einigen Kilometern vorzunehmen, ohne dabei allzuviel an Genauigkeit zu verlieren.<br />

Bei der Wahl des Lasers muss dabei jedoch darauf geachtet werden, dass dieser für<br />

die meisten Anwendungen aus Sicherheitsgründen nicht zu stark sein darf, damit er das<br />

menschliche Auge nicht beschädigt. Gerade Wellenlängen im Infrarotbereich werden zwar<br />

noch vom menschlichen Auge auf die Netzhaut fokusiert, führen aber nicht mehr zu einem<br />

Lidschlussreflex, wodurch es <strong>zur</strong> Erblindung kommen kann.<br />

Der entscheidende Nachteil bei Laserscannern besteht darin, dass zu jedem Zeitpunkt nur<br />

die Entfernung zu einem einzigen Punkt gemessen werden kann. Um mehrere Punkte zu<br />

messen, muss entweder der gesamte Scanner bewegt oder der Laser über einen beweglichen<br />

Spiegel abgelenkt werden. So sind – ausreichend präzise Mechanik vorausgesetzt – prinzipiell<br />

beliebig hochauflösende Aufnahmen möglich. Dieser Vorteil wird allerdings mit einer<br />

längeren Aufnahmedauer erkauft, da es eine gewisse Zeit dauert, die Mechanik zu bewegen.<br />

Außerdem gilt zu bedenken, dass mechanische Komponenten in der Regel die Robustheit<br />

eines Geräts beeinträchtigen können, da sie wesentlich anfälliger für Beschädigungen sind,<br />

als feststehende Bauteile.<br />

Somit sind Laserscanner insbesondere dann geeignet, wenn entweder nur wenige weitentfernte<br />

Punkte oder große, statische <strong>Szenen</strong>, wie etwa Gebäude und Landschaften vermessen<br />

werden sollen. Sich schnell bewegende Objekte in der Szene werden dagegen unter Umständen<br />

ähnlich wie bei Fotokameras mit Schlitzverschluss verzerrt dargestellt und eine<br />

schnelle Bewegung des Scanners kann dazu führen, dass dieser Effekt die gesamte Aufnahme<br />

betrifft, wodurch diese quasi unbrauchbar wird.<br />

3.2.2 Time of Flight Kameras<br />

Ähnlich wie Time of Flight Laserscanner verwenden auch Time of Flight Kameras die<br />

Zeit, die ein Lichtimpuls benötigt, um den Weg zum Ziel und <strong>zur</strong>ück zu überbrücken <strong>zur</strong><br />

8<br />

t · c<br />

2


3.2. Aktive Systeme 9<br />

Distanzmessung. Statt mit einem fokusierten Laser einen einzelnen Punkt zu beleuchten,<br />

wird die gesamte Szene auf einmal für einen kurzen Moment beleuchtet. Dies kann zum<br />

Beispiel mit speziellen Hochgeschwindigkeits-LEDs geschehen. Die Sensorkomponente entspricht<br />

ungefähr der einer herkömmlichen digitalen Fotokamera, mit dem Unterschied, dass<br />

jeder Pixel des Sensors statt der Lichtintensität in verschiedenen Wellenlängenbereichen<br />

die verstrichene Zeit seit dem letzten Lichtimpuls misst. Um Störungen durch einfallendes<br />

Umgebungslicht zu vermindern, ist die Kamera in der Regel zusätzlich mit einem Bandpassfilter<br />

ausgestattet, der nur den relevanten Lichtanteil durchlässt. Insgesamt kann also<br />

vollständig auf anfällige mechanische Komponenten verzichtet werden. Dies begünstigt<br />

außerdem eine sehr kompakte Bauweise, was dazu führt, dass viele kommerzielle Time of<br />

Flight Kameras nur in etwa so groß sind, wie eine handelsübliche Webcam.<br />

Durch die parallele Erfassung aller Bildpunkte <strong>zur</strong> gleichen Zeit sind sehr hohe Bildwiederholraten<br />

realisierbar, wodurch ein Einsatz in Echtzeitanwendungen ermöglicht wird. Diese<br />

hohen Bildwiederholraten können unter anderem auch dazu genutzt werden, mehrere Messungen<br />

schnell hintereinander durchzuführen und diese dann zu mitteln, um Messrauschen<br />

zu unterdrücken. Da jeder Pixel im Sensor eine eigene Zähleinheit benötigt und deshalb<br />

deutlich komplexer ist, als zum Beispiel bei CMOS Bildsensoren, ist die Auflösung im<br />

Vergleich zu Fotokameras stark beschränkt. So weisen zum Zeitpunkt dieser Ausarbeitung<br />

kommerziell erhältliche Time of Flight Kameras wie etwa die Fotonic D70 1 und die Soft-<br />

Kinectic DepthSense DS311 2 typischerweise eine Auflösung <strong>von</strong> lediglich 160x120 Pixeln<br />

auf. Schuon et al. nennen in [3] übliche Auflösungen bis 320x240 Pixel.<br />

Eine weitere Methode <strong>zur</strong> Distanzmessung besteht darin, statt einzelnen Lichtimpulsen<br />

ein kontinuierliches, moduliertes Signal auszusenden [4]. Die Distanz d lässt sich dann aus<br />

der Frequenz fm, mit der das Signal moduliert wird und der Phasenverschiebung φ des<br />

empfangenen Lichts gegenüber dem ausgesendeten Licht berechnen:<br />

d = cφ<br />

4πfm<br />

Damit können zwar sehr präzise Ergebnisse erreicht werden, aber die maximale Distanz<br />

dmax, für die korrekte Messungen möglich sind, ist durch die Periodendauer beziehungsweise<br />

Frequenz der Modulation beschränkt.<br />

dmax = c<br />

Damit ergibt sich zum Beispiel für eine Frequenz fm = 50MHz eine maximale Distanz<br />

dmax ≈ 3m. Distanzen <strong>von</strong> mehr als dmax werden inkorrekt als d ′ = d mod dmax erfasst.<br />

3.2.3 Structured Light Systeme<br />

Als Structured Light Systeme werden Vorrichtungen bezeichnet, die aus einer Projektionseinheit<br />

und einer Kamera bestehen. Die Projektionseinheit wirft ein bestimmtes Lichtmuster<br />

auf die Szene, dessen Reflexion <strong>von</strong> der Kamera aufgenommen wird. Anhand der<br />

Verzerrung des beobachteten Musters lässt sich – bei bekannter relativer Position <strong>von</strong><br />

Projektor und Kamera zueinander – leicht feststellen, wie die beleuchtete Oberfläche beschaffen<br />

ist.<br />

In einer sehr einfachen Variante wird durch eine entsprechende Blende ein einzelner schmaler<br />

Lichtstreifen projiziert, dessen verzerrtes Ebenbild dann eine (möglicherweise) unterbrochene<br />

Kurve ist. Dieser Streifen kann bewegt werden, um nach und nach den gesamten<br />

2fm<br />

1 http://www.fotonic.com/assets/documents/fotonic_d70_highres.pdf<br />

2 http://www.softkinetic.com/Portals/0/DEPTHSENSE_DS311_DATAHSHEET_V1.3.pdf<br />

9


ToDo<br />

ToDo<br />

10 3. Überblick über verschiedene Typen <strong>von</strong> <strong>3D</strong>-Kamerasystemen und <strong>3D</strong>-Scannern<br />

für die Kamera sichtbaren Ausschnitt der Szene abzudecken. In diesem Fall würde es sich<br />

um eine Mischform aus Scanner und Kamerasystem handeln. Üblicher ist es aber, mehrere<br />

Lichtstreifen nebeneinander oder andere Lichtmuster, die den gesamten für die Kamera<br />

sichtbaren Bereich auf einmal abdecken, zu projizieren. Falls die Zuordnung eines beleuchteten<br />

Pixels im Bild zu einem bestimmten Teil des projizierten Musters nicht eindeutig<br />

ist, kann durch gezielte Veränderung des Musters im Laufe der Zeit Klarheit geschaffen<br />

werden. Dazu muss die Blende durch ein kleines Display, wie es auch in Videoprojektoren<br />

eingesetzt wird, ersetzt werden. Bei Streifenmustern bietet es sich beispielsweise an, die<br />

Streifen der Reihe nach durchzunummerieren und diese Nummern durch abwechselndes<br />

Ein- und Ausblenden der einzelnen Streifen darzustellen.<br />

(Vor- und Nachteile hier sammeln)<br />

3.2.3.1 Microsoft Kinect<br />

Abbildung 3.1: Microsoft Kinect [16]<br />

Ein in den letzten Jahren häufig eingesetztes Structured Light System ist die ursprünglich<br />

als berührungsloser Spielecontroller für die Xbox 360 konzipierte und <strong>von</strong> Prime Sense<br />

entwickelte ” Microsoft Kinect“. Sie wurde am 1. Juni 2009 auf der E3 unter dem Arbeitstitel<br />

” Project Natal“ vorgestellt und enthält neben der <strong>3D</strong>-Kamera auch ein Mikrofonarray<br />

<strong>zur</strong> dreidimensionalen Tonerfassung. Bereits wenige Tage nach irher Veröffentlichung im<br />

November 2010 erschienen erste inoffizielle Treiber für Linux und Microsoft Windows. Im<br />

Juni 2011 zog Microsoft selbst mit dem offiziellen Kinect SDK nach. Dieses steht derzeit<br />

für nichtkommerzielle Projekte sowie Forschungszwecke kostenlos <strong>zur</strong> Verfügung. Am 1.<br />

Februar 2012 wurde eine neue Version des Kinect SDKs veröffentlicht. Diese erlaubt nun<br />

auch den Einsatz in kommerziellen Projekten. Gleichzeitig kam eine neue Auflage des Kinect<br />

Sensors unter dem Namen ” Kinect for Windows“ auf den Markt. Dieser unterscheidet<br />

sich abgesehen <strong>von</strong> minimalen Änderungen im Gehäusedesign hardwareseitig nicht <strong>von</strong> der<br />

Xbox 360 Version, weist aber eine verbesserte Firmware auf, die verschiedene Stufen der<br />

Vorverarbeitung optimiert.<br />

Die Projektionseinheit besteht aus einem Infrarotlaser und einer Lochmaske mit einem<br />

unregelmäßigen Punktmuster. Als Kamera kommt ein CMOS Sensor hinter einem Infrarotfilter<br />

zum Einsatz. Das beobachtete Punktmuster (Abbildung 3.2(a)) wird <strong>von</strong> einem<br />

Prozessor in der Kinect mit einem Referenzbild verglichen. Die gewonnenen Tiefeninformationen<br />

werden als 640x480 Pixel großes 12-bit Monochrombild (Abbildung 3.2(b)) über<br />

USB an die Konsole beziehungsweise den Rechner gesendet. Hierbei bedeutet ein Wert<br />

<strong>von</strong> 0, dass keine gültige Tiefeninformation für den entsprechenden Pixel berechnet werden<br />

konnte, während Werte <strong>von</strong> 1 bis 4095 die Entfernung in Millimetern angeben. Die<br />

Bildwiederholfrequenz beträgt im Schnitt 30 Hz. Laut Microsoft können mit dieser Methode<br />

im Bereich <strong>von</strong> 1,2 bis 3,5 Metern Entfernung vom Sensor bei der ursprünglichen<br />

Kinect für die Xbox 360 sowie 0,4 bis 3,5 Metern für die Kinect for Windows sinnvolle<br />

Tiefeninformationen gewonnen werden (Quelle, z.B. Kinect SDK Programming<br />

10


3.3. Kontaktbasierte <strong>3D</strong>-Scanner 11<br />

(a) Rohdaten (b) Tiefeninformationen<br />

Abbildung 3.2: Rohdaten des IR-Sensors der Kinect und die daraus berechneten Tiefeninformationen<br />

visualisiert über einen Farbverlauf <strong>von</strong> weiß (nah) nach blau<br />

(fern) [17, 18]<br />

Guide). Tests im Rahmen dieser Arbeit haben aber ergeben, dass auch die ursprüngliche<br />

Kinect schon ab einem Abstand <strong>von</strong> ca. 0,7 Metern Werte liefert.<br />

Die Kinect hat außerdem einen RGB-Sensor an Bord, der bis zu 1280x1024 Pixel große<br />

Farbbilder bei einer Bildwiederholfrequenz <strong>von</strong> 30 Hz liefert. (ggf. über Zusammenfüh- ToDo<br />

rung <strong>von</strong> Farb- und Tiefeninformationen schreiben)<br />

Die Kinect wurde auf Grund ihrer kompakten Bauform und ihres geringen Preises (ca.<br />

125 Euro für die ursprüngliche Kinect und ca. 190 Euro für die überarbeitete Kinect for<br />

Windows, Stand Februar 2012) schnell <strong>zur</strong> bevorzugten <strong>3D</strong>-Hardware sowohl für Hobbyentwickler<br />

als auch für verschiedene Forschungsgruppen. (Beispiele) ToDo<br />

3.3 Kontaktbasierte <strong>3D</strong>-Scanner<br />

Neben den vorgestellten optischen Erfassungssystemen gibt es auch nichtoptische Systeme,<br />

die das zu scannende Objekt mechanisch abtasten. Dazu muss dieses auf einer flachen<br />

Unterlage platziert und eventuell fixiert werden, damit es während der Erfassung nicht verrutschen<br />

kann. Anschließend wird es mit einem am Scanner befestigten Berührungssensor<br />

Punkt für Punkt abgetastet. Die Positionierung des Sensors erfolgt entweder über eine in<br />

X-, Y- und Z-Richtung bewegliche Apperatur oder über einen Roboterarm mit mehreren<br />

Gelenken. Letztere Variante ist insbesondere dann <strong>von</strong> Vorteil, wenn nichtkonvexe Objekte<br />

gescannt werden sollen. In diesem Fall kann ein ausreichend schlanker und beweglicher<br />

Roboterarm auch in schmale Hohlräume vordringen und deren Innenseite abtasten. Sobald<br />

eine Berührung registriert wird, kann aus der Stellung der beweglichen Komponenten des<br />

Scanners die exakte Position des Sensors bestimmt werden.<br />

Moderne kontaktbasierte <strong>3D</strong>-Scanner erreichen Genauigkeiten im Bereich <strong>von</strong> wenigen Mikrometern<br />

und sind somit wesentlich präziser als die meisten optischen Systeme. Allerdings<br />

leiden sie unter ähnlichen Nachteilen, wie andere Scanner. Da immer nur ein Punkt gleichzeitig<br />

erfasst werden kann und die mechanische Bewegung des Sensors eine gewisse Zeit<br />

benötigt, um ein Objekt vollständig zu erfassen, wodurch eine Erfassung <strong>von</strong> sich bewegenden<br />

Objekten schwer bis unmöglich wird. Durch den nötigen physikalischen Kontakt zum<br />

Objekt wird auch die Art der erfassbaren Objekte stark eingeschränkt. Elastische Objekte<br />

führen eventuell zu fehlerhaften Messungen, da sie sich bei jeder Punktmessung verformen<br />

11


12 3. Überblick über verschiedene Typen <strong>von</strong> <strong>3D</strong>-Kamerasystemen und <strong>3D</strong>-Scannern<br />

können. Aus dem gleichen Grund ist auch die Erfassung <strong>von</strong> zerbrechlichen und sehr wertvollen<br />

Gegenständen problematisch, da diese dabei dauerhaft beschädigt werden können.<br />

Ein weiteres Problem ist, dass die maximale Größe des erfassbaren Objekts direkt durch<br />

die Ausmaße des Scanners vorgegeben ist. Bei Scannern mit frei beweglichem Arm ist es<br />

unter Umständen noch möglich, große Objekte in mehreren Arbeitsschritten zu scannen,<br />

zwischen denen es neu ausgerichtet wird. Bei Scannern, die den Sensor entlang <strong>von</strong> drei<br />

festen Achsen verschieben, ist dies aber konstruktionsbedingt meistens unmöglich. Eine<br />

Erfassung ganzer <strong>Szenen</strong> ist aus naheliegenden Gründen auch nicht möglich.<br />

Daher werden kontaktbasierte Scanner hauptsächlich in der Industrie genutzt, um stichprobenartig<br />

zu kontrollieren, ob ein gefertigtes Werkstück die in der Vorlage geforderten<br />

Maße einhält. Dort ist die Geschwindigkeit zweitrangig und es ist im Voraus planbar, für<br />

welche Gegenstände der Scanner geeignet sein muss.<br />

12


4. <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong><br />

<strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten<br />

Da es schwierig bis unmöglich ist, einen Algorithmus zu entwickeln, der alle denkbaren<br />

<strong>Szenen</strong> zufriedenstellend rekonstruieren kann, wurde im Lauf der Zeit eine Vielzahl an<br />

<strong>Rekonstruktion</strong>sverfahren entwickelt, die jeweils für einen bestimmten Spezialfall optimiert<br />

sind und für andere Arten <strong>von</strong> <strong>Szenen</strong> oder andere Eingabeformate kaum zu gebrauchen<br />

sind. In den folgenden Abschnitten dieser Ausarbeitung sollen drei sehr unterschiedliche<br />

dieser anwendungsspezifischen <strong>Verfahren</strong> im Detail vorgestellt werden.<br />

4.1 <strong>Rekonstruktion</strong> <strong>von</strong> Gebäudefassaden mit Hilfe <strong>von</strong> Symmetrieeigenschaften<br />

Bereits 1996 stellten Debevec et al. in [1] ein halbautomatisches <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong><br />

aus einem oder mehreren Fotos vor, das sich die Tatsache zu nutze macht, dass viele<br />

<strong>Szenen</strong> und Objekte aus einfachen geometrischen Primitiven wie Quadern und Pyramiden<br />

aufgebaut sind, die sich häufig wiederholen oder symmetrisch angeordnet sind. Wenn diese<br />

Primitive und deren Symmetrieeigenschaften vom Benutzer grob vorgegeben werden,<br />

werden die Parameter automatisiert verfeinert, bis das gewünschte Ergebnis erreicht wird.<br />

Damit können bei symmetrischen Gebäuden selbst mit einem einzigen Foto viele Elemente<br />

rekonstruiert werden. Auch solche, die im Foto gar nicht sichtbar sind.<br />

Einen ähnlichen Ansatz verfolgt auch ein 2012 vorgestelltes <strong>Verfahren</strong> <strong>von</strong> Ceylan et al.<br />

[5], das im Folgenden näher vorgestellt werden soll. Im Gegensatz zum erstgenannten<br />

<strong>Verfahren</strong> muss der Benutzer keinerlei Angaben im Voraus machen, sondern lediglich die<br />

vom Computer erkannten Bildelemente prüfen und gegebenenfalls Hinweise geben, um<br />

das rekonstruierte Modell zu verfeinern oder ergänzen. Ein weiterer Unterschied besteht<br />

darin, dass statt Blockprimitiven Ebenen <strong>zur</strong> Darstellung <strong>von</strong> groben Strukturen und eine<br />

Kombination aus Linien als Konturen und eines Offsetwerts für eine reliefartige Darstellung<br />

<strong>von</strong> Details zum Einsatz kommen. (Formulierung im letzten Satz) ToDo<br />

4.1.1 Vorverarbeitung und Kantenerkennung<br />

Vor der eigentlichen <strong>Rekonstruktion</strong> müssen einige Vorverarbeitungsschritte durchlaufen<br />

werden, um die Linien im dreidimensionalen Raum, aus denen später das Modell rekonstruiert<br />

wird, zu isolieren. Obwohl nicht alle gewonnenen Informationen sofort benötigt<br />

13


ToDo<br />

14 4. <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten<br />

werden, ist es <strong>von</strong> Vorteil, so viel wie möglich an Arbeit in den Vorverarbeitungsschritt<br />

zu verlagern, um dem Benutzer im interaktiven Teil des <strong>Verfahren</strong>s lange Wartezeiten zu<br />

ersparen.<br />

Als Grundlage für die <strong>Rekonstruktion</strong> müssen für jedes der Eingabebilder Ii sowohl die<br />

Positionen und Abbildungseigenschaften der verwendeten Kamera als auch die Lage der<br />

in den Bildern sichtbaren Kanten bestimmt werden. Dabei ist zu beachten, dass im Allgemeinen<br />

nicht genau bekannt ist, welche Kamera und welches Objektiv verwendet wurden.<br />

Unter der vereinfachenden Annahme, dass das Bild nicht in sich verzerrt ist, reicht aber<br />

die Brennweite aus, um die Abbildungsmatrix der Kamera näherungsweise zu bestimmen.<br />

Ein mögliches <strong>Verfahren</strong> wird in [6] beschrieben. Im Idealfall lässt sich die Brennweite aus<br />

den <strong>von</strong> der Kamera an das Bild angehängte EXIF-Daten auslesen. Ansonsten muss sie<br />

aus dem Bild selbst oder dem Vergleich mit anderen Bildern bestimmt werden. Dies soll<br />

aber nicht Teil dieser Ausarbeitung sein.<br />

Da der <strong>Rekonstruktion</strong>salgorithmus hauptsächlich Linien als Eingabe verwendet, müssen<br />

diese zunächst aus den Eingabebildern extrahiert werden. Zunächst wird mit Hilfe eines<br />

einfachen Filters <strong>zur</strong> Kantenerkennung im Bildraum zu jedem Foto eine Grafik erstellt,<br />

in der ausschließlich die Kanten hervorgehoben sind. Die hervorgehobenen Pixel werden<br />

anschließend zu zusammenhängenden Konturen gruppiert, welche im letzten Schritt durch<br />

gerade Linien approximiert werden. Die Implementierung <strong>von</strong> Ceylan et al. verwendet<br />

hierzu ein Matlabskript <strong>von</strong> Peter Kovesi 1 . Da das vorgestellte <strong>Rekonstruktion</strong>sverfahren<br />

im Wesentlichen auf nichtorganische Objekte spezialisiert ist, ist eine Approximation der<br />

Kanten durch gerade Linien unproblematisch.<br />

Im letzten Vorverarbeitungsschritt werden die zuvor gefundenen zweidimensionalen Linien<br />

L 2 (Ii) aus den verschiedenen Bildern einander zugeordnet. Dies geschieht als iterativer<br />

Prozess, in dem in jedem Schritt neue Linienzuordnungen, die korrespondierenden Linien<br />

L 3 im dreidimensionalen Raum sowie die Kamerapositionen berechnet werden können.<br />

Hierbei werden Linienpaare schon bei sehr geringen Abweichungen verworfen, um zu verhindern,<br />

dass falsch erkannte Kanten – wie etwa aus Spiegelungen – die <strong>Rekonstruktion</strong><br />

negativ beeinflussen. Dabei wird in Kauf genommen, dass auch eigentlich valide Kanten<br />

verloren gehen, da diese in der Regel in späteren Verarbeitungsschritten durch die Ausnutzung<br />

<strong>von</strong> Symmetrien oder durch Benutzerinteraktion wiederhergestellt werden können.<br />

(Falls Zeit ist, Details herausfinden. Das Paper ist da nicht sehr ausführlich)<br />

4.1.2 Identifikation <strong>von</strong> Oberflächen<br />

Bevor Details rekonstruiert werden können, wird zunächst versucht, große Flächen wie etwa<br />

Wände zu erkennen, auf denen diese Details dann später aufgebracht werden. Kandidaten<br />

für solche Flächen sind Ebenen, in denen vielen Linien aus L 3 liegen. Um diese Ebenen zu<br />

identifizieren, wird zunächst für zwei zufällig aus L 3 Linien li = (v1, v2) und lj = (v3, v4)<br />

geprüft, ob sie in einer Ebene liegen. Dies geschieht, indem für die beiden Vierecken, die<br />

sich aus den Endpunkten der Linien bilden lassen, jeweils geprüft wird, ob sich deren<br />

Diagonalen schneiden. Für das erste Viereck sieht die Bedingung folgendermaßen aus:<br />

�<br />

v1 + v3<br />

−<br />

2<br />

�⊤ v2 + v4 (v1 − v3) × (v2 − v4)<br />

·<br />

≈ 0<br />

2 �(v1 − v3) × (v2 − v4)�<br />

Für das mögliche Viereck sind v3 und v4 gerade vertauscht. Es ist zu beachten, dass<br />

eine gewisse Abweichung toleriert wird, um Rundungs- und Messfehler zu berücksichtigen.<br />

Wenn auf diese Weise eine Ebene gefunden wird, erfolgt ein Test, ob weitere Linien, die<br />

1 http://www.csse.uwa.edu.au/~pk/research/matlabfns/#edgelink<br />

14


4.1. <strong>Rekonstruktion</strong> <strong>von</strong> Gebäudefassaden mit Hilfe <strong>von</strong> Symmetrieeigenschaften 15<br />

noch keiner Ebene zugeordnet wurden, in der Ebene liegen. Ab einem Grenzwert <strong>von</strong> etwa<br />

3 bis 5% aller Linien wird die Ebene zu einer Menge P hinzugefügt und die Linien, die<br />

den Test bestanden haben, als dieser Ebene zugeordnet markiert. Eine Ausnahme bilden<br />

Linien, die sich nahe der Grenze zu einer anderen Ebene aus P befinden, da sie zu mehreren<br />

Ebenen gehören könnten. Dieser Schritt wird wiederholt, bis da<strong>von</strong> ausgegangen werden<br />

kann, dass alle wichtigen Oberflächen der Szene erkannt wurden.<br />

4.1.3 Zuordnung der Bildpixel <strong>zur</strong> entsprechenden Oberfläche<br />

Sobald die Lage der Ebenen gefunden ist, gilt es, die Pixel jedes Bildes Ii zu einer dieser<br />

Oberflächen zuzuordnen und das Bild somit zu segmentieren. Um optimale Ergebnisse zu<br />

erhalten, ohne zu viele Eingaben vom Benutzer zu verlangen, wird das Bild zunächst mittels<br />

eines Optimierungsverfahrens für Markov Random Fields [7] und anhand der Schnittgeraden<br />

der Ebenen automatisch vorsegmentiert.<br />

Für das MRF <strong>Verfahren</strong> werden für jede mögliche Zuordnung eines Pixels zu einer Ebene<br />

zwei Werte zum Bilden einer Kostenfunktion herangezogen, die optimiert werden soll. Der<br />

erste dieser beiden Werte, der data-term“ Edata beschreibt, wie genau die dreidimensionale<br />

”<br />

Position eines Pixels bestimmt werden kann. Da alle für Pixel p, die nicht auf einer in das<br />

Bild Ii projizierten Linien l ∈ L3→2 liegen, zunächst gar keine Aussage über deren Lage<br />

i<br />

relativ zu den Ebenen gemacht werden kann und somit jede Zuordnung als gut angesehen<br />

wird, wird diesen Pixeln für alle Ebenen Pj ∈ P der Wert Edata(p, Pj) = e0 zugewiesen.<br />

Für Pixel p ∈ l für ein beliebiges l ∈ L3→2 kann dagegen der Abstand zu einer Ebene Pj<br />

als Maß für die Güte der Abschätzung verwendet werden. Dieser Abstand wird allerdings<br />

nicht im dreidimensionalen Raum, sondern im jeweiligen Bildraum gemessen. Dazu wird<br />

der dreidimensionale Punkt, der laut l dem Pixel p entspricht, zunächst auf die Ebene Pj<br />

projiziert. Der so erhaltene Punkt p ′ wird dann <strong>zur</strong>ück in das Bild Ii projiziert, um den<br />

Punkt p ′′ zu erhalten. Wenn die euklidische Distanz d(p, p ′′ ) einen bestimmten Grenzwert r<br />

überschreitet, kann da<strong>von</strong> ausgegangen werden, dass die Zuordnung inkorrekt wird. Somit<br />

wird sie mit hohen Kosten, etwa Edata(p, Pj) = e1 verbunden. Für alle Zuordnungen, für die<br />

eine Distanz unterhalb des Grenzwertes liegt, werden entsprechend einer passenden Metrik<br />

Werte zwischen e0 und e1 zugewiesen. Der zweite Wert, der sogenannte smoothness-term“<br />

”<br />

soll dafür sorgen, dass benachbarte Pixel p und q möglichst nur dann auf verschiedenen<br />

Ebenen liegen, wenn dies durch eine gefundene Kante gerechtfertigt wird. Daher wird<br />

Esmooth(p, q) = 0 gesetzt, falls sie sich auf zwei Seiten einer Linie l in der Nähe einer Kante<br />

zwischen zwei Ebenen befinden und ansonsten auf einen höheren Wert entsprechend der<br />

Glattheit des Bildes an der entsprechenden Stelle. Die sich durch Aufsummierung aus<br />

diesen Werten ergebende Kostenfunktion wird als Markov Random Field interpretiert und<br />

dementsprechend minimiert.<br />

Sobald diese grobe Zuordnung vorgenommen wurde, wird sie weiter verfeinert, indem bei<br />

der Segmentierung gefundene Grenzen zwischen zwei Ebenen an die zuvor gefundenen<br />

und ins Bild projizierten Linien aus L 3→2 angeglichen werden, um so besonders unruhige<br />

Kanten zu glätten. In diesem Schritt hat der Benutzer die Möglichkeit, durch das Einzeichnen<br />

grober Kantenverläufe die Zuordnung iterativ zu verfeinern und Fehler zu korrigieren.<br />

Damit kann die Qualität der Segmentierung noch einmal erheblich verbessert werden.<br />

4.1.4 Ausnutzung <strong>von</strong> Symmetrien <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> Details<br />

Mit Hilfe der im vorherigen Schritt erfolgten Segmentierung werden nun aus den Eingabebildern<br />

Texturen für jede Ebene Pj generiert. Diese dienen als direkte Draufsicht, aus<br />

der in den folgenden Schritten die feineren Details wie zum Beispiel Fenster und Türen<br />

rekonstruiert werden sollen. Dabei werden alle Bilder berücksichtigt, in denen die jeweilige<br />

15


16 4. <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten<br />

Ebene sichtbar ist. Es werden dabei allerdings Bilder bevorzugt, in denen die perspektivische<br />

Verzerrung gering ist, um auf der Textur unscharfe Bereiche oder <strong>von</strong> der Seite<br />

gesehene Elemente nach Möglichkeit zu vermeiden.<br />

Statt Wiederholungen automatisch zu erkennen, wird der Benutzer aufgefordert, in dem<br />

entzerrten Bild die groben Umrisse eines sich wiederholenden Elementes <strong>von</strong> Hand grob<br />

einzuzeichnen. Dadurch wird insbesondere auf stark spiegelnden Oberflächen eine fehlerhafte<br />

Erkennung vermieden. Außerdem kann so vermieden werden, dass ganze Gruppen<br />

<strong>von</strong> Elementen als ein einzelnes Element angesehen werden. Dies kann bei einer vollautomatischen<br />

Erkennung schnell passieren und führt unter Umständen zu unbefriedigenden<br />

Ergebnissen.<br />

Zu diesen vom Benutzer identifizierten Bildelementen werden nun weitere Entsprechungen<br />

gesucht. Dies geschieht zunächst, indem die eingezeichneten Linien mit den in das entzerrte<br />

Bild projizierten Linien aus L ∋ verglichen werden. Dabei wird ein relativ strenger Grenzwert<br />

für die Erkennung gewählt, um fehlerhafte Zuordnungen zu unterdrücken. Dadurch<br />

verworfene Elemente werden später wieder hinzugefügt.<br />

Zur Optimierung der gefundenen Umrisse wird die Annahme gemacht, dass sich wiederholende<br />

Elemente nach einem festen Muster angeordnet sind. Bei größeren Gebäuden erweist<br />

sich diese Annahme in der Regel als richtig, da insbesondere Fenster aus praktischen und<br />

ästhetischen Überlegungen heraus oft sehr regelmäßig angeordnet werden. In den häufigsten<br />

Fällen ist diese Anordnung ein einfaches ein- oder zweidimensionales Raster. In<br />

derartigen Rastern lässt sich die Position eines beliebigen Elements durch die wiederholte<br />

Anwendung einiger weniger Transformationen (eine Translation für eindimensionale Raster,<br />

zwei verschiedene Translationen für zweidimensionale Raster, in anderen Fällen auch<br />

Rotationen oder Spiegelungen) so wie derer Inversen aus der Position des vom Benutzer<br />

ausgewählten Ursprungselements erzeugen. Wichtig dabei ist lediglich, dass dabei die<br />

Regelmäßigkeit erhalten bleibt, also beispielsweise keine Transformation nur teilweise ausgeführt<br />

wird. Auf Basis dieser Annahme werden nun ungefähre Werte – also in etwa die<br />

Abstände zwischen zwei Elementen – für diese Transformationen geschätzt. Sobald diese<br />

grobe Schätzung erfolgt ist, wird versucht, eventuelle Lücken im Raster zu schließen, die<br />

durch nicht gefundene oder verworfene Elemente entstanden sind. Hierzu werden nun nicht<br />

mehr die aus L 3 projizierten, sondern die direkt im entzerrten Bild gefundenen Kanten<br />

herangezogen und weniger genaue Übereinstimmungen verlangt, um zu verhindern, dass<br />

Elemente weiterhin fälschlicherweise verworfen werden. Sobald diese Lücken geschlossen<br />

sind, werden sowohl die Zuordnungen der Elemente zu gefundenen Linien als auch die<br />

Transformationen iterativ so lange verbessert, bis das Ergebnis ausreichend stark konvergiert<br />

ist.<br />

4.1.5 Herausarbeiten der Details als Flächen mit Offset<br />

Bis jetzt wurden lediglich die Umrisse <strong>von</strong> strukturellen Elementen der Szene identifiziert.<br />

Dagegen wurde vernachlässigt, dass es sich dabei in der Regel nicht um flache, ” aufgemalte“<br />

Details, sondern um Vertiefungen oder hervorstehende Objekte handelt. Um diese<br />

Informationen zu erhalten, werden Tiefenwerte innerhalb eines festen Bereichs ausprobiert.<br />

Diese Werte werden überprüft, indem die um die Tiefeninformation ergänzten Elemente<br />

aus den Perspektiven der Urpsrungsbilder gerendert und die erzeugten Linien mit den in<br />

den Bildern vorhandenen verglichen werden. Da es aber gerade bei geringer Auflösung und<br />

starken Schatten dazu kommen kann, dass keine ausreichende Übereinstimmung gefunden<br />

wird, hat der Benutzer die Möglichkeit, für ein einzelnes Element den Tiefenwert manuell<br />

in einem der Bilder einzuzeichnen. Dieser Wert wird dann für alle Wiederholungen dieses<br />

Elements ebenfalls angewendet.<br />

16


4.2. Echtzeitrekonstruktion aus Depth Maps mit Kinect Fusion 17<br />

4.2 Echtzeitrekonstruktion aus Depth Maps mit Kinect Fusion<br />

Bei ” Kinect Fusion“ handelt es sich um ein 2011 <strong>von</strong> Newcombe et al. [8, 9] bei Microsoft<br />

Research entwickeltes <strong>Rekonstruktion</strong>sverfahren. Es wurde im Wesentlichen für die<br />

Erfassung <strong>von</strong> großteils statischen Innenraumszenen mit einer beweglichen Kamera und<br />

wenigen beweglichen Objekten (siehe 4.2.5) konzipiert.<br />

Der Algorithmus basiert auf dem ” simultaneous localisation and mapping“ (SLAM) Prinzip.<br />

Es findet also mit jedem Frame sowohl eine Bestimmung der Kameraposition als auch<br />

eine <strong>Rekonstruktion</strong> der Szene statt. Im Gegensatz zu vielen anderen <strong>Verfahren</strong> setzt Kinect<br />

Fusion dabei nicht auf die explizite Erkennung <strong>von</strong> Strukturen <strong>zur</strong> Bestimmung der<br />

Kameraposition. Stattdessen wird aus der gesamten Depth Map iterativ die Positionsänderung<br />

bestimmt (siehe 4.2.2).<br />

Die in [9] vorgestellte Implementierung setzt weitestgehend auf GPGPU-Techniken, um<br />

die Berechnungen so stark parallelisieren zu können, dass die komplette <strong>Rekonstruktion</strong><br />

in Echtzeit stattfinden kann.<br />

Alle im Folgenden verwendeten Bezeichnungen für Variablen, Konstanten und Funktionen<br />

orientieren sich großteils an der Notation in [9]. Alle Formeln und Codeausschnitte<br />

in den folgenden Abschnitten sind, soweit nicht anders markiert, ebendaraus zitiert und<br />

gegebenenfalls umformatiert.<br />

4.2.1 Vorverarbeitung der Scannerdaten<br />

Die Tiefeninformationen, die die Kinect zum Zeitpunkt i liefert, liegen zunächst als Depth<br />

Map Di vor. Für beinahe alle weiteren Verarbeitungsschritte werden die Messpunkte dagegen<br />

in dreidimensionalen Kamera- oder Weltkoordinaten benötigt. Aus praktischen Gründen<br />

werden in diesen Koordinatensystemen alle Abstände in Metern angegeben.<br />

Im ersten Schritt wird zu jedem Pixel Di(u) an der Stelle u = (x, y) ⊤ in der Depth Map<br />

mit Hilfe der Kameramatrix K des Kinect Tiefensensors ein entsprechender Vertex vi(u)<br />

in Kamerakoordinaten berechnet. Da sich durch Fertigungstoleranzen die Kameramatrix<br />

<strong>von</strong> Kinect zu Kinect unterscheiden kann, wird sie in der Regel im Voraus mittels einer<br />

manuellen Kalibrierungsroutine bestimmt.<br />

vi(u) = Di(u) · K −1 ⎛ ⎞<br />

x<br />

· ⎝y⎠<br />

1<br />

Der zweite Schritt besteht darin, aus dem Gradienten der so entstandenen ” Vertex Map“<br />

die Normalenvektoren der Oberflächen an den Messpunkten zu bestimmen.<br />

n ∗ i (u) = (vi(x + 1, y) − vi(x, y)) × (vi(x, y + 1) − vi(x, y))<br />

ni(u) = n∗ i (u)<br />

�n ∗ i (u)�<br />

Zuletzt werden zu jedem Vertex vi(u) noch dessen Äquivalent in Weltkoordinaten v g<br />

i (u)<br />

und der entsprechende Normalenvektor in Weltkoordinaten n g<br />

i (u) berechnet. Hierzu wird<br />

die Kameraposition zum Zeitpunkt i mit sechs Freiheitsgraden (dreimal Translation, dreimal<br />

Rotation) durch die Transformationsmatrix Ti (siehe 4.2.2) dargestellt.<br />

17


18 4. <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten<br />

Ti =<br />

� �<br />

Ri ti<br />

0 1<br />

Hierbei ist Ri eine 3 × 3 Rotationsmatrix und ti ein dreidimensionaler Translationsvektor.<br />

Somit ergibt sich bei impliziter Konvertierung in homogene vierdimensionale Vektoren<br />

beziehungsweise <strong>zur</strong>ück:<br />

v g<br />

i (u) = Ti · vi(u)<br />

n g<br />

i (u) = Ri · ni(u)<br />

Die komplette Vorverarbeitung ist trivial parallelisierbar und kann daher leicht auf der<br />

Grafikhardware ausgeführt werden.<br />

4.2.2 Tracking<br />

Um Informationen aus mehr als nur einem Frame <strong>zur</strong> <strong>Rekonstruktion</strong> der Szene heranziehen<br />

zu können, muss in jedem Frame die neue Position der Kamera relativ <strong>zur</strong> Szene<br />

berechnet werden. Dies führt prinzipiell selbst dann zu besseren Ergebnissen, wenn sowohl<br />

die Szene als auch die Kamera scheinbar statisch sind. Durch minimalste Bewegungen –<br />

wie etwa ein leichtes Zittern beim Halten der Kamera – entstehen neue Ansichten auf die<br />

Szene, die zusätzliche Informationen liefern können.<br />

Da es sich bei Kinect Fusion um ein Echtzeitverfahren mit angestrebten 30 Frames pro<br />

Sekunde (hardwareseitige Limitierung) handelt, kann da<strong>von</strong> ausgegangen werden, dass<br />

sich die Kameraposition gegenüber dem letzten Frame selbst bei schnellen Bewegungen<br />

nur wenig ändert. Daher bietet es sich an, die neue Kameraposition Ti zunächst mit der<br />

alten Kameraposition Ti−1 zu initialisieren und sie dann iterativ anzupassen. Hierzu wird<br />

der ” iterative closest point“ (ICP) Algorithmus [10] verwendet. Dieser dient eigentlich dazu,<br />

Objekte aneinander aus<strong>zur</strong>ichten, aber da es letztlich nur eine Interpretationsfrage ist, ob<br />

sich die Szene oder die Kamera bewegt, lässt sich der Algorithmus problemlos anwenden,<br />

um die Verschiebung der Kamera aus der Änderung der Messdaten zu bestimmen.<br />

Durch den Einsatz der GPU <strong>zur</strong> Berechnung ist es im Gegensatz zu vielen anderen Anwendungen<br />

des ICP Algorithmus’ nicht nötig, vorab eine kleine Menge an Punkten auszuwählen,<br />

für die die Berechnung durchgeführt wird. Stattdessen ist es möglich, die vollen<br />

640x480 Pixel der Depth Map zu verwenden, wobei die Arbeit für jeden Pixel in einem<br />

eigenen GPU Thread stattfindet. Die zweite Herausforderung ist die Zuordnung der einzelnen<br />

Messpunkte aus dem aktuellen und dem vorherigen Frame zueinander. Durch die<br />

Annahme, dass sich die Kameraposition zwischen zwei Frames nicht stark ändert und es<br />

somit zu wenigen Verschattungen durch bisher unbekannte Punkte kommt, bietet sich ein<br />

einfacher projektiver Ansatz an.<br />

Es gibt nun zwei grundlegende Möglichkeiten <strong>zur</strong> Assoziation. Die erste ist ein sogenanntes<br />

” frame-to-frame tracking“. Dabei wird jeder Vertex aus dem vorherigen Frame in die Depth<br />

Map des aktuellen Frames projiziert und mit dem zum resultierenden Pixel gehörenden<br />

Vertex assoziiert. Die alternative besteht darin, die bereits teilweise rekonstruierte Szene<br />

als Referenz heranzuziehen, statt nur die Depth Map des letzten Frames zu betrachten.<br />

Experimente in [8] zeigen, dass letztere Variante wesentlich präzisere Ergebnisse liefern. Um<br />

Fehler durch statistische Ausreißer zu vermeiden, werden in beiden Varianten Vertexpaare<br />

verworfen, falls sie sich in ihrer Position oder Normale zu stark <strong>von</strong>einander unterscheiden.<br />

Außerdem werden Stellen ignoriert, an der die neue Depth Map keine gültigen Werte<br />

beinhaltet.<br />

18


4.2. Echtzeitrekonstruktion aus Depth Maps mit Kinect Fusion 19<br />

Als Metrik für die Qualität wird die Summe der quadrierten Abstände der neuen Vertices<br />

zu den Tangentenebenen ihrer Partner gewählt. In [8] wird da<strong>von</strong> abweichend auf das<br />

Quadrieren verzichtet.<br />

E(T ) = �<br />

�(T vi(u) − v<br />

u<br />

Di(u)>0<br />

g<br />

i−1 (u)) · ng<br />

i−1 (u)�2<br />

Diese Summe kann auf der GPU parallel berechnet werden. In jedem Iterationsschritt wird<br />

nun eine Transformationsmatrix T gesucht, die E(T ) minimiert. Unter der Annahme der<br />

kleinen Winkel kann man vereinfachend <strong>von</strong> sin(θ) ≈ θ ausgehen und das Problem auf<br />

ein 6 × 6 Lineares Gleichungssystem reduzieren, das auf der CPU mittels einer Cholesky-<br />

Zerlegung gelöst werden kann. Die resultierende Matrix T wird nun als neuer Wert für Ti<br />

im nächsten Iterationsschritt gesetzt, der wieder mit der Bildung der Vertexpaare beginnt.<br />

Um eine konstante Framerate zu garantieren, wird die Anzahl der Iterationen begrenzt.<br />

4.2.3 <strong>Rekonstruktion</strong><br />

Anders als andere <strong>Verfahren</strong> repräsentiert Kinect Fusion die rekonstruierte Szene intern<br />

nicht als Punktwolke oder Polygonnetz, sondern als dreidimensionales Distanzfeld, genauer<br />

gesagt als ” truncated signed distance field“ (TSDF) [11]. Dabei handelt es sich um<br />

ein regelmäßiges Gitter mit fester Auflösung, bei dem in jedem Voxel in diesem Gitter<br />

der Abstand <strong>zur</strong> nächstgelegenen Oberfläche gespeichert werden. Dabei markieren postive<br />

Werte Punkte im leeren Raum, während sich Voxel mit negativen Werten im Inneren eines<br />

Objekts befinden. Oberflächen ergeben sich aus den Nulldurchgängen. In TSDFs wird<br />

entgegen normalen Distanzfeldern der Wertebereich auf ein Intervall [−µ, µ] und Werte,<br />

die außerhalb dieses Intervalls liegen, werden durch auf µ beziehungsweise −µ gesetzt. Auf<br />

diese Art lässt sich unter anderem die Ungenauigkeit der Messung ausdrücken. Wenn man<br />

µ auf den maximal zu erwartenden Messfehler setzt, liegen Voxel mit einem Wert <strong>von</strong> µ<br />

quasi garantiert vor einer Oberfläche, während Voxel mit einem Wert <strong>von</strong> −µ hinter einer<br />

Oberfläche liegen. Voxel, deren Werte innerhalb des Intervalls liegen, bilden den tendenziell<br />

durch Messfehler verfälschten Bereich.<br />

Die Generierung dieses Distanzfelds ist ein mehrstufiger Prozess. In jedem Frame wird<br />

zunächst ein neues Distanzfeld aus der gerade aktuellen Depth Map generiert. Dafür wird<br />

diese zunächst <strong>zur</strong> Rauschunterdrückung mit Hilfe eines bilateralen Filters geglättet. Gegenüber<br />

einem einfachen Gauß-Filter werden hierbei nur Oberflächen geglättet, während<br />

Kanten beibehalten werden. Zwar können so auch kleinere Oberflächendetails verloren gehen,<br />

aber diese treten durch die Wiederholung in mehreren Frames langsam wieder auf.<br />

Wie in [9] gezeigt, sind so selbst Vertiefungen <strong>von</strong> nur einem Millimeter deutlich sichtbar.<br />

Als nächstes wird anhand der geglätteten Depth Map ein komplett neues Distanzfeld<br />

für diesen Frame berechnet, das dann Schritt mit dem Distanzfeld aus früheren Frames<br />

verschmolzen wird. Dazu erhält jeder Voxel zusätzlich zu seinem Abstandswert noch eine<br />

Gewichtung, die dessen erwartete Genauigkeit angibt.<br />

Wie auch alle anderen Berechnungen, lassen sich Aufbau und Verschmelzung <strong>von</strong> Distanzfeldern<br />

leicht parallelisieren. Für jeden Voxel g wird seine Position in Weltkoordinaten v g<br />

berechnet, diese mit der Kameramatrix in den Bildraum der Depth Map projiziert und<br />

damit bestimmt <strong>von</strong> welchem Pixel p der Depth Map er abgedeckt wird. Liegt er innerhalb<br />

des Sichtbereichs der Kamera, so werden sein Abstand tsdfi <strong>zur</strong> gemessenen Oberfläche<br />

und seine Gewichtung wi bestimmt.<br />

sdfi = �ti − v g � − Di(p)<br />

19


20 4. <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten<br />

tsdfi entsteht aus sdfi durch die Beschränkung auf das Intervall [−µ, µ]. Zur Wahl <strong>von</strong> wi<br />

gibt es unterschiedliche Möglichkeiten. Um die Genauigkeit der Messung anzugeben, muss<br />

wi proportional zu cos(θ)<br />

Di(p) gewählt werden, wobei θ der Winkel zwischen dem virtuellen<br />

Strahl <strong>von</strong> der Kamera zum Punkg vg und der gemessenen Oberflächennormale ni(p) ist.<br />

Vereinfachend kann aber auch wi = 1 gute Ergebnisse liefern.<br />

Die Verschmelzung des neuen und des alten Distanzfelds ist eine einfache gewichtete Mittelung<br />

der Abstände tsdfi und tsdfi−1 sowie eine Aufsummierung der Gewichtungen wi und<br />

wi−1. Wenn man das dabei resultierende w avg auf einen Maximalwert w max beschränkt,<br />

werden Änderungen in der Szene schneller in die <strong>Rekonstruktion</strong> aufgenommen, da ältere<br />

Messungen nur begrenzten Einfluss haben.<br />

tsdf avg = tsdfiwi + tsdfi−1wi−1<br />

wi + wi−1<br />

w avg = min(w max , wi + wi−1)<br />

Man beachte, dass die entsprechenden Zeilen im Pseudocode in [9] <strong>von</strong> der Beschreibung in<br />

[8] abweichen und vermutlich fehlerhaft sind, da sie dem neuen Distanzfeld eine wesentlich<br />

zu hohe Gewichtung zuweisen. Würde man die Berechnung derartig durchführen, wäre das<br />

Ergebnis auf lange Sicht das gleiche, wie wenn man w max = 1 setzt.<br />

Abschließend werden tsdf avg und w avg als neue Werte in das TSDF geschrieben.<br />

4.2.4 Darstellung der rekonstruierten Szene<br />

Die Repräsentation der Szene als Distanzfeld eignet sich gut für ein Rendering durch Ray<br />

Casting beziehungsweise Ray Marching. Für jeden Pixel wird ein GPU Thread gestartet,<br />

der einen Sichtstrahl <strong>von</strong> der Kamera durch die Szene verfolgt, bis ein Übergang <strong>von</strong> positiven<br />

zu negativen Abstandswerten – also eine Oberfläche – festgestellt wird. Wenn das<br />

Distanzfeld verlassen oder ein Übergang <strong>von</strong> einem negativen zu einem positiven Abstandswert<br />

festgestellt wird, bevor eine Oberfläche gefunden wurde, kann da<strong>von</strong> ausgegangen<br />

werden, dass die Szene an der entsprechenden Stelle noch nicht vollständig rekonstruiert<br />

wurde. In diesem Fall wird der Sichtstrahl verworfen und der Pixel bleibt unverändert<br />

beziehungsweise wird mit der Hintergrundfarbe gefüllt.<br />

Um die Normale an der getroffenen Oberfläche zu bestimmen, wird da<strong>von</strong> ausgegangen,<br />

dass diese gerade dem Gradienten des Distanzfeldes entspricht.<br />

n ∗ (g) = ∇tsdfi(g)<br />

Zur Verwendung für die Beleuchtungsberechnung muss der so gewonnene Vektor nur noch<br />

in Weltkoordinaten transformiert und anschließend normalisiert werden. Für komplexere<br />

Beleuchtungsberechnungen können wie bei anderen Ray Tracing <strong>Verfahren</strong> Sekundärstrahlen<br />

verschossen werden, um Reflexionen und Verschattungen zu berücksichtigen.<br />

Kinect Fusion verzichtet explizit auf Beschleunigungsstrukturen wie KD-Bäume, die man<br />

sonst in Ray Tracern findet. Sie würden zwar eine Performancesteigerung bei der Darstellung<br />

bewirken, sind aber in der Regel für weitestgehend statische <strong>Szenen</strong> optimiert.<br />

Da sich das Distanzfeld aber mit jedem Frame ändern kann, wäre der Aufwand, jeweils<br />

die Beschleunigungsstrukturen zu aktualisieren, zu hoch. Da die Werte in einem Distanzfeld<br />

aber gerade den Abstand <strong>zur</strong> nächstgelegenen Oberfläche angeben, können im leeren<br />

Raum Voxel stattdessen schnell durch einfaches einfaches Ray Skipping übersprungen werden,<br />

indem direkt um die durch µ gegebene Entfernung entlang des Strahls nach vorne<br />

geschritten wird.<br />

20


4.3. Featurebasiertes Mapping mit einer einzelnen Kamera 21<br />

Es ist verhältnismäßig einfach, das Distanzfeld im Rahmen einer Augmented Reality Anwendung<br />

mit klassischen polygonbasierten Objekten zu kombinieren. Dazu werden diese<br />

Objekte mit den herkömmlichen Rendermethoden <strong>von</strong> der Grafikkarte verarbeitet. Statt<br />

sie aber direkt in den Frame Buffer zu rendern, werden Position, Normale und Farbinformationen<br />

eigene Texturen (in dieser Arbeit analog zum Deferred Shading als G-Buffer<br />

bezeichnet) geschrieben, aus denen dann beim Ray Casting gelesen werden kann. Überschreitet<br />

die Länge eines Strahls den Abstand zwischen der Kamera und dem im G-Buffer<br />

gespeicherten Oberflächenpunkt, so wird die Strahlverfolgung abgebrochen und stattdessen<br />

werden die Daten aus dem G-Buffer verwendet. Auch hier können wieder Sekundärstrahlen<br />

verschossen werden, um Gegenseitige Verschattung und Reflexion der rekonstruierten<br />

Szene und den dazugerenderten Objekten zu erzielen.<br />

Auf diese Art kann selbstverständlich nicht nur die aktuelle Ansicht der Kamera nachgebildet<br />

werden. Es ist genau so gut möglich, beliebige andere Ansichten der Szene zu rendern<br />

und damit auch Objekte zu zeigen, die momentan nicht <strong>von</strong> der Kamera gesehen werden.<br />

Eine weitere Anwendung besteht in der Generierung <strong>von</strong> Depth Maps für das Tracking der<br />

Kameraposition (siehe 4.2.2). Gegenüber der tatsächlich im vorherigen Frame <strong>von</strong> der Kamera<br />

aufgenommenen Depth Map weisen diese wesentlich weniger Rauschen und Löcher<br />

auf und verbessern die Ergebnisse des ICP Algorithmus’ enorm.<br />

4.2.5 Segmentierung <strong>von</strong> beweglichen <strong>Szenen</strong>komponenten<br />

Das vorgestellte <strong>Verfahren</strong> nutzt einen neuartigen Ansatz, um bewegliche Objekte innerhalb<br />

der Szene zu tracken. Dazu wird die Tatsache ausgenutzt, dass die Plausibilitätsprüfung<br />

des ICP Algorithmus’ (siehe 4.2.2) sich gut eignet, um Abweichungen <strong>von</strong> der erwarteten<br />

Geometrie zu identifizieren. Dazu werden alle Punkte, die für das Kameratracking<br />

zu starke Abweichungen aufweisen, registriert und zu zusammenhängenden Bereichen zusammengefasst.<br />

Wenn ein Bereich groß genug ist, um da<strong>von</strong> ausgegen zu können, dass es<br />

sich nicht nur um eine Ansammlung <strong>von</strong> Messfehlern handelt, wird er als eigenes Objekt<br />

separat rekonstruiert und getrackt.<br />

Diese Methode <strong>zur</strong> Segmentierung <strong>von</strong> <strong>Szenen</strong> führt zu einer äußerst intuitiven Bedienung<br />

durch den Benutzer. Um ein Objekt vom Rest der Szene zu trennen, muss es nur für einen<br />

kurzen Moment bewegt werden. Eine manuelle Auswahl des Objektes am Bildschirm und<br />

eine komplizierte serverseitige Erkennung der Objektgrenzen entfallen gänzlich.<br />

Auf die gleiche Art kann auch der Benutzer selbst erfasst werden. Zwar ist der ICP Algorithmus<br />

nur für in sich starre Objekte ausgelegt, aber so lange ein Großteil eines Objekts<br />

starr bleibt, während sich der Rest bewegt, werden immer noch gute Ergebnisse erzielt.<br />

Auf diese Weise kann zum Beispiel ohne Probleme der Arm des Benutzers getrackt werden,<br />

während sich Hand und Finger bewegen.<br />

Wenn man die Berührungspunkten zwischen zwei separat getrackten <strong>Szenen</strong>teilen, etwa<br />

der Hand des Benutzers und dem Hintergrund betrachtet, lässt sich verhältnismäßig leicht<br />

eine Multitouchsteuerung auf beliebigen Oberflächen realisieren. Vorübergehend verdeckte<br />

Berührungspunkte können dabei anhand der aus früheren Frames bekannten <strong>Szenen</strong>- und<br />

Objektgeometrie abgeschätzt werden. So lange der Benutzer seine Finger nicht einzeln<br />

bewegt, so lange sie für die Kamera nicht sichtbar sind, ist das Ergebnis ausreichend<br />

genau.<br />

4.3 Featurebasiertes Mapping mit einer einzelnen Kamera<br />

Während die beiden vorherigen <strong>Verfahren</strong> in sich geschlossene und zu einem gewissen<br />

Grad vollständige Umgebungsmodelle erzeugen, beschreibt Davison in [12] ein <strong>Verfahren</strong>,<br />

21


22 4. <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten<br />

das lediglich eine relativ begrenzte Anzahl an Features (Merkmalen) als Punktwolke rekonstruiert.<br />

Wie auch das zuvor vorgestellte Kinect Fusion Projekt handelt es sich hier<br />

um einen echtzeitfähigen ” simultaneous localisation and mapping“ (SLAM) Ansatz. Allerdings<br />

wird hier keine Spezialhardware vorausgesetzt, sondern ein einfacher Videostream,<br />

wie etwa <strong>von</strong> einer Webcam verwendet.<br />

4.3.1 Repräsentation der Messunsicherheit durch ein stochastisches Modell<br />

Da keinerlei externe Sensoren <strong>zur</strong> Unterstützung verwendet werden und nicht im Voraus<br />

bekannt ist, wie der Benutzer die Kamera bewegt, sind nicht nur die Positionen der zu<br />

erfassenden Features unsicher, sondern auch die Position und Geschwindigkeit der Kamera.<br />

Diese Unsicherheit wird durch ein stochastisches Modell repräsentiert, das implizit die<br />

Zufallsverteilungen dieser Werte abbildet. Um die Position der Kamera zu modellieren,<br />

wird da<strong>von</strong> ausgegangen, dass sie sich die meiste Zeit mit einer annähernd konstanten<br />

Geschwindigkeit bewegt und auch die Rotationsgeschwindigkeit annähernd konstant ist,<br />

eine starke Beschleunigung also jeweils unwahrscheinlich ist. Damit wird der Zustand der<br />

Kamera durch folgenden Vektor repräsentiert:<br />

⎛ ⎞<br />

r<br />

⎜<br />

xv = ⎜q<br />

⎟<br />

⎝v<br />

⎠<br />

ω<br />

Hierbei beschreibt der Vektor r die Position der Kamera, das Quaternion q ihre Rotation<br />

gegenüber dem Weltkoordinatensystem, der Vektor v ihre lineare Geschwindigkeit und ω<br />

ihre Winkelgeschwindigkeit. Somit besteht xv aus insgesamt 13 Komponenten, die jeweils<br />

reelle Werte annehmen können. Die lineare Beschleunigung a und die Winkelbeschleunigung<br />

α, die auf die Kamera einwirken, werden jeweils durch eine Gaußverteilung mit dem<br />

Erwartungswert 0 modelliert. Damit ergibt sich, dass v und ω einem additiven Rauschen<br />

n unterliegen.<br />

n =<br />

� �<br />

V<br />

=<br />

Ω<br />

Somit ergibt sich der neue Kamerazustand fv als<br />

� �<br />

a · ∆t<br />

α · ∆t<br />

⎛<br />

r<br />

⎜<br />

fv = ⎜<br />

⎝<br />

′<br />

q ′<br />

v ′<br />

ω ′<br />

⎞<br />

⎟<br />

⎠ =<br />

⎛<br />

r + (v + V ) · ∆t<br />

⎞<br />

⎜<br />

⎜q<br />

× q((ω + Ω) · ∆t) ⎟<br />

⎝ v + V ⎠<br />

ω + Ω<br />

wobei q((ω + Ω) · ∆t) das Quaternion darstellt, das durch den Rotationsvektor (ω + Ω) ·<br />

∆t gegeben ist. Das Erweiterte Kalman-Filter (EKF), das die Positionsvorhersagen trifft,<br />

benötigt außerdem einen Wert Qv für die Unsicherheit der Kameraposition. Diese ergibt<br />

sich mit der Kovarianzmatrix Pn des Rauschvektors n aus folgender Formel:<br />

Qv = δfv<br />

δn Pn<br />

⊤<br />

δfv<br />

δn<br />

Wie schnell die Unsicherheit in der Schätzung wächst, hängt also maßgeblich da<strong>von</strong> ab,<br />

wie Pn gewählt wird. Für sehr niedrige Werte würde die Unsicherheit nur sehr langsam<br />

22


4.3. Featurebasiertes Mapping mit einer einzelnen Kamera 23<br />

wachsen, die Schätzung also als sehr genau angenommen wird. Diese wäre aber nur unter<br />

der Annahme einer sehr gleichmäßigen Bewegung korrekt, da das Modell hohen Beschleunigungsraten<br />

eine extrem geringe Wahrscheinlichkeit zuweisen würde. Hohe Werte würden<br />

diese Beschleunigungen zwar berücksichtigen, aber zu einer schnell steigenden Unsicherheit<br />

führen, weshalb eine durchgehend sehr präzise Erkennung der Szene nötig wäre, um<br />

diese wieder zu senken.<br />

Zusätzlich zum aktuellen Zustand ˆxv der Kamera enthält der aktuelle Zustand ˆx des Gesamtsystems<br />

auch zu jedem getrackten Feature i dessen aktuellen Zustand ˆyi. Zu dem aus<br />

Zufallsvariablen bestehenden Vektor ˆx gehört außerdem auch die entsprechende Kovarianzmatrix<br />

P .<br />

⎛ ⎞ ⎛<br />

ˆxv<br />

Pxx Pxy1 Pxy2 . . .<br />

⎜<br />

⎜ˆy1<br />

⎟ ⎜<br />

⎟ ⎜Py1x<br />

Py1y1<br />

ˆx = ⎜<br />

⎝ˆy2<br />

⎟ , P = ⎜<br />

⎠ ⎝<br />

.<br />

Py1y2 . . .<br />

Py2x Py2y1 Py2y2<br />

⎞<br />

⎟<br />

. . . ⎟<br />

⎠<br />

. . .<br />

4.3.2 Auswahl und Erkennung <strong>von</strong> trackbaren Features<br />

Um durchgehend ein robustes Tracking zu gewährleisten, ohne den benötigten Rechenaufwand<br />

in die Höhe zu treiben, wird angestrebt, die Anzahl der zu einem beliebigen Zeitpunkt<br />

getrackten Features immer in einem festen Bereich zu halten. Dieser kann je nach<br />

benötigter Genauigkeit und verfügbarer Rechenleistung gewählt werden. Sobald die untere<br />

Grenze dieses Bereiches unterschritten wird, zum Beispiel, weil sich ein Feature nicht<br />

mehr im Sichtbereich der Kamera befindet, müssen neue Features in der Szene identifiziert<br />

werden.<br />

Zur Identifikation <strong>von</strong> ” interessanten“ Features, also solchen, deren Aussehen charakteristisch<br />

genug ist, um über mehrere Frames hinweg zuverlässig wiedererkannt zu werden,<br />

kommt das <strong>von</strong> Shi und Tomasi in [13] vorgestellte <strong>Verfahren</strong> zum Einsatz. Die Features<br />

werden nicht wie bei einigen anderen <strong>Verfahren</strong> nur durch einen Pixel und seine direkten<br />

Nachbarn, sondern durch einen Bereich <strong>von</strong> etwa 9 mal 9 bis 15 mal 15 Pixeln identifiziert.<br />

Um Rechenzeit zu sparen, ist es in der Regel ausreichend, den Shi-Tomasi Operator<br />

nicht auf das gesamte Bild, sondern nur auf einen verhältnismäßig kleinen Bildbereich <strong>von</strong><br />

etwa 100 mal 50 Pixeln anzuwenden. Dieser Bereich kann zufällig gewählt werden, sollte<br />

aber möglichst noch keine anderen Features enthalten, um eine Mehrfacherkennung des<br />

gleichen Features zu vermeiden. Außerdem wird darauf geachtet, einen Bereich zu wählen,<br />

der unter der Annahme einer konstant bleibenden Kamerabewegung nicht zu schnell den<br />

sichtbaren Bildbereich verlässt.<br />

Da für neue Features zunächst keinerlei Aussage gemacht werden kann, wie weit sie <strong>von</strong> der<br />

Kamera entfernt sind, werden sie zunächst nicht durch einen Punkt, sondern eine Halbgerade<br />

<strong>von</strong> der Kamera aus repräsentiert. Die Unsicherheit, wo genau auf dieser Halbgeraden<br />

sich die tatsächliche Position wird durch eine Zufallsverteilung über eine feste Anzahl <strong>von</strong><br />

Punkten auf der Halbgeraden repräsentiert. Dies können zum Beispiel für Innenräume 100<br />

gleichmäßig verteilte Punkte zwischen 0,5 und 5 Metern <strong>von</strong> der geschätzten Kameraposition<br />

zum Zeitpunkt der erstmaligen Erkennung sein. Für größere <strong>Szenen</strong> müssten diese<br />

Werte angepasst werden. Jeder dieser Punkte entspricht in den folgenden Frames einer<br />

elliptischen Suchregion, in der das Feature vermutet wird. Die Wahrscheinlichkeit, dass<br />

die Position einem dieser Punkte entspricht, wird zunächst als gleichverteilt angenommen<br />

und jedes Mal, wenn das Feature in folgenden Frames gefunden wurde, anhand der neuen<br />

Position aktualisiert. Mit der Zeit nähert sich die Verteilungsfunktion einer Gaußverteilung<br />

um einen Punkt auf der Halbgeraden an, bis dieser Punkt als Featureposition mit durch<br />

23


24 4. <strong>Verfahren</strong> <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> <strong>3D</strong>-<strong>Szenen</strong> aus Scannerdaten<br />

eben jene Gaußverteilung beschriebene Unsicherheit angenommen werden kann und die<br />

Halbgerade verworfen wird.<br />

4.3.3 Tracking <strong>von</strong> gefundenen Features<br />

In jedem Frame wird zunächst mittels eines Erweiterten Kalman-Filters eine Vorhersage<br />

für die neue Kameraposition getroffen. Aus der vorhergesagten Kameraposition r, der sich<br />

aus q ergebenden Rotationsmatrix R und der vermuteten Position yi eines Features ergibt<br />

sich dessen relative Position hL <strong>zur</strong> Kamera als hL = R(yi − r). Daraus lässt sich<br />

durch die Projektionsmatrix der Kamera die wahrscheinlichste Position hi des Features im<br />

Bildraum bestimmen. Zusammen mit der Wahrscheinlichkeitsverteilung für yi kann man<br />

daraus einen elliptischen Bereich im Bild ableiten, in dem sich das Feature im aktuellen<br />

Frame mit einer vorher festgelegten hohen Wahrscheinlichkeit befindet. Sofern sich diese<br />

Ellipse innerhalb der tatsächlichen Bildgrenzen befindt, wird darin das entsprechende<br />

Feature gesucht, indem die Stelle identifiziert wird, an der die Summe der quadrierten<br />

Farbdistanzen zum vorher beobachteten Feature minimal ist. Sofern es nicht gelingt, einen<br />

ausreichend geringen Wert zu erreichen, wird angenommen, dass das Feature derzeit nicht<br />

sichtbar ist, beispielsweise, weil es <strong>von</strong> einem anderen Objekt verdeckt wird, oder weil<br />

zuvor ein nichtstatischer <strong>Szenen</strong>teil oder eine Spiegelung fälschlicherweise für das Tracking<br />

ausgewählt wurde. Features, die innerhalb eines bestimmten Zeitraumes bei mindestens<br />

50 Prozent aller Versuche nicht entdeckt werden können, obwohl sie sich im Sichtbereich<br />

der Kamera befinden sollten, werden komplett verworfen, da da<strong>von</strong> auszugehen ist, dass<br />

sie entweder zu oft <strong>von</strong> anderen Objekten verdeckt werden oder dass es sich nicht um<br />

statische Features handelt.<br />

Für Features, deren Position noch als Verteilung um eine Halbgerade statt um einen Punkt<br />

herum modelliert wird, findet diese Suche für jeden der zuvor auf dieser Halbgeraden definierten<br />

Punkte statt. Zur Performanceoptimierung kann die Suche die Punkte nach der<br />

ihnen zugewiesenen Wahrscheinlichkeiten statt nach ihrer räumlichen Anordnung sortiert<br />

berücksichtigen. Sollte das Feature gefunden werden, wird die Wahrscheinlichkeitsverteilung<br />

der Punkte entsprechend angepasst.<br />

Features, die sich vorübergehend außerhalb des Sichtbereiches der Kamera befunden haben,<br />

werden automatisch wieder <strong>zur</strong> Suchmenge hinzugefügt, sobald sich die Kamera wieder<br />

in ihre Richtung bewegt. Auch wenn dadurch keine neuen Informationen über die<br />

Position eines Features gewonnen werden können, so können bekannte Features doch dazu<br />

beitragen, dass die Bewegung der Kamera präziser getrackt wird. Dabei ist es allerdings<br />

<strong>von</strong> Vorteil, Features zu ignorieren, die zuvor aus einer stark abweichenden Richtung beobachtet<br />

wurden, da sich verschiedene Seiten eines Objektes nicht zwingend ähneln und<br />

das entsprechende Feature sonst fälschlicherweise entfernt würde.<br />

Sobald die Suche für alle relevanten Features abgeschlossen ist, kann die Schätzung des<br />

<strong>Szenen</strong>zustandes (also die Positionen und deren Kovarianzmatrix) entsprechend der neu<br />

gefundenen Positionen aktualisiert werden.<br />

4.3.4 Variation des <strong>Verfahren</strong>s <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> Außenarealen<br />

In [14] haben Clemente et al. verschiedene Verbesserungen für das vorgeschlagene <strong>Verfahren</strong><br />

vorgestellt, mit denen es sich auch für größere Außenareale einsetzen lässt. Da sich<br />

dadurch aber die Komplexität des <strong>Verfahren</strong>s stark erhöht und eine umfassende Beschreibung<br />

den Rahmen dieses Kapitels sprengen würde, beschränkt sich der folgende Absatz<br />

nur auf einige wenige ausgewählte Änderungen. Für eine vollständige Erläuterung sei die<br />

Lektüre des genannten Papers empfohlen.<br />

Da in großen Arealen sehr schnell eine große Anzahl an relevanten Features anfällt, müssen<br />

Maßnahmen ergriffen werden, um den benötigten Rechenaufwand pro Frame trotzdem in<br />

24


4.3. Featurebasiertes Mapping mit einer einzelnen Kamera 25<br />

einem sinnvollen Rahmen zu halten, damit die Echtzeitfähigkeit nicht verloren geht. Deshalb<br />

besteht eine wichtige Änderung darin, dass die Szene nicht als Ganzes rekonstruiert<br />

wird, sondern als eine Reihe <strong>von</strong> einzelnen Teilszenen mit einer fest definierten Anzahl an<br />

Features. Dabei ist es durchaus möglich und sogar wichtig, dass viele Features in mehreren<br />

dieser Abschnitte erfasst werden, damit deren relative Position zueinander genauer<br />

bestimmt werden kann. Das bedeutet insbesondere, dass eine Teilszene sofort als abgeschlossen<br />

angesehen wird, sobald die vorgesehene Featureanzahl überschritten wird. Die<br />

neue Teilszene übernimmt bis auf die aktuelle Kameraposition keinerlei Informationen aus<br />

vorherigen Teilen, damit sich keine Fehler akkumulieren können. Dementsprechend werden<br />

Koordinaten auch jeweils relativ <strong>zur</strong> ersten Kameraposition innerhalb einer Teilszene<br />

angegeben.<br />

Diese Einzelteile werden nach Ende der Aufnahme in einem Nachbearbeitungsschritt zu<br />

einer <strong>Rekonstruktion</strong> der Gesamtszene zusammengesetzt. Dabei tragen Überlappungen<br />

zwischen den einzelnen Teilen dazu bei, deren Ausrichtung zueinander besser abzuschätzen.<br />

Dies gilt insbesondere, wenn ein geschlossener Kreis gefunden werden kann, durch den<br />

Fehler, die sich über die Zeit akkumuliert haben, ausgeglichen werden können.<br />

(Evtl. mehr) ToDo<br />

25


5. Implementierung auf Enduserhardware<br />

5.1 Zugriff auf die Bilddaten<br />

Wenn keine Echtzeit-Bilddaten verwendet werden, ist der Zugriff trivial. Die Bilder können<br />

im Voraus per Netzwerk oder mit einem Wechseldatenträger auf den Rechner übertragen<br />

und dann direkt <strong>von</strong> der Festplatte aus geöffnet werden. Eine Ausnahme bilden hierbei<br />

<strong>Verfahren</strong> wie etwa das ” Building Rome in a Day“ Projekt [2], bei denen so viele Daten<br />

anfallen, dass ein ganzer Cluster <strong>zur</strong> Berechnung benötigt wird. In diesem Fall müssen<br />

Strategien entwickelt werden, um die Bilder möglichst effizient innerhalb des Clusters zu<br />

verschieben. Dies soll allerdings nicht Thema dieser Ausarbeitung sein.<br />

Für Echtzeitverfahren wird die Kamera in der Regel direkt über USB oder Firewire, seltener<br />

auch per Funk angeschlossen. Der Zugriff erfolgt je nach Art der Kamera über verschiedene<br />

APIs. Die meisten monokularen Kameras können einfach als normale Webcam<br />

beziehungsweise als generischer AV-Input angesprochen werden. Für spezialisiertere Kamerasysteme<br />

werden in der Regel vom Hersteller Treiber und ein entsprechendes SDK<br />

herausgegeben. Beispielhaft sei hier die Microsoft Kinect genannt, da diese derzeit sehr<br />

populär ist und mehrere verschiedene Treiber angeboten werden. Unter Windows bietet<br />

es sich an, das offizielle Kinect for Windows SDK zu verwenden, das zusammen mit einem<br />

Treiber für die Kinect, einer Dokumentation und einigen Beispielen ausgeliefert wird.<br />

Ein Nachteil an diesem SDK ist, dass es zwingend das Microsoft Visual Studio 2010 oder<br />

höher voraussetzt. Ältere Versionen oder gar andere Compiler verweigern nach Erfahrung<br />

des Autors den Dienst. Die Schnittstelle, die sowohl für C++ als auch für C# angeboten<br />

wird, ist übersichtlich und zuverlässig. Sie bietet direkten Zugriff auf die RGB-Kamera,<br />

den Tiefensensor, den Motor, über den die Neigung der Kamera eingestellt werden kann,<br />

das integrierte Mikrofonarray und einige Hilfsfunktionen.<br />

Wer nicht mit dem Kinect for Windows SDK arbeiten möchte, dem stehen auch zwei<br />

Open Source Alternativen <strong>zur</strong> Verfügung. Die OpenKinect Community 1 hat einen selbstentwickelte<br />

Bibliothek mit dem Namen libfreenect veröffentlicht. Diese funktioniert unter<br />

Windows, Linux und Mac OS X. Sie darf wahlweise unter der GPL oder der Apache Lizenz<br />

verwendet werden. Da sie allerdings teilweise per Reverse Engeneering der Hardware<br />

entstanden ist, ist die genaue rechtliche Lage unklar.<br />

Eine etwas offiziellere Variante ist das OpenNI Framework 2 . Es darf unter der GPL und der<br />

LGPL verwendet werden und wird unter anderem <strong>von</strong> verschiedenen Hardwareherstellern<br />

1 http://openkinect.org/wiki/Main_Page<br />

2 http://www.openni.org/<br />

27


28 5. Implementierung auf Enduserhardware<br />

wie etwa Asus mitgetragen, die Kamerasysteme vertreiben, die der Microsoft Kinect sehr<br />

ähnlich sind. Auch PrimeSense, die Firma, die die Kinect ursprünglich entwickelt hat, ist<br />

mit an Bord. Hier werden Binärpakete für Windows und Ubuntu Linux angeboten, aber<br />

es ist problemlos möglich, das Framework unter anderen Linuxdistributionen und unter<br />

Mac OS X selbst zu kompilieren.<br />

5.2 Parallelisierungstechniken <strong>zur</strong> Beschleunigung<br />

Da ein Großer Teil der Arbeit bei der <strong>Rekonstruktion</strong> darin besteht, auf großen Datenmengen<br />

jeweils die gleiche Operation auszuführen, ist es oft verhältnismäßig simpel, diese Arbeit<br />

zu parallelisieren. Beispiele sind das Vorfiltern <strong>von</strong> Bildern, eine Kantenerkennung, die<br />

Aktualisierung vieler Objektpositionen auf einmal oder das Erzeugen eines Distanzfeldes<br />

aus einer Punktwolke bei Kinect Fusion. Während aktuelle CPUs derzeit zwischen einem<br />

und acht Threads parallel ausführen können, erreichen moderne Grafikkarten inzwischen<br />

dutzende oder sogar hunderte <strong>von</strong> Threads auf einmal – allerdings mit der Einschränkung,<br />

dass alle den gleichen Code mit unterschiedlichen Daten ausführen, was im aktuellen Fall<br />

aber gerade das erwünschte Verhalten ist.<br />

Sowohl NVIDIA als auch AMD bieten für ihre aktuellen Grafikkartengenerationen eine<br />

General Purpose GPU (GPGPU) Schnittstelle an, mit der Programme unabhängig <strong>von</strong><br />

der sonst üblichen Shader Pipeline auf der GPU ausgeführt werden können. Während<br />

das AMD Accelerated Parallel Processing (APP) SDK dazu hauptsächlich auf den <strong>von</strong><br />

der Khronos Group entwickelten OpenCL Standard und den zugehörigen C-Dialekt setzt,<br />

hat NVIDIA mit CUDA eine eigene Grafikkartenarchitektur mit zugehöriger Programmierschnittstelle<br />

entwickelt. Allerdings wird auch hier zusätzlich OpenCL angeboten, um<br />

die Kompatibilität zu Grafikkarten anderer Hersteller zu gewährleisten. Somit eignet sich<br />

OpenCL gut für Software, die vermarktet werden soll, da sie nicht an einen einzelnen Hardwarehersteller<br />

gebunden ist. Es gilt allerdings zu beachten, dass der volle Funktionsumfang<br />

<strong>von</strong> OpenCL nur auf verhältnismäßig neuen Grafikkarten <strong>zur</strong> Verfügung steht. Bei AMD<br />

sind das die Radeon Karten ab der HD5000 Serie und bei NVIDIA die GeForce 8 Serie und<br />

höher sowie die meisten Vertreter der Quadro FX Serie. Für ältere Karten ist OpenCL nur<br />

unvollständig oder gar nicht implementiert. OpenCL unterstützt für diesen Fall zwar die<br />

Ausführung auf der CPU (oder anderer Hardware, wie etwa Physikkarten), dies ist allerdings<br />

wesentlich langsamer. Somit steht nur auf einigermaßen modernen Desktoprechnern<br />

und einigen wenigen Laptops die nötigen Mittel <strong>zur</strong> Verfügung, um hochgradig parallel zu<br />

rechnen.<br />

Wenn OpenCL verwendet wird, sollte darauf geachtet werden, die Anzahl der Arbeiterthreads<br />

so anzupassen, dass die GPU vollständig ausgelastet wird, ohne dabei unnötigen<br />

Verwaltungsoverhead durch zu viele Threads zu erzeugen. Ein gutes Beispiel dafür ist die<br />

Erzeugung des Distanzfeldes bei Kinect Fusion. Statt jedem Voxel einen eigenen Thread<br />

zuzuweisen, was bis zu 512 3 = 134217728 Threads führen würde, bearbeitet jeder Thread<br />

eine ganze Reihe <strong>von</strong> Voxeln nacheinander. Damit wird die Threadanzahl deutlich reduziert.<br />

5.3 Implementierung eines einfachen Punktwolkenbetrachters<br />

Im Rahmen dieser Arbeit wurde eine Anwendung entwickelt, die veranschaulicht, wie man<br />

mit der Microsoft Kinect prinzipiell <strong>Szenen</strong> rekonstruieren kann. Da der <strong>zur</strong> Verfügung<br />

stehende PC allerdings noch mit einer etwas älteren AMD Radon HD4850 Grafikkarte<br />

ausgestattet ist, die OpenCL nicht vollständig unterstützt, wurde auf ein komplizierten<br />

<strong>Rekonstruktion</strong>s- und Trackingalgorithmus verzichtet. Stattdessen wurde ein einfacher Betrachter<br />

für Punktwolken implementiert. Mit diesem kann anschaulich dargestellt werden,<br />

28


5.3. Implementierung eines einfachen Punktwolkenbetrachters 29<br />

wie die Rohdaten, die die Kinect liefert, beschaffen sind und welche räumliche Anordnung<br />

sich daraus ergibt.<br />

5.3.1 Die Benutzeroberfläche<br />

Dem Benutzer wird ein dreigeteiltes Fenster präsentiert, in dem er die drei wichtigsten<br />

Ansichten der Szene sehen kann. Im linken oberen Feld wird das Bild angezeigt, das die<br />

RGB-Kamera der Microsoft Kinect liefert. Darunter befindet sich ein Feld, in dem die vom<br />

Tiefensensor gelieferte und ungefilterte Depth Map als Graustufenbild zu sehen ist. Hierbei<br />

bedeutet ein heller Grauton, dass der entsprechende Punkt weit vom Sensor entfernt ist<br />

und ein dunkler Grauton bedeutet, dass der Punkt sich nahe am Sensor befindet. Bereiche,<br />

in denen keine gültigen Informationen gewonnen werden konnten, etwa weil der minimale<br />

Abstand zum Sensor unterschritten wurde oder weil es zu Verschattungen durch andere<br />

Objekte kam, werden schwarz dargestellt.<br />

Die rechte Hälfte des Fensters zeigt eine Repräsentation der erhaltenen Daten als eingefärbte<br />

Punktwolke. Die Färbung entspricht dem zugehörigen Pixel im RGB-Bild. Punkte,<br />

die durch die abweichende Position der beiden Sensoren nicht zu einem Pixel im RGB-Bild<br />

zugeordnet werden können, werden weiß dargestellt. Der Benutzer hat in diesem Feld die<br />

Möglichkeit, die Kamera mit der linken Maustaste zu drehen, sie mit der rechten Maustaste<br />

zu verschieben und mit dem Mausrad zu zoomen.<br />

Über die Menüleiste oder die Tasten + und - auf der Tastatur ist es möglich, die Kamera<br />

schrittweise nach oben und unten zu neigen.<br />

5.3.2 Erzeugung der Punktwolke<br />

Im Hintergrund läuft ein Thread, der fortwährend bei der Kinect nachfragt, ob neue Farbund<br />

Tiefeninformationen vorhanden sind. Falls ja, werden diese jeweils in ein Bildobjekt<br />

kopiert. Diese Bildobjekte werden zunächst an die beiden linken Felder übergeben, damit<br />

diese sie mittels OpenGL anzeigen können. Falls sich mindestens eines der beiden Bilder<br />

seit dem letzten Schleifendurchlauf verändert hat, wird nun die Punktwolke neu aufgebaut.<br />

Dazu wird der Reihe nach über alle Pixel in der Depth Map iteriert. Wenn ein Pixel gefunden<br />

wird, der keinen gültigen Tiefenwert enthält, wird er einfach übersprungen. Ansonsten<br />

wird mit einer Hilfsfunktion, die das Kinect for Windows SDK anbietet, aus der x- und<br />

y-Position sowie dem Tiefenwert bestimmt, welcher Pixel des Farbbildes dem aktuellen<br />

Pixel in der Depth Map entspricht und entsprechend wird eine Farbe zugewiesen.<br />

Anschließend wird anhand der Projektionsmatrix des Tiefensensors bestimmt, welchem<br />

Punkt im dreidimensionalen Raum der aktuelle Pixel entspricht. Ursprünglich wurde dazu<br />

die Projektionsmatrix aus der Auflösung der Depth Map und dem Öffnungswinkel und dem<br />

Seitenverhältnis des Tiefensensors (beide sind in den Headern des SDKs angegeben) bestimmt<br />

und anschließend invertiert. Somit lässt sich die dreidimensionale Position durch<br />

eine einfache Matrixmultiplikation mit einer anschließenden Skalierung bestimmen. Der<br />

entsprechende Code befindet sich immer noch im Quelltext des Programms, wird aber<br />

nicht mehr aufgerufen. Grund dafür ist, dass sich mit dem Wechsel vom Kinect Beta SDK<br />

zum Kinect for Windows SDK verschiedene Konventionen, darunter auch eines der verwendeten<br />

Koordinatensysteme, geändert haben. Da inzwischen eine gut funktionierende<br />

Hilfsfunktion vorhanden ist, die den gleichen Zweck erfüllt, wurde die Variante mit der<br />

Matrixmultiplikation verworfen. Sie könnte allerdings nützlich werden, wenn die entsprechende<br />

Berechnung auf die GPU ausgelagert werden sollte.<br />

Sobald alle Punkte der Punktwolke errechnet wurden, wird diese an das rechte Anzeigefeld<br />

im Fenster übergeben, wo sie entsprechend der vom Benutzer definierten Kameraposition<br />

als eine Reihe <strong>von</strong> einzelnen Pixeln angezeigt wird. Die Vielzahl an eng zusammenliegenden<br />

Punkten erweckt dabei an vielen Stellen den Eindruck einer durchgehenden Fläche.<br />

29


30 5. Implementierung auf Enduserhardware<br />

5.3.3 Mögliche Erweiterungen<br />

Die vorgestellte Implementierung ist aus Performancegründen sehr simpel gehalten und berücksichtigt<br />

daher immer nur die in einem einzigen Frame gefundenen Punkte. Im nächsten<br />

Frame wird die alte Punktwolke komplett verworfen. Um eine tatsächliche <strong>Rekonstruktion</strong><br />

zu realisieren, müssten die Kameraposition getrackt und die Punktwolken mehrerer Frames<br />

miteinander verschmolzen werden. Einer der denkbaren Ansätze ist das in Kapitel<br />

4.2 vorgestellte Kinect Fusion <strong>Verfahren</strong>. Es wäre aber durchaus auch möglich (wenn auch<br />

wahrscheinlich mit mehr Aufwand verbunden), die <strong>Rekonstruktion</strong> direkt mit einer Punktwolke<br />

oder mit einem Gitternetz durchzuführen, statt mit der impliziten Darstellung <strong>von</strong><br />

Oberflächen als Nulldurchgänge in einem Distanzfeld.<br />

Eine weitere interessante Erweiterung wäre es, nicht nur die Position der Punkte, sondern<br />

auch ihre Farbe miteinander zu verrechnen, um so im Laufe der Zeit für jeden Punkt seine<br />

<strong>von</strong> der Position des Betrachters unabhängige Farbe, also gerade den diffusen Anteil zu erhalten.<br />

Mit diesem können dann selbst künstliche Beleuchtungsberechnungen durchgeführt<br />

werden.<br />

30


6. Analyse und Vergleich verschiedener<br />

<strong>Verfahren</strong><br />

Die in Kapitel 4 vorgestellten <strong>Verfahren</strong> sollen nun abschließend hinsichtlich ihrer Stärken<br />

und Schwächen gegenübergestellt werden. Dabei wird sich zeigen, welches <strong>Verfahren</strong><br />

sich für welchen Anwendungsfall als geeignet erweist und wo noch Verbesserungspotential<br />

besteht.<br />

(Vergleich der vorgestellten <strong>Verfahren</strong> im Hinblick auf Einsatzgebiete und Li- ToDo<br />

mitierungen)<br />

6.1 Limitierungen bei der <strong>Rekonstruktion</strong><br />

Alle drei vorgestellten <strong>Verfahren</strong> stellen bestimmte Anforderungen an die zu rekonstruierende<br />

Szene. So verlangen alle drei, dass ein Großteil der Szene statisch bleibt, da es sonst<br />

zu <strong>Rekonstruktion</strong>sfehlern kommt. Kinect Fusion ist als einziges <strong>Verfahren</strong> überhaupt in<br />

der Lage, sich bewegende Objekte als solche zu erkennen. Die anderen beiden ignorieren<br />

diese Objekte in der Regel einfach. Doch auch Kinect Fusion verlangt, dass diese Objekte<br />

zumindest in sich zu einem gewissen Grad starr sind. Ansonsten werden sie zwar<br />

getrackt, aber ihre Verformung wird erst mit einer gewissen Verzögerung (je nach Wahl<br />

der Gewichtungen) in die <strong>Rekonstruktion</strong> übernommen.<br />

Eine weitere gemeinsame Limitierung besteht darin, dass sehr detailarme Ansichten, wie<br />

etwa ein vollständig leerer Raum nur schwer rekonstruiert werden können. Die Gründe<br />

hierfür sind allerdings unterschiedlich. Bei Kinect Fusion ergibt sich die Problematik daraus,<br />

dass selbst dann, wenn nur vorübergehend sehr wenige Details sichtbar sind, der ICP<br />

Algorithmus fehlerhafte Ergebnisse liefert. Der Extremfall, eine absolut glatte Fläche, führt<br />

dazu, dass zwar die Rotation des Sensors in zwei Freiheitsgraden, sowie dessen Abstand <strong>zur</strong><br />

Fläche korrekt getrackt werden, aber über die Rotation um die Normale der Fläche und<br />

die Bewegung parallel <strong>zur</strong> Fläche keinerlei Aussagen getroffen werden können. Dies führt<br />

schnell dazu, dass unplausible Kamerapositionen errechnet werden und die Kamera manuell<br />

an eine bekannte Position bewegt werden muss, damit das Tracking neu initialisiert<br />

werden kann. Davisons <strong>Verfahren</strong> kommt zwar mit sehr wenigen Features zum Tracking<br />

der Kameraposition aus und hat durch die Möglichkeit, alte Features wiederzuerkennen,<br />

nachdem sie für eine gewisse Zeit nicht sichtbar waren, aber dafür leidet die <strong>Rekonstruktion</strong><br />

unter einem Featuremangel. Da keinerlei Annahmen über die Zwischenräume zwischen<br />

31


32 6. Analyse und Vergleich verschiedener <strong>Verfahren</strong><br />

zwei identifizierten Features gemacht werden, entstehen große Lücken in der rekonstruierten<br />

Szene, bei denen im Nachhinein nur schwer entschieden werden kann, ob es sich<br />

dabei um einen sehr detailarmen Bereich oder um leeren Raum handelt. Das <strong>Verfahren</strong><br />

<strong>von</strong> Ceylan et al. <strong>zur</strong> <strong>Rekonstruktion</strong> <strong>von</strong> Gebäuden hat konzeptionell noch am wenigsten<br />

Probleme mit sehr detailarmen Bereichen, da ohnehin da<strong>von</strong> ausgegangen wird, dass die<br />

Szene bei grober Betrachtung ohnehin aus großen glatten Flächen zusammengesetzt ist.<br />

Allerdings kann ein Mangel an auffindbaren Kanten auch hier dazu führen, dass Ebenen<br />

verworfen werden, da die Anzahl an Linien auf oder nahe dieser Ebenen als Maß für die<br />

Wahrscheinlichkeit, ob eine Ebene relevant ist, herangezogen wird.<br />

Dieses <strong>Verfahren</strong> stellt ansonsten die striktesten Anforderungen an die Szene. Da intern alle<br />

Objekte aus geraden Linien und glatten Flächen aufgebaut sind, wird eine <strong>Rekonstruktion</strong><br />

<strong>von</strong> Kurven oder gar organischen Formen stark erschwert. Diese Formen müssten<br />

vollständig durch Flächen approximiert werden, was bei sehr komplexen Strukturen wie<br />

zum Beispiel bei Bäumen so gut wie unmöglich ist. Außerdem wird ein hohes Maß an<br />

Symmetrie vorausgessetzt, um die Vorteile dieses <strong>Verfahren</strong>s sinnvoll ausschöpfen zu können.<br />

Für <strong>Szenen</strong> mit wenigen sich wiederholenden Elementen degeneriert das <strong>Verfahren</strong><br />

zu einem sehr primitiven Structure From Motion Ansatz, zu dem es deutlich effizientere<br />

Alternativen gibt. Ein großer Vorteil des <strong>Verfahren</strong>s ist dafür, dass es ohne komplexe Anpassungen<br />

mit quasi beliebig großen <strong>Szenen</strong> arbeiten kann, während die anderen beiden<br />

<strong>Verfahren</strong> in ihrer Basisversion auf einzelne Räume beschränkt sind. Mit einer ausreichend<br />

hochauflösenden Kamera lässt sich ein Wolkenkratzer genau so leicht rekonstruieren, wie<br />

ein dreistöckiges Mehrfamilienhaus. Insbesondere Kinect Fusion ist dagegen sehr stark auf<br />

kleine <strong>Szenen</strong> beschränkt. Dies liegt einerseits daran, dass der Kinect Sensor nur eine sehr<br />

kurze Reichweite hat, innerhalb der er präzise Ergebnisse liefert und zum Anderen, dass<br />

die Größe des Distanzfeldes im Voraus bekannt sein muss und sich dieses durchgehend<br />

komplett im Arbeitsspeicher der Grafikkarte befindet.<br />

6.2 Genauigkeit der <strong>Rekonstruktion</strong><br />

Kinect Fusion ist in der Lage, die Szene bis auf wenige Millimeter genau zu rekonstruieren.<br />

Zwar enthält die <strong>Rekonstruktion</strong> zu Beginn noch sehr viel Rauschen, dieses wird<br />

aber im Laufe der Zeit <strong>von</strong> selbst weitestgehend eliminiert. In [9] wird gezeigt, dass Kinect<br />

Fusion sogar in der Lage ist, selbst sehr flache Vertiefungen in Oberflächen, wie etwa eine<br />

Prägung auf der Seite eines Computergehäuses, korrekt erfassen kann. Durch die implizite<br />

Repräsentation <strong>von</strong> Obeflächen als Nulldurchgänge eines Distanzfeldes gehen scharfe Kanten<br />

allerdings fast vollständig verloren. Dies ist besonders dort gut sichtbar, wo sich viele<br />

feine Strukturen nahe beienander befinen, wie es etwa bei den Tasten einer Tastatur der<br />

Fall ist. Auch deutlich sichtbar ist, dass Objekte, die noch nicht durch Bewegung segmentiert<br />

wurden, scheinbar ineinander übergehen. Das Ergebnis wirkt an manchen Stellen ein<br />

wenig, als wäre die Szene komplett mit einer Folie überzogen, die schmale Einkerbungen<br />

verdeckt. Bedingt durch die Verwendung einer Structured Light Kamera im Infrarotbereich<br />

führen außerdem Objekte, die Infrarotlicht nicht direkt <strong>zur</strong>ückreflektieren oder selbst<br />

im Infrarotbereich strahlen, zu großflächigen <strong>Rekonstruktion</strong>sfehlern. Beispielsweise kann<br />

ein Aquarium weder bei angeschalteter noch bei ausgeschalteter Beleuchtung rekonstruiert<br />

werden. Statt die Scheiben des Aquariums zu erkennen und das Innere zu ignorieren,<br />

liefert der Sensor für den entsprechenden Bereich gar keine Tiefeninformationen.<br />

Tests mit gerenderten Bildern eines <strong>3D</strong>-Modells als Eingabe für das <strong>Verfahren</strong> <strong>zur</strong> Gebäuderekonstruktion<br />

in [5] haben ergeben, dass die Abweichung des rekonstruierten Modells<br />

<strong>von</strong> der Vorlage fast durchgehend deutlich unter einem halben Prozent der Gesamtgröße<br />

des Modells liegt. Ein Großteil des Gebäudes weist Abweichungen <strong>von</strong> ungefähr 0,1<br />

bis 0,3 Prozent auf, während der Fehler an einigen wenigen Stellen bis auf etwa 0,5 Prozent<br />

anwächst. Bei einer Gebäudehöhe <strong>von</strong> etwa 40 Metern wären das also Abweichungen<br />

32


6.3. Geschwindigkeit und Echtzeitfähigkeit 33<br />

<strong>von</strong> 4 bis 20 Zentimetern, was für die meisten Anwendugsfälle durchaus ausreichend sein<br />

dürfte. Eine Ausnahme bildet das Erdgeschoss des Gebäudes, da dort die Ebenen vom<br />

Benutzer nicht manuell unterteilt wurden. Die Qualität der <strong>Rekonstruktion</strong> hängt also<br />

unter anderem auch da<strong>von</strong> ab, wie gut die Eingaben des Benutzers sind. Ein auffälliger<br />

Fehler bei der <strong>Rekonstruktion</strong> mit echten Fotos ist, dass bei einem der Gebäude die Seitenwand<br />

und die Unterseite eines Vorsprunges nicht rekonstruiert wurden, da sie zu wenige<br />

Linien für eine Erkennung als relevante Flächen enthalten. Außerdem wurden an mehreren<br />

Stellen Fenster, die für den Benutzer sichtbar waren, nicht rekonstruiert, weil sie auf<br />

Grund der Perspektive nur teilweise sichtbar waren. Beide Fehler lassen sich allerdings verhältnismäßig<br />

leicht durch manuelles Eingreifen des Benutzers korrigieren, sofern dies <strong>von</strong><br />

der grafischen Benutzeroberfläche unterstützt wird. Es ist desweiteren auf verschiedenen<br />

Screenshots ersichtlich, dass die Unterteilung der Ebenen in Dreiecke nicht optimal ist und<br />

für eine spätere Verwendung des Modells gegebenenfalls überarbeitet werden muss.<br />

Zum SLAM-<strong>Verfahren</strong> mit einer monokularen Kamera werden leider im ursprünglichen Paper<br />

keine quantitativen Angaben <strong>zur</strong> Präzision der Messungen gemacht. Es wird allerdings<br />

aus den Screenshots deutlich, dass das <strong>Verfahren</strong> auch bei wenigen sichtbaren Features<br />

noch eine robuste Vorhersage der Kameraposition und der Featurepositionen leistet. Vorübergehend<br />

verdeckte oder sich außerhalb des Bildbereiches befindende Features werden<br />

zuverlässig wiedererkannt, sobald sie wieder sichtbar sind und ein eventuelles Abdriften<br />

der Kameraposition wird korrigiert, sobald wieder ausreichend bekannte Features gefunden<br />

werden.<br />

Etwas anders ist die Lage bei der an größere <strong>Szenen</strong> angepasste Version. Durch die Unterteilung<br />

der Szene sind zwar die Einzelteile in sich konsistent, aber beim der Abschätzung<br />

der Position, Rotation und Skalierung der Teile zueinander sind massive Abweichungen<br />

<strong>von</strong> der Realität sichtbar. Diese werden erst dann korrigiert, wenn ein geschlossener Kreis<br />

im Bewegungspfad der Kamera entdeckt wird.<br />

Allen drei <strong>Verfahren</strong> ist gemein, dass für eine Bestimmung des Maßstabes, der in den meisten<br />

Fällen für die Weiterverarbeitung der erstellten Modelle <strong>von</strong> Interesse ist, entweder eine<br />

im Voraus kalibrierte Kamera oder ein in der <strong>Rekonstruktion</strong> enthaltenes Referenzobjekt<br />

bekannter Größe benötigt wird. In [12] wird diese Information zum Beispiel dadurch gewonnen,<br />

dass zu Beginn der Aufnahme ein Blatt Papier in den Sichtbereich der Kamera<br />

gehalten wird und dessen Eckpunkte manuell als zu trackende Features identifiziert werden.<br />

6.3 Geschwindigkeit und Echtzeitfähigkeit<br />

Da das <strong>Verfahren</strong> <strong>von</strong> Ceylan et al. mit im Voraus aufgenommenen Einzelbildern arbeitet<br />

und für mehrere Zwischenschritte eine Hilfestellung durch den Benutzer benötigt, ist eine<br />

<strong>Rekonstruktion</strong> in Echtzeit <strong>von</strong> vorne herein ausgeschlossen. Der Fokus bei der Performanceoptimierung<br />

liegt ganz klar darauf, die Wartezeiten für den Benutzer während des<br />

Interaktiven Teils der <strong>Rekonstruktion</strong> möglichst gering zu halten. Dafür wird auch eine längere<br />

Vorberechnung im Bereich <strong>von</strong> bis zu einer Stunde auf einem Rechner mit 24 Kernen<br />

bei ” 3.33 MHz [sic!]“ (gemeint sind wahrscheinlich 3.33 GHz) bei 20 bis 30 Eingabebildern<br />

in Kauf genommen.<br />

Sowohl Kinect Fusion als auch die beiden Varianten des monokularen SLAM <strong>Verfahren</strong>s<br />

wurden mit dem Ziel entwickelt, in Echtzeit ausführbar zu sein, also mindestens 30 Frames<br />

pro Sekunde zu erreichen. Kinect Fusion benötigt dazu auf jeden Fall eine sehr moderne<br />

Grafikkarte, die sich über CUDA programmieren lässt. In [8] wird angegeben, dass <strong>zur</strong><br />

Berechnung eines einzelnen Frames bei einem würfelförmigen Distanzfeld mit einer Kantenlänge<br />

<strong>von</strong> 512 Voxeln etwa 25 Millisekunden benötigt werden. Dabei macht das Aktualisieren<br />

des Distanzfeldes mit ungefähr 10 Millisekunden den größten Anteil und auch<br />

33


34 6. Analyse und Vergleich verschiedener <strong>Verfahren</strong><br />

den am stärksten auflösungsabhängigen aus. Die anderen Arbeitsschritte werden kaum bis<br />

gar nicht <strong>von</strong> der Größe des Distanzfeldes beeinflusst. Leider gibt es in keinem der beiden<br />

Kinect Fusion Papers eine Angabe, auf welcher Hardware diese Messung vorgenommen<br />

wurde. Der einzige Hinweis ist ein Vortrag <strong>von</strong> David Kim auf dem 28. Chaos Communication<br />

Congress im Dezember 2011 in Berlin 1 . Dort wird erwähnt, dass der für den Vortrag<br />

eingesetzte PC ein moderner Gaming Laptop mit einer NVIDIA Grafikkarte mit etwa 500<br />

Kernen ist. Dementsprechend handelt es sich vermutlich um eine GeForce GTX 480, GTX<br />

570 oder GTX 580. Ob es sich dabei um das gleiche System handelt, mit dem auch die<br />

Messungen im Paper vorgenommen wurden, ist nicht bekannt.<br />

Bei den monokularen SLAM Varianten wurde viel Wert darauf gelegt, die maximale Rechenzeit<br />

pro Frame unabhängig <strong>von</strong> der <strong>Szenen</strong>komplexität konstant zu halten, weshalb<br />

sich eine konstante Framerate garantieren lässt. Da sich unter anderem durch die Anzahl<br />

der gleichzeitig zu trackenden Features problemlos einstellen lässt, ob mehr Wert auf Genauigkeit<br />

oder Geschwindigkeit gelegt werden soll, lässt sich auch auf schwachen Rechnern<br />

eine ausreichende Geschwindigkeit erzielen. Auf einem 2.2 GHz Intel Pentium Prozessor<br />

dauert die Berechnung eines Frames etwa 25 Millisekunden. Bei der überarbeiteten Version<br />

für größere <strong>Szenen</strong> wird nur die Berechnung des jeweils aktuellen <strong>Szenen</strong>teils in Echtzeit<br />

ausgeführt und benötigt nur wenige Millisekunden pro Frame. Das Zusammenfügen zu<br />

einer zusammenhängenden <strong>Rekonstruktion</strong> der gesamten Szene wird nach dem Ende der<br />

Aufnahme durchgeführt und dauert auf einem Intel Core 2 mit 2.4 GHz etwa im Bereich<br />

<strong>von</strong> einer Minute. Die Autoren erwähnen, dass das im Wesentlichen daran liegt, dass<br />

ein Teil der notwendigen Schritte in Matlab implementiert ist. Sie gehen da<strong>von</strong> aus, dass<br />

mit einer effizienten Implementierung in C++ eine Berechnung in Echtzeit machbar sein<br />

müsste.<br />

6.4 Daraus resultierende Einsatzgebiete<br />

Durch die unterschiedlichen Limitierungen, Detailgrade bei der <strong>Rekonstruktion</strong> und den<br />

unterschiedlichen Bedarf an Rechenleistung sind die drei <strong>Verfahren</strong> für sehr unterschiedliche<br />

Anwendungsfälle geeignet.<br />

Das <strong>Verfahren</strong> <strong>von</strong> Ceylan et al. ist mit Sicherheit das beschränkteste <strong>von</strong> den dreien. Durch<br />

die Limitierung auf <strong>Szenen</strong> mit ausschließlich geraden Linien und einem hohen Grad an<br />

Symmetrie, ist das <strong>Verfahren</strong> tatsächlich fast ausschließlich <strong>zur</strong> Akquisition <strong>von</strong> Gebäudemodellen<br />

geeignet. Da das erzeugte Modell relativ detailarm ist und meistens noch manuell<br />

nachbearbeitet werden muss, ist fraglich, ob sich ein halbautomatisches <strong>Rekonstruktion</strong>sverfahren<br />

überhaupt lohnt. Ein geübter Grafiker kann in der Zeit, die für Vorberechnung,<br />

interaktive <strong>Rekonstruktion</strong> und Nachbearbeitung des Modells benötigt wird, das gleiche<br />

Modell auch vollständig <strong>von</strong> Hand erstellen, sofern ihm die ungefähren Maße <strong>zur</strong> Verfügung<br />

stehen.<br />

Die beiden Varianten des monokularen <strong>Verfahren</strong>s eigenen sich kaum <strong>zur</strong> Konstruktion<br />

eines vollständigen Modells der Szene, da keinerlei Informationen über Oberflächen erfasst<br />

werden. Die erzeugten Punktwolken können aber zum Beispiel als Navigationsdaten<br />

für mobile Roboter dienen, für die nur wichtig ist, wo sie sich relativ zu verschiedenen<br />

Hindernissen und Zielpunkten befinden. Diese Daten müssen nur für die grobe Routenplanung<br />

ausreichen, da während der Fahrt auch zusätzliche Sensoren <strong>zur</strong> Vermeidung <strong>von</strong><br />

Kollisionen zum Einsatz kommen können.<br />

Kinect Fusion lässt sich verhältnismäßig vielseitig einsetzen. So kann es <strong>zur</strong> Erstellung<br />

<strong>von</strong> Modellen für kleine bis mittelgroße Gegenstände dienen, aber auch ganze Räume<br />

1 http://www.youtube.com/watch?v=bRgEdqDiOuQ<br />

34


6.4. Daraus resultierende Einsatzgebiete 35<br />

rekonstruieren und diese <strong>Rekonstruktion</strong> nutzen, um in Echtzeit zu registrieren, wie der<br />

Benutzer mit seiner Umgebung interagiert. Dadurch wird sowohl eine Verwendung als<br />

Eingabegerät als auch für eine Vielzahl <strong>von</strong> Augmented Reality Anwendungen ermöglicht.<br />

35


7. Zukünftige Anwendungen<br />

Dieses Kapitel soll verschiedene Ideen präsentieren, wie die in den vergangenen Kapiteln<br />

vorgestellten Techniken <strong>zur</strong> dreidimensionalen Erfassung und <strong>Rekonstruktion</strong> in Zukunft<br />

genutzt werden könnten. Zu einigen dieser Ideen existieren bereits Versuche und Prototypen<br />

im Wissenschaftlichen Rahmen, während andere bestenfalls als Konzepte zu bezeichnen<br />

sind. (Überarbeiten) ToDo<br />

7.1 Natural User Interface<br />

Unter dem Begriff ” Natural User Interface“ (NUI) werden verschiedene Ansätze zusammengefasst,<br />

die die Bedienung <strong>von</strong> Computern so direkt und intuitiv wie möglich gestalten<br />

sollen. Insbesondere fallen darunter Bewegungs- und Berührungsgesteuerte Systeme. Diese<br />

könnten in Zukunft durch eine volle dreidimensionale <strong>Rekonstruktion</strong> des Benutzers und<br />

seiner Umgebung wesentlich akkurater ausfallen.<br />

7.1.1 Skeletal Tracking und Gestensteuerung<br />

Bereits 2003 veröffentlichte Sony mit der EyeToy Kamera und den dazugehörigen Spielen<br />

für die PlayStation 2 erste kommerziell erfolgreiche Anwendungen mit Gestensteuerung.<br />

Da die Kamera allerdings ausschließlich ein Farbbild und keine <strong>3D</strong>-Scans lieferte, war<br />

sie für präzise Eingaben gerade bei schlechten Lichtverhältnissen zu unzuverlässig. Auch<br />

wurde in den meisten Anwendungen nur Bewegung als solche erkannt und kaum zwischen<br />

einzelnen Körperteilen unterschieden.<br />

Die Microsoft Kinect war ursprünglich auch hauptsächlich für die Steuerung <strong>von</strong> Videospielen<br />

konzipiert worden. Sie besitzt bereits firmmwareseitig einen Skeletal Tracking Algorithmus,<br />

der aus den Farb- und Tiefenbildern die Position <strong>von</strong> bis zu vier Benutzern<br />

und detailierte Informationen über die Positionen zwanzig verschiedener Körperteile – etwa<br />

Kopf, Schultern, Ellbogen, Handgelenken und Händen – <strong>von</strong> bis zu zwei Benutzern<br />

extrahieren kann. Allerdings neigt dieser Algorithmus dazu, bei nur teilweise sichtbaren<br />

Personen und Personen am Rand des Aufnahmebereichs unsinnige Posen mit verknoteten<br />

oder zu kurzen Gliedmaßen auszugeben, statt das Tracking abzubrechen. In seltenen<br />

Fällen werden auch Gegenstände fälschlicherweise als Personen erkannt (Abbildung 7.1).<br />

Daher sollte immer zusätzlich eine Plausibilitätsprüfung stattfinden.<br />

Es gibt inzwischen auch Versuche, einzelne Finger zu tracken. (Vernünftige Quelle su- ToDo<br />

chen. Bis jetzt nur Youtube Videos <strong>von</strong> Hobbyentwicklern gefunden. Weder<br />

37


ToDo<br />

38 7. Zukünftige Anwendungen<br />

Abbildung 7.1: Fehlerhafte Personenerkennung durch die Microsoft Kinect. Das Aquarium<br />

in der linken unteren Bildecke wird fälschlicherweise als Person erkannt.<br />

Desweiteren reicht die Ansicht des Oberkörpers allein nicht für ein Tracking<br />

aus.<br />

Erklärung, wie es funktioniert, noch wissenschaftliche Veröffentlichungen) Die<br />

vorgestellten <strong>Rekonstruktion</strong>smethoden oder jedenfalls ähnliche <strong>Verfahren</strong> könnten dazu<br />

beitragen, wesentlich rauschfreiere und damit präzisere Informationen über die Fingerpositionen<br />

des Benutzers zu erhalten, als bisher möglich. Somit wäre es möglich, nicht nur<br />

Spiele, sondern auch Anwendungssoftware sinnvoll durch Gesten zu steuern. Beispielsweise<br />

könnte Präsentationssoftware da<strong>von</strong> profitieren, dass der Anwender sie frei im Raum<br />

stehend durch subtile Gesten steuert. (ggf. mehr)<br />

7.1.2 Berührungssteuerung und Multitouch auf beliebigen Oberflächen<br />

In [9] wird bereits angedeutet, dass sich die getrennte <strong>Rekonstruktion</strong> <strong>von</strong> Objekten in einer<br />

Szene nutzen ließe, um deren Berührungspunkte zu ermitteln. Das dortige Anwendungsbeispiel<br />

ist die Erkennung der Fingerpositionen des Benutzers, um eine berührungsbasierte<br />

Steuerung auf beliebigen Oberflächen zu realisieren.<br />

Eine Perfektionierung dieser Technologie könnte die Art, wie viele Anwendungen bedient<br />

werden, nachhaltig verändern und verschiedene Eingabegeräte obsolet machen. Gegenstände<br />

könnten durch einfaches Antippen ausgewählt werden, etwa um Informationen darüber<br />

auf dem Bildschirm anzeigen zu lassen. Leinwände und Monitore quasi beliebiger Größe<br />

könnten kostengünstig mit einer Multitouch Funktion ähnlich wie bei aktuellen Mobiltelefonen<br />

und Tablet PCs ausgerüstet werden. Allerdings muss nicht immer gänzlich auf<br />

ein Eingabegerät verzichtet werden. So könnten etwa teure Grafiktabletts dadurch ersetzt<br />

werden, dass die Kamera eine Stiftspitze – etwa <strong>von</strong> einem Kugelschreiber ohne Mine – auf<br />

einem quasi beliebig großen Blatt Papier oder direkt auf der Tischplatte trackt. Bei ausreichend<br />

genauer <strong>Rekonstruktion</strong> wäre es sogar prinzipiell möglich, die Verformung einer<br />

Stift- oder Pinselspitze an die Anwendung zu senden, um so zum Beispiel die Strichdicke<br />

zu beeinflussen.<br />

Um diese Ziele zu erreichen, gibt es noch einige Hürden zu bezwingen. So müssen auch<br />

teilweise verdeckte Finger zuverlässig und präzise getrackt werden und zufällige Berührungen<br />

dürfen nicht zu ungewollten Eingaben führen. Auch muss eine Berührung mit den<br />

Fingerspitzen zuverlässig <strong>von</strong> Berührungen mit dem Rest der Hand unterschieden werden.<br />

38


7.2. Erfassung <strong>von</strong> Personen 39<br />

7.2 Erfassung <strong>von</strong> Personen<br />

Obwohl sich diese Arbeit hauptsächlich mit der <strong>Rekonstruktion</strong> <strong>von</strong> <strong>Szenen</strong> und in sich<br />

starren Objekten befasst, lassen sich verschiedene Ansätze auch auf die Erzeugung akkurater<br />

dreidimensionaler Modelle <strong>von</strong> Personen übertragen. Dabei sind allerdings besondere<br />

Anpassungen vorzunehmen, um auch feinere Details, besonders im Gesicht nachzubilden,<br />

um Grenzen zwischen Haut und Kleidung als solche zu erkennen und um zu berücksichtigen,<br />

dass ein Großteil des menschlichen Körpers nicht starr, sondern weich verformbar<br />

ist.<br />

7.2.1 Verwendung <strong>von</strong> Gesichtsscans in Videospielen<br />

Viele moderne Videospiele – insbesondere Onlinerollenspiele – bieten dem Spieler an, das<br />

Aussehen seines Charakters nach seinen Wünschen anzupassen. Auf diese Weise soll sowohl<br />

eine emotionale Bindung zum Charakter hergestellt als auch die Wiedererkennbarkeit<br />

<strong>von</strong> Spielern in Onlinespielen gewährleistet werden. Allerdings werden dazu insbesondere<br />

für die Gesichtszüge meist nur einige wenige Vorlagen angeboten, die sich eventuell noch<br />

mit Schiebereglern in begrenztem Umfang anpassen lassen. Damit lassen sich bestimmte<br />

Gesichter nur mit viel Zeitaufwand oder unter Umständen auch gar nicht nachbilden.<br />

In [15] stellen Zollhöfer et al. ein <strong>Verfahren</strong> vor, mit dem sich innerhalb <strong>von</strong> wenigen Sekunden<br />

Gesichter anhand <strong>von</strong> <strong>3D</strong>-Scans zu rekonstruieren. Dazu wird ein generisches Gesichtsmodell<br />

automatisch so verformt, dass es einer aufgenommenen Punktwolke möglichst<br />

genau entspricht, ohne dabei durch Rauschen entstandene Fehler zu übernehmen. Damit<br />

bleiben zwar immer noch einige der Einschränkungen des manuellen Ansatzes, da besonders<br />

ungewöhnliche Gesichtsmerkmale wie etwa Verletzungen nicht nachgebildet werden<br />

können, aber durch die Automatisierung können immerhin wesentlich mehr Freiheitsgrade<br />

in wesentlich weniger Zeit präzise eingestellt werden.<br />

Abbildung 7.2: Gesichtsrekonstruktion durch Anpassung eines generischen Modells an<br />

Messdaten eines <strong>3D</strong>-Scanners. [19]<br />

Es wäre denkbar, diesen Ansatz in Zukunft mit den vorgestellten <strong>Verfahren</strong> <strong>zur</strong> Objektrekonstruktion<br />

zu kombinieren, um zunächst ein möglichst rauschfreies Basismodell zu<br />

generieren und auf dieses dann eine automatisch erzeugte Bump Map Textur mit weiteren<br />

Details aufzutragen. So wäre es jedem Spieler möglich, innerhalb <strong>von</strong> Sekunden und ohne<br />

explizite Interaktion ein individuelles Gesicht für seine Spielfigur zu erstellen, das dann auf<br />

Wunsch weiter bearbeitet oder mit Freunden getauscht werden kann.<br />

7.2.2 Trafficeffiziente Videochats<br />

Während durch moderne DSL-Anschlüsse und moderne Kompressionsalgorithmen Voiceover-IP<br />

Gespräche auch mit mehreren Personen alltäglich geworden sind, reicht die Bandbreite<br />

selbst für hochauflösende Videochats mit nur zwei Teilnehmern nach wie vor nicht<br />

immer aus.<br />

39


40 7. Zukünftige Anwendungen<br />

Hochqualitative <strong>Rekonstruktion</strong>sverfahren könnten dazu beitragen, die benötigte Bandbreite<br />

drastisch zu reduzieren. Statt tatsächlich Videodaten zu übertragen, würde jeder<br />

Benutzer vor dem ersten Gespräch mit Hilfe einer <strong>3D</strong>-Kamera ein detailiertes Modell <strong>von</strong><br />

sich selbst erstellen, das er im Folgenden als eine Art Avatar verwenden kann. Im Gegensatz<br />

zu herkömmlichen virtuellen <strong>3D</strong>-Chaträumen wie etwa Second Life, in denen sich der<br />

Benutzer einen Avatar aus vorgefertigten Komponenten zusammenstellen kann, wäre es<br />

hier problemlos möglich, auch individuelle Details wie Gesichtszüge, Frisur und Kleidung<br />

akkurat nachzubilden, ohne dem Benutzer künstlerisches Können abzuverlangen.<br />

Dieser Avatar würde beim ersten Verbindungsaufbau zum Gegenüber übertragen. Danach<br />

müsste die <strong>3D</strong>-Kamera nur noch Gestik und Mimik des Benutzers verfolgen, damit diese<br />

als Animationsdaten zum Gesprächspartner gesendet werden können, um auf dessen<br />

Rechner den Avatar entsprechend zu verformen. Mit einem skelett- und morphingbasierten<br />

Animationssystem könnte die benötigte Bandbreite so selbst bei mehreren hundert<br />

Datenpunkten auf wenige Kilobyte pro Sekunde reduziert werden. Somit wäre der verursachte<br />

zusätzliche Traffic durch die einmalige Übertragen des Avatars schon nach wenigen<br />

Minuten aufgewogen.<br />

Zwar wäre ein gerendertes Abbild mit heutigen Renderingmethoden sicherlich optisch <strong>von</strong><br />

einer tatsächlichen Videoübertragung zu unterscheiden, aber da die Grafikkarte während<br />

typischer Anwendungsszenarien für Videochats ohnehin kaum ausgelastet ist und außer<br />

den Avataren der Gesprächspartner (und gegebenenfalls dem eigenen) keine weiteren aufwändigen<br />

Modelle dargestellt werden müssen, können auch komplexe Renderingverfahren<br />

zum Einsatz kommen, die für die Darstellung ganzer <strong>Szenen</strong> zu aufwändig wären. Außerdem<br />

ist nicht zu unterschätzen, dass die akkurate Wiedergabe <strong>von</strong> Gestik und Mimik auch<br />

vom Computer gerenderte Modelle bis zu einem gewissen Grad lebendig wirken lassen<br />

kann.<br />

7.2.3 Digitale Umkleidekabinen<br />

Das Modegeschäft ist einer der wenigen Bereiche, in denen der Einkauf online immer<br />

noch umständlicher ist, als im Laden. Der Hauptgrund dafür ist, dass die Ware nicht im<br />

Voraus anprobiert werden kann. Oft kommt es vor, dass Kleidung, die auf dem Foto vielversprechend<br />

aussah, am eigenen Körper vollkommen anders wirkt und <strong>zur</strong>ückgeschickt<br />

werden muss. Auch in Kaufhäusern wäre es sowohl aus Zeit- als auch aus Hygienegründen<br />

wünschenswert, wenn vor der eigentlichen Anprobe in der Umkleidekabine schon eine<br />

Vorauswahl getroffen werden könnte.<br />

Die Lösung für dieses Problem versprechen inzwischen verschiedenste Anbieter sogenannter<br />

” digitaler Umkleidekabinen“. Dabei handelt es sich um Software, die das gewünschte<br />

Kleidungsstück über ein per Webcam aufgenommenes Foto oder Video legt. Das Ergebnis<br />

wirkt aber in den meisten Fällen platt und unrealistisch, da nur die ungefähre Körperhaltung,<br />

aber nicht die Körperform berücksichtigt wird. Mit detailierten <strong>3D</strong>-Scans des<br />

Kunden könnte stattdessen die genaue Lage und Bewegung des Stoffs simuliert werden,<br />

um ihm so ein möglichst akkurates Bild da<strong>von</strong> zu liefern, wie die Ware an ihm aussieht. Ein<br />

weiterer Vorteil an einer vollen <strong>Rekonstruktion</strong> besteht darin, dass der Benutzer sich auch<br />

in Echtzeit <strong>von</strong> hinten betrachten kann, da die virtuelle Kamera frei in der rekonstruierten<br />

Szene bewegt werden kann.<br />

Die Herausforderung dabei besteht unter Umständen darin, die <strong>Rekonstruktion</strong>sverfahren<br />

so weit zu verbessern, dass sie die Kleidung, die der Kunde aktuell trägt, vom Körper losgelöst<br />

behandeln kann. Ansonsten wäre es nur möglich, die Anwendung in Unterwäsche oder<br />

mit eng anliegender Kleidung zu bedienen, wenn die Simulation nicht verfälscht werden<br />

soll. Dies kann und sollte aber nicht in allen Anwendungsfällen vorausgesetzt werden.<br />

40


7.3. Vereinfachte Akquisition <strong>von</strong> Modellen 41<br />

7.3 Vereinfachte Akquisition <strong>von</strong> Modellen<br />

Der offensichtlichste Nutzen <strong>von</strong> <strong>3D</strong>-Scannern und <strong>3D</strong>-Kameras besteht darin, die erzeugten<br />

Modelle auch tatsächlich so zu verwenden, wie man es mit <strong>von</strong> Hand erstellten Modellen<br />

auch tun würde. Dies schließt insbesondere das Rendern in Filmen, Spielen und anderen<br />

<strong>3D</strong>-Anwendungen ein, aber auch zum Beispiel das Drucken mit einem <strong>3D</strong>-Drucker. Natürlich<br />

wird dies auch heute schon teilweise umgesetzt, aber das volle Potential wird immer<br />

noch nicht ausgeschöpft. Richtig eingesetzt, können <strong>3D</strong>-Scanner sehr viel Aufwand bei der<br />

Erstellung <strong>von</strong> Modellen sparen und zudem auch zu besseren Ergebnissen führen, wenn<br />

eine manuelle Vermessung eines Objekts mit Maßband und Messschieber oder auch das<br />

Arbeiten mit Fotoreferenzen sich als schwierig erweist, etwa weil das zu modellierende<br />

Objekt eine sehr ungewöhnliche und komplexe Form aufweist.<br />

7.3.1 <strong>3D</strong>-Kopien in Massenproduktion<br />

Derzeit genießen verschiedenste Arten <strong>von</strong> <strong>3D</strong>-Druckern rasch steigende Popularität. Zwar<br />

sind derartige Geräte für die meisten Privatverbraucher noch deutlich zu sperrig und zu<br />

teuer, aber in Internet gibt es inzwischen verschiedene Anbieter, die hochgeladene Modelle<br />

gegen eine geringe Gebühr in verschiedensten Materialien drucken. In der Regel handelt es<br />

sich um verschiedene Kunststoffe und Metalle, aber auch ausgefallene Materialien wie zum<br />

Beispiel Schokolade werden angeboten. Es ist abzusehen, dass derartige Dienste mit den<br />

sinkenden Anschaffungs- und Betriebskosten und zunehmend kleiner werdenden Druckern<br />

in naher Zukunft auch in klassischen Copyshops angeboten werden könnten. Voraussetzung<br />

dafür ist allerdings, dass die Anfertigung der zu druckenden Modelle wesentlich vereinfacht<br />

wird. Derzeit wird ein Großteil da<strong>von</strong> noch <strong>von</strong> Hand vermessen und in CAD-Programmen<br />

nachgebildet.<br />

Mit kostengünstigen <strong>3D</strong>-Scannern und robusten <strong>Rekonstruktion</strong>salgorithmen könnten aber<br />

zumindest Gegenstände, bei denen alle wichtigen Strukturen <strong>von</strong> außen sichtbar sind, Innerhalb<br />

<strong>von</strong> weniger als einer Minute vom Computer erfasst werden, um sie dann nach<br />

einer rudimentären manuellen Nachbearbeitung in Kleinserien zu replizieren. So ist es<br />

möglich, Vorlagen aus leicht zu bearbeitenden Materialien wie etwa Ton oder Modelliermasse<br />

anzufertigen und daraus Kunststoffteile in Stückzahlen anzufertigen, für die sich die<br />

Herstellung einer Form für Spritzgussmaschinen finanziell nicht lohnen würde. Desweiteren<br />

wäre es problemlos möglich, Kopien anzufertigen, die <strong>von</strong> der Vorlage in der Größe<br />

abweichen.<br />

7.3.2 Basis für prozedural erstellte Städte<br />

Für Filme, Videospiele und einige andere Anwendungen werden häufig große Stadtpanoramen<br />

als Kulisse benötigt. Wo früher ein gemaltes Bild im Hintergrund ausreichte, um<br />

die Illusion einer Großstadt aufrecht zu erhalten, verlangen moderne Actionsequenzen mit<br />

imposanten Kamerafahrten in der Regel ein dreidimensionales Modell der Stadt. Da die<br />

Erstellung eines solchen Modelles in den allermeisten Fällen zu zeitaufwändig und damit<br />

zu teuer ist, wurden in der Vergangenheit <strong>Verfahren</strong> entwickelt, um prozedural zufällige<br />

Städte zu erzeugen. Sie bestehen aus Gebäuden, die nach einer festen Vorschrift angeordnet<br />

und selbst wiederum nach bestimmten Vorschriften aus Einzelteilen zusammengesetzt<br />

sind. Während für die Anordnung der Gebäude meist auch eher simple <strong>Verfahren</strong> zu glaubwürdigen<br />

Ergebnissen führen, erweist sich die Beschreibung <strong>von</strong> prozeduralen Modellen für<br />

einzelne Gebäude oft als schwierig, wenn diese abwechslungsreich, aber nicht unrealistisch<br />

aussehen sollen.<br />

Es wäre durchaus denkbar, <strong>Rekonstruktion</strong>en <strong>von</strong> echten Gebäuden (siehe 4.1) als Basis<br />

für diese prozeduralen Modelle heranzuziehen. Ein erster Schritt wäre, sie manuell in Einzelteile<br />

zu zerlegen, die dann als Rohmaterial für neue Gebäude dienen. Es wäre aber auch<br />

41


ToDo<br />

42 7. Zukünftige Anwendungen<br />

interessant, diesen Schritt auch zu automatisieren und dabei auch automatisch erkennen zu<br />

lassen, nach welchen Mustern die tatsächlichen Gebäuden aufgebaut sind. Das in Kapitel<br />

4.1 vorgestellte <strong>Verfahren</strong> nutzt ohnehin schon Informationen über den Aufbau <strong>von</strong> Gebäuden<br />

aus einzelnen, symmetrisch angeordneten Elementen. Diese Informationen könnten<br />

durchaus genutzt werden, um daraus allgemeinere Regeln zum Aufbau <strong>von</strong> Gebäuden zu<br />

abstrahieren. Damit wäre es möglich, vollautomatisch aus einer Reihe an Fotos erst entsprechende<br />

<strong>3D</strong>-Modelle zu erstellen und dann daraus eine ganze Stadt zu rekombinieren,<br />

die dem realen Vorbild stilistisch zwar stark ähnelt, aber nicht exakt gleich aussieht.<br />

7.4 <strong>3D</strong>-Keying als Alternative zum Chroma-Keying<br />

Für viele Filmproduktionen ist es nötig, Bildelemente freizustellen, um sie anschließend<br />

mit getrennt aufgenommenen oder computergenerierten Elementen zu kombinieren. Die<br />

wohl häufigste Anwendung dafür ist das Kombinieren <strong>von</strong> realen Schauspielern mit einem<br />

computergenerierten Hintergrund. Das derzeit am häufigsten verwendete <strong>Verfahren</strong> dafür<br />

ist das sogenannte Chroma-Keying, bei dem die Schauspieler vor einem einfarbigen Hintergrund,<br />

je nach Farbe zum Beispiel Bluescreen oder Greenscreen genannt, aufgenommen<br />

werden. Das Freistellen der Schauspieler erfolgt dann – vereinfacht ausgedrückt – indem<br />

sämtliche Pixel, deren Farbe der vorgegebenen Hintergrundfarbe ähnlich genug sind, entfernt<br />

werden.<br />

Obwohl sich Chroma-Keying seit langem als Standardverfahren etabliert hat, erweist es<br />

sich gerade im Amateurbereich oft als zu aufwändig. Um eine fehlerfreie Erkennung zu<br />

gewährleisten, muss ein ausreichend großer, faltenfreier und gleichmäßig ausgeleuchteter<br />

Screen <strong>zur</strong> Verfügung stehen. Bei der Wahl einer geeigneten Farbe gilt es insbesondere<br />

zu beachten, eine Farbe zu wählen, die im Vordergrund möglichst wenig vorkommt, um<br />

einen guten Kontrast zu erhalten. Es wäre also nur schwer möglich, je eine Person mit<br />

roter, grüner und blauer Kleidung gleichzeitig mittels Chroma Keying freizustellen. Eine<br />

weitere Schwierigkeit besteht darin, dass sich eine indirekte Beleuchtung des Vordergrundes<br />

durch vom Screen reflektiertes Licht oft nicht vermeiden lässt und daher eine störende<br />

Farbverfälschung verursacht, die unter Umständen nachträglich digital entfernt werden<br />

muss.<br />

Keying mittels <strong>3D</strong>-Kameras kann diese Probleme im Wesentlichen eliminieren, indem anhand<br />

einer dreidimensionalen <strong>Rekonstruktion</strong> der Szene entschieden werden kann, welche<br />

Pixel im Farbbild zum Vordergrund gehören und welche zum Hintergrund. Derzeitige <strong>3D</strong>-<br />

Kameras bieten in der Regel noch eine zu niedrige Auflösung für eine sinnvolle Anwendung,<br />

da schon wenige falsch identifizierte Pixel unangenehm auffallen können. Mit verbesserter<br />

Hardware sowie angepassten <strong>Rekonstruktion</strong>sverfahren könnte dies aber bald möglich<br />

sein. Wichtig ist hier weniger eine zu einhundert Prozent akkurate <strong>Rekonstruktion</strong> der<br />

Szene als eine pixel- oder sogar subpixelgenaue Identifikation einzelner <strong>Szenen</strong>elemente<br />

im Farbbild. Denkbar wäre eine Kombination aus dreidimensionaler <strong>Rekonstruktion</strong> und<br />

Kantenerkennung im Farbbild.<br />

Mit einem derartigen Keying-<strong>Verfahren</strong> wäre es möglich, Rohdaten für zusammengesetztes<br />

Filmmaterial vor beliebigen Hintergründen und bei quasi beliebiger Beleuchtung aufzunehmen.<br />

Dadurch könnten sich auch für professionelle Filmdrehs Produktionskosten drastisch<br />

verringern, da es nicht mehr nötig wäre, große Sets komplett mit einem Screen auszustatten.<br />

Da es bei vorhandener Hardware im Wesentlichen keinen Mehraufwand bedeutet,<br />

Tiefeninformationen zu erfassen, ist es durchaus auch denkbar, diese grundsätzlich immer<br />

mit aufzunehmen. So ist es auch noch nach dem eigentlichen Dreh ohne Probleme möglich,<br />

den Hintergrund einer Szene auszutauschen.<br />

(Mehr Brainstorming)<br />

42


8. Fazit<br />

Obwohl auf dem Gebiet des maschinellen Sehens und der <strong>3D</strong>-<strong>Szenen</strong>rekonstruktion in<br />

den letzten Jahren sehr große Fortschritte gemacht wurden, gibt es noch eine Vielzahl an<br />

Problemen zu lösen. Die momentanen <strong>Verfahren</strong> sind nach wie vor stark auf einzelne Anwendungsfälle<br />

spezialisiert und liefern außerhalb dieser meist nur äußerst unbefriedigende<br />

Ergebnisse. Wenn das endgültige Ziel lautet, eine annähernd beliebig große dynamische<br />

Szene in Echtzeit zu rekonstruieren, so ist der Grundstein zwar bereits gelegt, aber insbesondere<br />

die derzeit noch bestehenden Beschränkungen in der Aufnahmequalität <strong>von</strong> <strong>3D</strong>-<br />

Kameras und in den Möglichkeiten der Parallelverarbeitung stellen ein großes Hindernis<br />

dar, das vermutlich auch mit verbesserten Algorithmen kaum zu überwinden ist.<br />

43


Literaturverzeichnis<br />

[1] Paul E. Debevec, Camillo J. Taylor, and Jitendra Malik. Modeling and rendering<br />

architecture from photographs: a hybrid geometry- and image-based approach. In<br />

Proceedings of the 23rd annual conference on Computer graphics and interactive techniques,<br />

SIGGRAPH ’96, pages 11–20, New York, NY, USA, 1996. ACM.<br />

[2] Sameer Agarwal, Noah Snavely, Ian Simon, Steven M Seitz, and Richard Szeliski.<br />

Building rome in a day. 2009 IEEE 12th International Conference on Computer<br />

Vision, (Iccv):72–79, 2009.<br />

[3] Sebastian Schuon, Christian Theobalt, James Davis, and Sebastian Thrun. Highquality<br />

scanning using time-of-flight depth superresolution. 2008 IEEE Computer<br />

Society Conference on Computer Vision and Pattern Recognition Workshops, pages<br />

1–7, 2008.<br />

[4] S. Burak Gokturk, Hakan Yalcin, and Cyrus Bamji. A time-of-flight depth sensor<br />

- system description, issues and solutions. In Proceedings of the 2004 Conference<br />

on Computer Vision and Pattern Recognition Workshop (CVPRW’04) Volume 3 -<br />

Volume 03, pages 35–, Washington, DC, USA, 2004. IEEE Computer Society.<br />

[5] Duygu Ceylan, Niloy J. Mitra, Hao Li, Thibaut Weise, and Mark Pauly. Factored<br />

facade acquisition using symmetric line arrangements. Computer Graphics Forum<br />

(Proc. EG’12), 31(1), May 2012.<br />

[6] Noah Snavely, Steven M. Seitz, and Richard Szeliski. Photo tourism: exploring photo<br />

collections in 3d. In ACM SIGGRAPH 2006 Papers, SIGGRAPH ’06, pages 835–846,<br />

New York, NY, USA, 2006. ACM.<br />

[7] Vladimir Kolmogorov. Convergent tree-reweighted message passing for energy minimization.<br />

IEEE Trans. Pattern Anal. Mach. Intell., 28:1568–1583, October 2006.<br />

[8] Richard A. Newcombe, Shahram Izadi, Otmar Hilliges, David Molyneaux, David Kim,<br />

Andrew J. Davison, Pushmeet Kohli, Jamie Shotton, Steve Hodges, and Andrew W.<br />

Fitzgibbon. Kinectfusion: Real-time dense surface mapping and tracking. In ISMAR,<br />

pages 127–136. IEEE, 2011.<br />

[9] Shahram Izadi, David Kim, Otmar Hilliges, David Molyneaux, Richard Newcombe,<br />

Pushmeet Kohli, Jamie Shotton, Steve Hodges, Dustin Freeman, Andrew Davison,<br />

and Andrew Fitzgibbon. Kinectfusion: real-time 3d reconstruction and interaction<br />

using a moving depth camera. In Proceedings of the 24th annual ACM symposium<br />

on User interface software and technology, UIST ’11, pages 559–568, New York, NY,<br />

USA, 2011. ACM.<br />

[10] Szymon Rusinkiewicz and Marc Levoy. Efficient variants of the ICP algorithm. In<br />

Third International Conference on <strong>3D</strong> Digital Imaging and Modeling (<strong>3D</strong>IM), June<br />

2001.<br />

45


46 Literaturverzeichnis<br />

[11] Brian Curless and Marc Levoy. A volumetric method for building complex models<br />

from range images. In Proceedings of the 23rd annual conference on Computer graphics<br />

and interactive techniques, SIGGRAPH ’96, pages 303–312, New York, NY, USA,<br />

1996. ACM.<br />

[12] Andrew J. Davison. Real-time simultaneous localisation and mapping with a single<br />

camera. In Proceedings of the Ninth IEEE International Conference on Computer<br />

Vision - Volume 2, ICCV ’03, pages 1403–, Washington, DC, USA, 2003. IEEE Computer<br />

Society.<br />

[13] Jianbo Shi and Carlo Tomasi. Good features to track. In 1994 IEEE Conference on<br />

Computer Vision and Pattern Recognition (CVPR’94), pages 593 – 600, 1994.<br />

[14] Laura A. Clemente, Andrew J. Davison, Ian D. Reid, José Neira, and Juan D. Tardós.<br />

Mapping large loops with a single hand-held camera. In Wolfram Burgard, Oliver<br />

Brock, and Cyrill Stachniss, editors, Robotics: Science and Systems. The MIT Press,<br />

2007.<br />

[15] Michael Zollhöfer, Michael Martinek, Günther Greiner, Marc Stamminger, and Jochen<br />

Süßmuth. Automatic reconstruction of personalized avatars from 3d face scans.<br />

Computer Animation and Virtual Worlds, 22(2-3):195–202, 2011.<br />

46


Bildquellen<br />

[16] Evan-Amos. Xbox 360 kinect standalone. Wikimedia Commons 1 , 2011.<br />

[17] Kolossos. Kinect2 ir image. Wikimedia Commons 2 , CC-BY-SA 3 , 2011.<br />

[18] Kolossos. Kinect2 deepmap. Wikimedia Commons 4 , CC-BY-SA 5 , 2011.<br />

[19] Michael Zollhöfer, Michael Martinek, Günther Greiner, Marc Stamminger, and Jochen<br />

Süßmuth. Automatic reconstruction of personalized avatars from 3d face scans.<br />

Computer Animation and Virtual Worlds, 22(2-3):195–202, 2011.<br />

1 http://commons.wikimedia.org/wiki/File:Xbox-360-Kinect-Standalone.png<br />

2 http://commons.wikimedia.org/wiki/File:Kinect2-ir-image.png<br />

3 http://creativecommons.org/licenses/by-sa/3.0/deed.en<br />

4 http://commons.wikimedia.org/wiki/File:Kinect2-deepmap.png<br />

5 http://creativecommons.org/licenses/by-sa/3.0/deed.en<br />

47


Erklärung<br />

Ich versichere, dass ich die Arbeit ohne fremde Hilfe und ohne Benutzung anderer als<br />

der angegebenen Quellen angefertigt habe, und dass die Arbeit in gleicher oder ähnlicher<br />

Form noch keiner anderen Prüfungsbehörde vorgelegen hat und <strong>von</strong> dieser als Teil einer<br />

Prüfungsleistung angenommen wurde. Alle Ausführungen, die wörtlich oder sinngemäßübernommen<br />

wurden, sind als solche gekennzeichnet.<br />

Karlsruhe, den 12. März 2012<br />

(Christian Käser)

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!