3D-Scan 2.0 - Virtuelle Realität und Multimedia

Transcription

3D-Scan 2.0 - Virtuelle Realität und Multimedia
Technische Universität Bergakademie Freiberg
Fakultät für Mathematik und Informatik
Institut für Informatik
Lehrstuhl für virtuelle Realität und Multimedia
Wissenschaftliche Visualisierung
3D-Scan 2.0
Martin Reinhardt
Steffen Dach
Martin Backasch
Christian Schlegel
Tobias Schröder
15. September 2011
Betreuer/1. Korrektor:
Prof. B. Jung
2. Korrektor:
Dr. Ben Amor
2
Die von den Firmen Microsoft und PrimeSense entwickelte Hardware
Kinect ist eine Sensorleiste bestehend aus einer Tiefensensor-Kamera,
einer Farbkamera und einem 3D-Mikrofon. Sie ist in Deutschland seid
dem 10. November erhältlich und wurde weltweit über 10 Millionen
mal verkauft. Bereits wenige Tage nach der Veröffentlichung gab es
erste Projekte, welche die Nutzung am PC unter Verwendung verschiedener Betriebssysteme ermöglichte.
An der TU Bergakademie Freiberg wurde am Institut für Informatik im
Sommersemester 2011 das Projekt „3D-Scan 2.0“ gestartet. Ziel ist es
dabei, mit Hilfe dieser speziellen Hardware Objekte zu scannen und
das Ergebnis als Punktwolke oder als Gittermodel zu speichern.
In dieser Dokumentation sollen die Hardware und alle für die Software
relevanten Algorithmen vorgestellt und erklärt werden.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
3
Inhaltsverzeichnis
Inhaltsverzeichnis
1. Hardware
1.1. Die Kinect Senorleiste . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Scan-Tablet und Scan-Frame . . . . . . . . . . . . . . . . . . . .
1.3. Netzteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
5
6
2. Kalibrierung
2.1. Grund der Kalibrierung . . . . . . . . . . . . . . . . . . . . . . .
2.2. praktische Realisierung . . . . . . . . . . . . . . . . . . . . . . .
7
7
7
3. Poisson Surface Reconstruction
3.1. Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Parameter der PSR . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. Beispiel verschiedener Parameter . . . . . . . . . . . . . . . . . .
9
9
10
11
4. Applikationen für Tests
4.1. Applikationsstarter . . . . . . . . . . . . . . . .
4.2. OpenSceneGraph Testprogramm . . . . . . . .
4.3. Kinect Testprogramm . . . . . . . . . . . . . .
4.4. Standard Testprogramm . . . . . . . . . . . . .
4.5. Benchmark der Poisson-Surface-Reconstruction
4.6. Poisson-Surface-Reconstruction Testprogramm .
4.7. Mesh-Färbung Testprogramm . . . . . . . . . .
.
.
.
.
.
.
.
14
14
14
14
15
16
17
19
5. Scannen einer markierten Szene
5.1. Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Benutzung und Ansicht . . . . . . . . . . . . . . . . . . . . . . .
5.3. genauer Programmablauf . . . . . . . . . . . . . . . . . . . . . .
20
20
20
21
6. Generierung eines Modells
24
A. genaue Hardwarespezifikationen
28
B. mathematische Beschreibung der Kalibrierung
B.1. Das Lochkameramodell . . . . . . . . . . .
B.2. Geometrie des Modells . . . . . . . . . . .
B.3. Mapping zwischen Farb- und Tiefenwerten
B.4. Grenzen und Probleme des Modells . . . .
Literatur
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
30
30
32
33
34
4
1. Hardware
1. Hardware
Die Grundlage für das gesamte 3D-Scan-Projekt bildet die zur Verfügung gestellte Hardware. Natürlich steht die Microsoft Kinect dabei im Mittelpunkt, jedoch sind auch andere Hilfsmittel sehr wichtig, um einen erfolgreichen qualitativ
hochwertigen Scan zu realisieren.
1.1. Die Kinect Senorleiste
Die Microsoft Kinect wurde in Zusammenarbeit mit dem Videospiel-Entwickler
Rare Ltd. und der israelischen Firma PrimeSense entwickelt. Die Sensorleiste besteht aus einer RGB-Kamera, einem Infarot-Sensor, einem Infarot-Projektor und
einem 3D-Mikrofon (multi-microphone-array).
Abb. 1: Aufbau der Kinect Sensorleiste
Für die Datenübertragung wird ein spezieller proprietärer Microsoft-zertifizierter
USB-Port genutzt, welcher neben dem USB 2.0 Standard zusätzlichen Strom (12
Volt bei 1.08 Ampere) liefert. Ein mitgelieferter Adapter mit Netzteil stellt hierbei eine Lösung zum Anschluss an einen standardisierten USB 2.0 Port (Typ-A)
bereit. Die Sensorleiste hat einen motorisierten Standfuß, mit welcher die Sensorleiste um jeweils 27◦ auf- und abgeneigt werden kann. Mit Hilfe der originalen
Microsoft-Xbox-Software wird eine praktische Nutzweite von 1.2-3.5m erreicht,
andererseits wurde bereits erfolgreiche Trackingsoftware im Bereich 0.7-6m getestet.
Die in der Kinect verbaute RGB-Kamera nutzt zur Bilderzeugung einen BayerSensor, mit Hilfe dessen verschiedene Streams erzeugt werden. Dabei werden
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
1.2. Scan-Tablet und Scan-Frame
5
Abb. 2: Funktionsweise des Infarot-Systems
die Auflösungen 640x480 und 1280x1024 bei jeweils 8, 16 und 24 bit unterstützt. Der Tiefenbildsensor wird bei 640x480, 11 bit betrieben, was 2048 unterschiedliche Tiefenwerte ermöglicht. Diese Infarot-Kamera empfängt die Strahlen,
welche von dem Infarot-Projektor ausgestrahlt und an den Oberflächen reflektiert
werden. Gemeinsam bilden die Kameras einen VGA-Stream (640x480), welcher
neben den Farbwerten nun auch die Tiefeninformationen enthält. Dies nennt
man RGBD (D: depth). Durch die Nebeneinanderanordnung der beiden Kameras und der verschiedenen Linsenbreiten und -dicken entstehen jedoch verschiedene Bilder, welche man nicht einfach übereinanderlegen kann. Darum ist eine
Kalibrierung der Kinect nötig.
Eine genaue Spezifikation der verbauten Hardware ist im Kapitel „genaue Hardwarespezifikationen“ auf Seite 28 aufgelistet.
1.2. Scan-Tablet und Scan-Frame
Das Scan-Tablet ist eine Unterlage, mit dessen Hilfe Objekte in ausreichender Genauigkeit gescannt werden können. Dies wird durch die optimale quadratische
Marker-Anordnung in den Ecken ermöglicht. Auf der Unterseite ist ein Checkerboard angebracht, mit welchem eine einwandfreie Kalibrierung durchgeführt
werden kann. Außerdem gibt es noch eine optionale Drehunterlage. Durch Benutzung dieser verändert sich die Belichtung des Objektes während des Scannens
nicht, was ein besseres Ergebnis zur Folge hat.
Ein weiteres Hilfsmittel für den Scanvorgang ist der Scan-Frame. Bei fest installierten oder sehr schweren Objekten ist es oft nicht möglich, ein Scan-Tablet zu
nutzen. Dennoch werden die Marker für die Kamerafindung innerhalb des 3D-
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
6
1.3. Netzteil
Raumes benötigt, welche bestimmten Positionierungsvoraussetzungen unterliegen. Durch die Nutzung des Rahmens kann man diese Marker dennoch perfekt
platzieren, um sehr gute Scanergebnisse zu erzielen.
Alle Scan-Utensilien sind aus Holz gefertigt, damit beispielsweise schwere Gegenstände auf dem Tablet platziert werden können. Beim Scan-Frame sind die
Streben doppelt geschient, was eine hohe Robustheit zur Folge hat.
Abb. 3: Scan-Tablet mit Markern
Abb. 4: Scan-Frame mit Markern
1.3. Netzteil
Aufgrund der besonderen Bedürfnisse an Spannung und Strom, ist die Kinect
nicht für den Einsatz im freien geeignet. Ein selbstgebautes modifiziertes Netzteil kann dies jedoch ermöglichen, indem mit Hilfe von 10 Mignon-Akkuzellen
wird eine unterbrechungsfreie Spannungsversorgung garantiert wird. Somit ist es
möglich, Objekte auch außerhalb der Steckdosenreichweite einzuscannen.
Abb. 5: spezieller Kinect-Konnektor
Abb. 6: Adapter mit Akku-Paket
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
2. Kalibrierung
7
2. Kalibrierung
2.1. Grund der Kalibrierung
Die Microsoft Kinect arbeitet mit zwei Kameras, der Farbkamera und der Infarotkamera, um einen RGBD-Stream aufzubauen. Da die verbauten Linsen nicht
perfekt im mathematischen Sinne sind, kommt es zu Verzerrungen, welche es
auszugleichen gilt. Zudem sind die Kameras asymmetrisch zueinander angebracht, wodurch zwei verschiedene Sichtfelder entstehen.
Um eine hochwertige Punktwolke zu erzeugen, müssen beide Kamerabilder entzerrt und vereint werden. Die theoretischen Hintergründe können im Kapitel „mathematische Beschreibung der Kalibrierung“ auf Seite 30 nachgelesen werden.
2.2. praktische Realisierung
Die zur Kalibrierung notwendigen Matrixeinträge können mit Hilfe der Software
„RGBDemo“ von Nicolas Burrus ermittelt werden, welche zur Zeit in der Version
0.6 vorliegt. Dazu wird lediglich ein sogenanntes Checkerboard benötigt (siehe
Abb. 7), welches sich auf der Rückseite der Scan-Tablets befindet. Die Kalibrierungsdaten werden in <SN>.yml Dateien gespeichert, wobei <SN> für die Seriennummer der benutzten Kinect steht, damit beim Nutzen der Applikation gleich
die richtigen Daten benutzt werden können.
Das Ergebnis der genutzten Daten ist eine Übereinstimmung der Farbwerte auf
die richtigen Punkte in der Wolke (Vergleich der Abbildungen 8 und 9). Nur durch
diese Kalibrierung ist es möglich, Farbwerte korrekt auf ein Mesh zu übertragen
oder auch nur die Punktwolke an den richtigen Werten zu färben.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
8
2.2. praktische Realisierung
Abb. 7: Checkerboard beim Kalibrierungsvorgang
Abb. 8: Punktwolke, unkalibriert
Abb. 9: Punktwolke, kalibriert
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
9
3. Poisson Surface Reconstruction
3. Poisson Surface Reconstruction
Die Poisson Surface Reconstruction (kurz: PSR) stellt den Mittelpunkt der Meshgenerierung dar, da so ein „wassserdichtes“ und glattes Gitter erzeugt werden
kann. Sie wurde erstmals von Michael Kazhdan eingeführt und findet Anwendung in der Punktwolke-Software Meshlab. Mit Hilfe einer wrapper-Klasse kann
der Kazhdan-Code direkt auf die Punktwolken der gescannten Objekte angewendet werden. Genaue Beschreibungen und Vorgehensweisen sind in der Literatur
bei [Bou], [Kaza], [Kazb], [Kazc] sowie [New06] zu finden.
3.1. Funktionsweise
Für den reibungslosen Ablauf der PSR benötigt man neben der Punktwolke auch
alle Normalen an den Punkten. Unter Voraussetzung, dass diese Punkte die Fläche des Objektes begrenzen, kann eine isosurface aus dem Normalenfeld bestimmt werden. Diese isosurface steht mit dem Gradienten der Indikatorfunktion
in Relation, wodurch die begrenzte Fläche beschrieben werden kann. Dieses Problem der Lösungsfindung nennt man Poisson-Problem.
Abbildung 10 gibt dafür einen skizzenartigen Eindruck der Vorgehensweise des
PSR an einer zweidimensionalen Fläche. Zuerst wird mit Hilfe des Normalenfeldes
der Punktwolke der Gradient der Indikatorfunktion berechnet. Nun kann aus diesem Gradienten die Indikatorfunktion, welche überall innerhalb der Fläche den
Wert 1 besitzt, abgeleitet werden, welche die Fläche beschreibt. Diese Extraktion
der Fläche wird mit dem marching cubes Algorithmus realisiert, welcher mit der
octree Datenstruktur arbeitet (siehe Abbildung 11). Dieser Algorithmus zerlegt die
Punktwolke in ein Voxelgitter und entscheidet, welche Punkte die isosurface des
Objektes definieren. Die Schnittpunkte der isosurface mit den Kanten der Voxel
generieren nun eine Triangulierung, wodurch ein 3D-Gittermodell entsteht.
Abb. 10: Ablauf einer PSR
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
10
3.2. Parameter der PSR
Abb. 11: marching cubes Algorithmus
3.2. Parameter der PSR
Um die Qualität und Geschwindigkeit der PSR zu regulieren, existieren viele einstellbare Parameter:
Depth: Tiefe des octree-Baumes, welcher die Genauigkeit steuert. (default:8)
SolverDivide: Tiefe des Blockes, in welchem die Laplace-Gleichung gelöst wird.
(default:8)
IsoDivide: Tiefe des Blockes, in welchem die Triangulierung durchgeführt wird.
(default:8)
SamplesPerNode: Anzahl der Punkte in einem Endknoten des Octrees, welche
zusammenfallen. Damit wird die Anzahl der Vertices im Modell reduziert.
(unverrauschte Daten: [1.0, 5.0], verrauschte Daten: [15.0, 20.0])
Scale: Verhältnis zwischen dem Durchmesser des Würfels der für die Rekonstruktion verwendet wird und dem Durchmesser der Bounding Box des Samples.
(default: 1.25)
Offset: Werte kleiner eins ziehen die rekonstruierte Oberfläche zum Zentrum hin,
während Werte größer eins die Oberflächen nach außen drücken. (default:
1)
Confidence: bei TRUE wird die Länge der Normalen als Konfidenzinformation
genutzt während bei FALSE die Normalen normalisiert werden damit alle
die gleiche Länge für die Rekonstruktion haben.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
11
3.3. Beispiel verschiedener Parameter
Abb. 12: ursprüngliche Punktwolke
3.3. Beispiel verschiedener Parameter
Am Beispiel der Models des sogenannten „CrokToy“ (Abbildung 12) sollen nun
verschiedene Parameterwahlen vorgestellt werden.
Zuerst soll „Depth“ auf 6 erniedrigt werden, was ein Modell mit wenig Detailgrad, aber glatten Oberflächen zur Folge hat. Mit dem Wert 6 ist nach vielen Versuchen ein akzeptabler Mittelwert zwischen Rechenzeit und Detailgrad bestimmt
wurden (siehe Abbildungen 13 und 14).
Abb. 13: Depth: 8, SpN: 1, Offset: 1 – Vertices: 24899 Faces: 49794
Abb. 14: Depth: 6, SpN: 1, Offset: 1 – Vertices: 6275, Faces: 12546
Mit Hilfe des Wertes „SamplesPerNode“ kann das Modell ebenfalls sehr gut ge-
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
12
3.3. Beispiel verschiedener Parameter
glättet werden (siehe Abbildungen 15, 16, 17 und 18). Aufgrund der verrauschten Daten der Kinect, ist hier ein Wert zwischen 15 und 20 empfehlenswert.
Abb. 15: Depth: 6, SpN: 1, Offset: 1 – Vertices: 6275, Faces: 12546
Abb. 16: Depth: 6, SpN: 5, Offset: 1 – Vertices: 6322, Faces: 12640
Abb. 17: Depth: 6, SpN: 15, Offset: 1 – Vertices: 5833, Faces: 11662
Abb. 18: Depth: 6, SpN: 20, Offset: 1 – Vertices: 5258, Faces: 10512
Mit dem „Offset“-Wert können die Flächen vom Zentrum des Objektes wegbewegt oder angenähert werden (Abbildungen 19, 20 und 21). Der beste Wert
wurde hier mit 1 ermittelt.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
13
3.3. Beispiel verschiedener Parameter
Abb. 19: Depth: 6, SpN: 5, Offset: 1 – Vertices: 6322, Faces: 12640
Abb. 20: Depth: 6, SpN: 1, Offset: 1.5 – Vertices: 6268, Faces: 12532
Abb. 21: Depth: 6, SpN: 5, Offset: 0.5 – Vertices: 6684, Faces: 13341
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
4. Applikationen für Tests
14
4. Applikationen für Tests
Das System scivi besitzt neben der Anwendung Scan verschiedene Applikationen zum Testen von OpenSceneGraph (OSG), der Kinect und der Poissonrekonstruktion. Diese sind:
• PoissonBench
• testColor
• testKinect
• testOsg
• testPoisson
• test
4.1. Applikationsstarter
Im Grunde handelt es sich bei dem Framework um einen Starter für Anwendungen, welche scivi mit Hilfe der Klasse ArgumentParser als Kommandozeilenargument übergeben wird. Das Interface IApplication stellt die dafür notwendigen Funktionen für den Start und für korrekte Kommandozeilenausgaben
bereit. Gültige Anwendungen müssen daher nur das Interface implementieren
und in den Starter eingetragen werden. Bei Aufruf ohne Argument werden die
möglichen Programme vorgestellt (Kommandozeilenausgabe 1)
4.2. OpenSceneGraph Testprogramm
Das Programm testOsg (Abbildung 22) stellt einen Funktionstest für OSG und
vor allem für den in Scan verwendeten CompositeViewer mit zwei Views bereit.
Es ist damit ein Prototyp für die graphische Oberfläche der Hauptapplikation.
4.3. Kinect Testprogramm
Die Anwendung testKinect (Kommandozeilenausgabe 2) ist ein Test zum Auslesen der Seriennummer der angeschlossenen Kinect und zum Anzeigen aller
unterstützten Videoformate beider verbauten Kameras. Eine graphische Oberfläche ist zwar nicht vorhanden, aber auch nicht zwangsläufig nötig.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
4.4. Standard Testprogramm
15
Kommandozeilenausgabe 1 Start ohne spezifische Anwendung
$ ./scivi
Usage: ./scivi option [suboption] [arguments]
Options:
-PoissonBench Creating lots of example meshes with different poisson
reconstruction parameters.
-generate
Run the application for generating a model.
-ds <duplicate_space> max distance between duplicates
-nc <neighbor_count>
neighbor countfor normal calculation
-nf
flip normals after calculation
-ptd <tree_depth>
octree depth for poisson reconstruction
-psd <solver_divide>
solver divide for poisson reconstruction
-psc <sample_count>
sample_count for poisson reconstruction
-pid <iso_divide>
iso_divide for poisson reconstruction
-pcn
no confidence for poisson reconstruction
-pr <refine>
refine for poisson reconstruction
-po <offset>
offset for poisson reconstruction
-cnc <neighbor_count> neighbor count for color mapping
-cf
fast color mapping
-in <file>
input point cloud
-out <file>
output colored mesh
-scan
Run the application for scanning a marked scene.
-tablet bounding box values for scan tablet
-frame bounding box values for scan frame
-footprint save footprint to .gle-files (experimental)
-test
Run the standard test application.
-testColor
Run the mesh colorizing test application.
-testKinect
Run the Kinect test application.
-testOsg
Run the OpenSceneGraph test application.
-testPoisson
Run the Poisson-Surface-Reconstruction test application.
4.4. Standard Testprogramm
Die Anwendung test (Abbildung 23) stellt einen professionellen Viewer der Kinect dar. Auf der linken Seite kann der Kinect-Stream mit den Schaltflächen
„STILL“ und „LIVE“ gesteuert werden. Direkt darunter befindet sich der Button für
die Darstellung im Fenster („VISIBLE“ und „HIDDEN“). Mit den Kontrollschaltern,
welche sich am oberen bzw. unterem Rand befinden, kann der Neigungsmotor
direkt angesteuert werden. Auf der rechten Seite befinden sich die Buttons für die
Farbgebung der dargestellten Punktwolke. Dabei werden entweder die Farben
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
4.5. Benchmark der Poisson-Surface-Reconstruction
16
Abb. 22: Die Anwendung testOsg
aus dem RGB Bild auf das Tiefenbild gemappt oder eine Farbcodierung genutzt,
welche die Tiefenwerte darstellen (In Abb. 23 wird die Farbcodierung genutzt).
Bei dem genutzten Mapping werden natürlich, bei Vorhandensein einer passenden .yml Datei, die Daten kalibriert, was durch Anzeige einer Seriennummer am
unteren Rand verdeutlicht wird.
Zusätzlich besteht bei dieser Anwendung die Möglichkeit, den aktuellen Frame
als .ply oder .pgm zu speichern, um ihn in alternativen Anzeigeprogrammen zu
analysieren. Es gibt auch erste Versuche, ein passendes Mesh zu generieren; jedoch werden hier keine speziellen Techniken wie in anderen dafür vorgesehenen
Programmen verwendet.
Durch diesen gesamten Funktionsumfang wird ein erstes größeres Testprogramm
vorgestellt, mit welchem die Kinect sehr professionell gesteuert und ausgelesen
werden kann
4.5. Benchmark der Poisson-Surface-Reconstruction
Mit Hilfe der Anwendung PoissonBench werden zu einem Modell, welches im
Quelltext festgelegt ist, Rekonstruktionen mit vielen verschiedenen Parametereinstellungen durchgeführt. Somit dient sie zum Finden optimaler Poisson-Parameter
für bestimmte Modelle. Aufgrund der vielen Möglichkeiten und der vielen Berechnungen kann es bei diesem Aufruf zu einer längeren Rechenzeit führen.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
4.6. Poisson-Surface-Reconstruction Testprogramm
17
Kommandozeilenausgabe 2 Ausgabe der Anwendung testKinect
$ ./scivi -testKinect
######################################################################
# TU BERGAKADEMIE FREIBERG
# Scientific Visualization Workshop 2011
#
# Serial: <SN>
#
# Supported Kinect Video Modes
#
0: 1280 x 1024 @ 24 + 0 (decompressed)
#
1: 640 x 480 @ 24 + 0 (decompressed)
#
2: 1280 x 1024 @ 8 + 0 (bayer compressed)
#
3: 640 x 480 @ 8 + 0 (bayer compressed)
#
4: 1280 x 1024 @ 8 + 0 (8-bit IR)
#
5: 640 x 480 @ 8 + 0 (8-bit IR)
#
6: 1280 x 1024 @ 10 + 6 (10-bit IR)
#
7: 640 x 480 @ 10 + 6 (10-bit IR)
#
8: 1280 x 1024 @ 10 + 0 (10-bit packed IR)
#
9: 640 x 480 @ 10 + 0 (10-bit packed IR)
# 10: 640 x 480 @ 24 + 0 (YUV RGB)
# 11: 640 x 480 @ 16 + 0 (YUV RAW)
# Supported Kinect Depth Modes
#
0: 640 x 480 @ 11 + 5 (11-bit within uint16_t)
#
1: 640 x 480 @ 10 + 6 (10-bit within uint16_t)
#
2: 640 x 480 @ 11 + 0 (11-bit packed)
#
3: 640 x 480 @ 10 + 0 (10-bit packed)
#
######################################################################
4.6. Poisson-Surface-Reconstruction Testprogramm
Durch Aufruf der Anwendung testPoisson wird die Poisson-Surface-Reconstruction
(PSR) auf eine gegebene Punktwolke angewendet, um ein Modellgitter zu erhalten. Nachdem die Punktwolke geladen und in entsprechende Arrays gespeichert
wurden, wird die sogenannte Bounding Box berechnet. Ein Algorithmus, dessen
Ziel es ist, Duplikate zu entfernen, gehört zum ersten wichtigen Schritt, um ein
qualitativ hochwertiges Gittermodell zu erzeugen.
1. Der erste Originalpunkt aus dem Array wird als Referenzpunkt betrachtet
2. Nun werden alle Originalpunkte betrachtet, welche innerhalb einer festge-
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
4.6. Poisson-Surface-Reconstruction Testprogramm
18
Abb. 23: Die Standard Testanwendung
legten Umgebung des Referenzpunktes liegen (- Umgebung). Ein Mittelpunkt wird über alle Positionen der Originalpunkte aus der - Umgebung
berechnet und am Ende des Arrays gespeichert.
3. Nun werden die im letzten Schritt betrachteten Originalpunkte aus dem
Array gelöscht.
4. Der nächste Originalpunkt wird Referenzpunkt, wodurch ein iterativer Prozess entsteht, bis alle Originalpunkte aus dem Array gelöscht wurden.
Nach dieser Ausdünnung der Punktwolke werden die Normalen an jedem Punkt
mit dem Voxel-Grid Filter und dem RANSAC-Algorithmus bestimmt. Dazu wird
zuerst die Bounding Box in ein Voxelgitter zerlegt. Die resultierenden Voxel werden jetzt mit Hilfe des bekannten RANSAC-Algorithmus mit einer Normalen einer
Ebene versehen:
1. es werden zufällig drei Punkte aus dem Voxel herausgegriffen mit denen
eine Ebene aufgespannt wird
2. Innerhalb des Voxels werden nun alle Punkte bestimmt, die innerhalb einer
Fehlerschranke um die Ebene positioniert sind. Diese bilden das Consensus
set, woraus sich eine Fehlersumme berechnen lässt.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
4.7. Mesh-Färbung Testprogramm
19
3. Evaluiere das Ergebnis und übernehme es, falls:
• Das Consensus set enthält mehr Punkte als ein Vorhergehendes
• Das Consensus set enthält genauso viele Punkte wie ein Vorhergehendes, aber die Fehlersumme ist geringer
Der Algorithmus wird so lange wiederholt, bis entweder ein Modell mit der
Fehlersumme 0 gefunden wird, oder eine Iterationsschranke erreicht ist.
Nach der Bestimmung der Normalen in jedem Punkt ist es nun möglich, mit den
vorgegebenen Parametern eine PSR durchzuführen. Das resultierende Mesh wird
im Anschluss im Format .osg gespeichert.
4.7. Mesh-Färbung Testprogramm
Mit Hilfe der Anwendung testColor ist es möglich, Farben aus der aufgenommenen Punktwolke auf das generierte Gitter zu projizieren. Dazu ruft man das
Programm mit den Argumenten
• Pfad zur Punktwolke
• Pfad zum zugehörigem Mesh
• Pfad zur Ausgabedatei des eingefärbten Mesh
auf.Der erste Schritt ist das Speichern der Punktpositionen und Farbwerte aus den
Dateien in Arrays. Mit Hilfe des folgenden Algorithmus ist es dann möglich, die
Farbwerte auf die richtigen Punkte im Mesh zu mappen:
1. Der erste Punkt aus dem Array der Meshpunkte wird als Referenzpunkt betrachtet.
2. Für diesen Referenzpunkt sucht man nun aus der gefärbten Punktwolke den
Punkt mit dem geringsten Abstand.
3. Die Farbinformationen des Punktes mit dem geringsten Abstand wird nun
auf den Referenzpunkt übertragen.
4. Der Algorithmus wählt nun den nächsten Punkt aus dem Array der Meshpunkte als Referenzpunkt und fährt iterativ so lange fort, bis das gesamte
Mesh eingefärbt ist.
Das resultierende gefärbte Mesh wird nun im .osg gespeichert.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
5. Scannen einer markierten Szene
20
5. Scannen einer markierten Szene
Die Applikation scan stellt als Anwendung das Herzstück des Projektes „3D Scan
2.0“ dar. Mit Hilfe dieser Anwendung ist es möglich, Objekte innerhalb einer
festgelegten Umgebung dreidimensional einzuscannen.
5.1. Parameter
Es gibt zwei verschiedene Arten, einen Bereich einzugrenzen, innerhalb dessen
gescannt wird:
• ./scivi -scan -tablet Nutzung des Scan-Tablet als markierten Bereich
• ./scivi -scan -frame Nutzung des Scan-Frame als markierten Bereich
Zusätzlich steht die Option -footprint zur Verfügung, welche eine noch experimentelle Anwendung zur Ermittlung des Grundrisses darstellt.
5.2. Benutzung und Ansicht
Bei Start der Applikation erkennt man sogleich eine zweigeteilte Ansicht (Abbildung 24):
• Links: Dieser View zeigt eine Kameraansicht der Kinect. Hier werden auf
den erkannten Markern rote Kugeln angezeigt.
• Rechts: Hier wird die entwickelte Punktwolke angezeigt. Man kann die Ansicht hier beliebig rotieren und transformieren. Falls drei Marker erfolgreich
erkannt wurden, wird hier auch der aktuelle Ausschnitt der Boundingbox
live angezeigt.
Nachdem das Objekt innerhalb der Marker platziert wurde, beginnt man, mit
der Kinect das 3D Modell zu fokussieren und, falls 3 Marker gefunden wurden,
den aktuellen Ausschnitt der Kamera zur Punktwolke hinzuzufügen. Danach wiederholt man den Vorgang von einer anderen Position aus. Verschiedene Tests mit
verschiedenen Objekten ergaben, dass eine sinnvolle Mesh-Rekonstruktion keinesfalls viele Scans benötigt. Es ist eher so, dass schon 4 Aufnahmen reichen.
Nachdem man mit dem Ergebnis in der rechten Anzeige zufrieden ist, kann man
die aktuelle Punktwolke als .ply-Datei speichern. Sie ist dann unter ./Data/PointClouds/New/
zu finden.
Folgende Eingaben sind während des Scannens zulässig:
• ’c’ speichert den aktuellen Ausschnitt der Kinect in die Punktwolke, falls 3
Marker erkannt sind.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
5.3. genauer Programmablauf
21
Abb. 24: Die Scan-Anwendung mit der zweigeteilten Ansicht
• ’entf’ löscht die Punktwolke
• ’p’ speichert die aktuelle Punktwolke als .ply-Datei unter ./Data/PointClouds/New/.
5.3. genauer Programmablauf
5.3.1. Scanablauf
Nach dem Start der Anwendung werden die 3D-Punkte wie schon bei der Testapplikation kalibriert (siehe Kapietel B) und Dargestellt. Die Zuordnung der 3DPunkte auf 2D-Koordinaten werden dabei zwischengespeichert (in der sogenannten Zuordnungsliste).
Nach diesem Schritt folgt die Erkennung der Marker mit Hilfe des ARToolKit im
RGB-Bild. Mit Hilfe der Zuordnungsliste existiert die Möglichkeit, die Punkte in
den 3D-Raum zu interpolieren 1 .Falls drei Marker von der Anwendung korrekt
erkannt wurden, ist das Aufnehmen einer Szene möglich.
Die beiden Fenster werden nach der Entscheidung aktualisiert, indem der osgViewer
der Kameraansicht (WorldView) die Listen übergeben bekommt und die rechte
Ansicht (ModelView) alle bisher aufgenommenen Punkte anzeigt. Falls das Aufnehmen einer Szene möglich wäre, wird zusätzlich die aktuelle Punktwolke dargestellt.
1
In der Zuordnungsliste werden alle Nachbarpunkte mit dem Abstand kleiner eins gesucht und
mit einem Gewicht gespeichert. So können die 3D-Punkte der Marker durch gewichtete Interpolation bestimmt werden.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
5.3. genauer Programmablauf
22
Ein korrekte Ausrichtung der Punkte im ModelView bei mindestens 3 Markern ist
möglich, indem sie in das Objektkoordinatensystem transformiert werden. Durch
Mittlung der diagonalen Strecke zweier Marker wird der Ursprung des Koordinatensystems ermittelt. Nun werden aus den Markerpositionen die aufspannenden Vektoren für das Koordinatensystem berechnet2 . Aufgrund einer eindeutigen
Identifizierung der Marker ist es möglich, das Koordinatensystem auch eindeutig
auszurichten.
Alle rekonstruierten Punkte werden nun mit Hilfe einer Verschiebung mit anschließender senkrechter Projektion in das Objektkoordinatensystem transformiert. Nach einem kurzen Test, ob der Punkt in der Bounding-Box liegt, wird der
Punkt je nach Einstellung der Speicherung entweder in die Liste der permanenten
Punkte aufgenommen oder in das Live-Bild integriert. Nach diesem Schritt wird
das ModellView aktualisiert, um so den aktuellen Stand der Punktwolke darzustellen.
Falls die Taste ’p’ gedrückt und somit das speichern aktiviert wurde, kopiert das
Programm den aktuellen Stand der permanenten Punktwolke in eine .ply Datei
unter ./Data/PointClouds/New/. Diese kann dann mit externer Software (z.B.
Meshlab) oder anderen Applikationen (z.B. generate) betrachtet und bearbeitet
werden.
5.3.2. Die Option footprint
Um einen Grundriss zu erzeugen, sind mehrere aufeinanderfolgende Schritte
nötig. Zuerst wird mit einem Schwellwert von 0.002 (2mm) jeder Punkt nahe der
Bodenfläche auf eine 2D-Ebene projiziert. Nachdem Punkte mit sehr geringem
Abstand zusammengefasst wurden, wird eine Distanzmatrix aufgestellt, welche
man für die Implementierung von α-Shapes benötigt. Dabei werden immer zwei
Punkte betrachtet, deren Abstand kleiner ist, als ein festgelegter Wert (α-Wert).
Im Anschluss wird durch beide Punkte ein Kreis mit dem Radius α2 gelegt, welcher mit Hilfe der Strecke zwischen beiden Punkten zweigeteilt wird. Falls nun im
größeren Kreisabschnitt keine weiteren Punkte zu finden sind, handelt es sich um
eine Außenkante.
Die gefunden Kanten werden jetzt in Cluster sortiert, indem rekursiv nach zusammenhängenden Kanten gesucht wird. Diese Zuordnung zu einem Cluster wird mit
Hilfe einer Clusternummer in der Kanten-Datenstruktur angegeben. Alle Punkte,
welche zu einem Cluster gehören, werden jetzt in Felder gespeichert.
Der nächste Schritt ist es, die konvexe Hülle eines jeden Clusters zu bestimmen.
Der dafür verwendete Algorithmus entspricht dem der α-shapes, nur dass in
2
Zuerst werden mit den gegebenen Vektoren die Grundfläche berechnet und danach über das
Kreuzprodukt ein dazu senkrechter Vektor.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
5.3. genauer Programmablauf
23
diesem Fall α als unendlich angenommen wird3 . Dadurch können nur konvexe
Fußabdrücke realisiert werden.
Durch die Umwandlung der konvexen Hülle in die konkave Hülle können jedoch
auch nichtkonvexe Fußabdrücke erkannt werden. Dabei wird eine Kante durch
zwei neue zu ersetzten, indem naheliegende, innere Punkte verwendet werden.
Im Falle der Option footprint werden beim Drücken der Taste ’p’ die Dateien
• alpha_shape.gle zeigt α-Shape des Grundrisses
• convex_hull.gle zeigt konvexe Hülle des Grundrisses
• concave_hull.gle zeigt konkave Hülle des Grundrisses
im Verzeichnis ./Data/Footprints/ gespeichert, welche mit Hilfe der „Graphics
Layout Engine“ übersetzt und betrachtet werden können.
3
Das heißt, man sucht Geraden zwischen zwei Punkten, wobei alle restlichen Punkte auf der
selben Seite der Gerade befinden sollen.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
6. Generierung eines Modells
24
6. Generierung eines Modells
Die Anwendung generate stellt ein automatisiertes System dar, um aus Punktwolken, welche über den Scanprozess entstanden sind, farbige Gittermodelle im
.osg-Format zu erstellen. Der Programmablauf kann dabei in vier wesentliche
Schritte zusammengefasst werden:
1. Entfernung von Duplikaten
2. Berechnung der Normalen
3. Poisson Surface Reconstruction
4. Colorierung des Gittermodells
Mit Hilfe des Algorithmus, welcher schon in der testPoisson vorgestellt wurde,
werden innerhalb dieser Applikation zuerst Duplikate von Punkten gefunden und
dann entfernt. Die benutzte -Umgebung arbeitet dabei mit dem Standartwert
von 2mm beziehungsweise mit einem Wert, welcher über die Kommandozeile
als Argument geliefert wird.
Bei dem nun folgenden Schritt der Normalenberechnung bedient man sich der
Visual and Computer Graphics Library (VCG Library). Diese ist eine Open Source Bibliothek, welche aus einer Zusammenarbeit zwischen dem Visual Computing Lab der ISTI und dem Italian National Research Council (CNR) enstanden
ist. Sie basiert auf C++ Templates und bietet Algorithmen für das Verarbeiten
von Dreiecks- bzw. Vierecksmeshes. Unter Anderem bietet diese Bibliothek einen
Algorithmus zur Berechnung von Normalen, welcher in diesem Schritt seine Verwendung findet. Er nutzt dabei eine vorzugebende Anzahl von Nachbarn (Standard: 10 Nachbarn) und liefert als Ergebnis ein Array mit geglätteten Normalen.
Der wesentliche Vorteil dieser Verbesserung besteht darin, dass die Normalen
keine Ausreißer enthalten und somit das Gittermodell wesentlich „runder“ wirkt.
Der dritte Schritt, in welchem die Poisson Surface Reconstruction genutzt wird,
um ein Mesh zu erzeugen, wurde in seiner Funktionsweise aus Kapitel 3 übernommen. Alle Werte für die Rekonstruktion können über ein Kommandozeilenargument oder aber auch aus den Standartwerten übernommen werden. Somit
können die Gittermodelle gezielt auf die gegebene Punktwolke abgestimmt werden.
Für die Colorierung des Meshes steht neben dem bekannten Algorithmus aus der
Testanwendung testColor, welcher mit der Option -cf genutzt wird, ein weiterer
effektiver Algorithmus zur Verfügung. Hierbei erreicht man eine höhere Qualität,
indem der Farbwert aus einer Anzahl von Nachbarpunkten berechnet wird (Option -cnc mit dem Standard 10). Somit können gezielt weichere Farbübergänge
erzeugt werden.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
6. Generierung eines Modells
25
In den Kommandozeilenausgaben 3 und 4 kann man die Funktionsweise aller
Schritte sehr leicht am Beispiel der Punktwolke
Data/PointClouds/FrogToy_2011_07_02_15_11_07_bin.ply
nachvollziehen. Das fertige colorierte Modell ist in Abbildung 25 zu sehen.
Abb. 25: Die automatisierte Meshgenerierung
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
6. Generierung eines Modells
26
Kommandozeilenausgabe 3 Meshgenerierung Teil 1
################################################################
# TU BERGAKADEMIE FREIBERG
# Scientific Visualization Workshop 2011
#
# Loading input point cloud:
# Successfully loaded data from file "Data/PointClouds/Frog[...]
# Done.
# Removing duplicated vertices:
# Remaining vertex count: 196000
[...]
# Remaining vertex count: 3000
# Remaining vertex count: 0
# Duplicate count: 144417
# Vertex count: 51886
# Done.
# Calculating normals for point cloud:
# Done.
# Generating mesh from point cloud:
# Set output filename to tmp
################################################################
# Starting Poisson Surface Reconstruction using Kazhdan’s Code
# Saving to file tmp
# Parameter Depth: 8
# Parameter SolverDivide: 6
# Parameter SamplesPerNode: 1
# Parameter IsoDivide: 8
# Parameter Refine: 3
# Parameter Scale: 1.25
# Parameter KernelDepth: -1
# Paremeter Offset: 1
# Parameter NoResetSamples: 0
# Parameter NoClipTree: 0
# Parameter Confidence: 1
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
27
6. Generierung eines Modells
Kommandozeilenausgabe 4 Meshgenerierung Teil 2
Samples: 51886
Setting sample weights
Adding Points and Normals
# Leaves/Nodes: 326775/373457
# Leaves/Nodes: 326915/373617
Depth: 1/8
Matrix entries: 36 / 8^2 = 56.2500%
Got / Solved / Updated in: 0.000 / 0.000 /
[...]
Nodes[59/64]: 2192
Matrix entries: 90895 / 2192^2 = 1.8917%
Got / Solved / Updated in: 0.000 / 0.000 /
# IsoValue is -1651.069512
# IsoValue is -1651.069458
0.000
0.000
# Poisson Reconstruction done.
# Saved to tmp
# Done.
# Loading generated mesh:
# Successfully loaded data from file "tmp.ply"
# Done.
# Mapping color information:
# Remaining vertex count: 52000
[...]
# Remaining vertex count: 1000
# Done.
Manipulator warning: eventTimeDelta = -4.5e-05
Manipulator warning: eventTimeDelta = -0.000226
#
################################################################
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
A. genaue Hardwarespezifikationen
A. genaue Hardwarespezifikationen
Abb. 26: vollständige Hardware der Kinect
• elektrischer Motor
• 3 Mainboard Platinen
• Arbeitsspeicher: Hynix 512Mb DDR2 SDRAM
• Aktivkühler
• Farbkamera
• Infarotkamera
• Infarotprojektor
• 4 Mikrofone
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
28
A. genaue Hardwarespezifikationen
• 4 Arten von Schrauben
• 15 spezielle Chips, darunter:
Wolfson Stereo ADC with microphone preamp
Fairchild N-Channel PowerTrench MOSFET
NEC USB 2.0 hub controller
Camera interface controller
Marvell SoC camera interface controller
Analog Devices CMOS Rail-to-Rail Output Operational Amplifier
TI 8-bit, 8-channel Sampling A/D converter
Allegro low voltage stepper and single/dual motor driver
ST 8Mbit NV flash memory
PrimeSense image sensor processor
Texas Instruments USB audio controller
Kionix accelerometer
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
29
B. mathematische Beschreibung der Kalibrierung
30
B. mathematische Beschreibung der Kalibrierung
B.1. Das Lochkameramodell
Das Lochkamera-Model beschreibt die mathematischen Zusammenhänge zwischen einer 3D-Szene und der 2D-Repräsentation eines aufgenommenen Bildes.
Da die Kalibrierung auf eine Transformation zwischen den beiden Räumen reduziert wird, steht die Bestimmung der inneren und äußeren Kameraparameter im
Mittelpunkt.
Abb. 27: Lochkamera, vereinfacht
B.2. Geometrie des Modells
Die Lochkamera obliegt einer sehr bestimmten Geometrie, dargestellt in Abb. 28.
Die Blende der Kamera ist dabei ein Punkt im Ursprung O des dreidimensionalen orthogonalen Koordinatensystems. Die optische Achse wird mit X3 bezeichnet
und die 2D Projektionsfläche (Bildfläche) ist eine Ebene, parallel zur X1 X2 -Ebene.
Ihr Mittelpunkt O wird mit dem Abstand f in negativer Richtung der X3 -Achse auf
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
31
B.2. Geometrie des Modells
Abb. 28: Lochkamera, Geometrie
die Bildfläche verschoben, wo er das Bildzentrum R bildet. Ein Punkt P der 3DSzene wird dabei durch eine Gerade P O auf den Punkt Q abgebildet. Das resultierende Bild ist dabei einer Punktspiegelung unterzogen worden. Als Ausweg
wird eine Anschauung einer virtuellen Bildfläche Q0 , aufgespannt durch Y1 und
Y2 , betrachtet, in welcher die Bildkoordinaten richtig orientiert vorliegen (Siehe
Abb. 29).
Man kann den Strahlenverlauf auf zwei Dimensionen projizieren, in denen durch
die optischen Strahlen ähnliche Dreiecke aufgebaut werden. Aus dieser Ähnlichkeit folgert
f x1
y1
, f > 0, x3 > 0
(1)
=
y2
x3 x 2
Unter Verwendung homogener Koordinaten ist es möglich, die Gleichung mit
Hilfe der Kameramatrix C auszudrücken:
y ∼ Cx
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
(2)
B.3. Mapping zwischen Farb- und Tiefenwerten
32
Abb. 29: Lochkamera, Geometrie
mit
y = (y1 , y2 , 1)T
x = (x1 , x2 , x3 , 1)T


fx1 0 cx1 0
C =  0 fx2 cx2 0
0
0
1 0
Um eine
auszudrücken, nutzt man nun eine Transformations Kamerabewegung
matrix R t , welche Translationen und Rotationen in sich vereint. Zusätzlich
muss die Isometrie durch Multiplikation eines Skalierungsfaktors s ungleich null
zur Gleichheit geführt werden, was zur endgültigen Beschreibung unseres Modells führt.
 
  
 

x
y1
fx1 0 cx1 0
r11 r12 r13 t1  1 
x2 
s · y2  =  0 fx2 cx2 0 · r21 r22 r23 t2  · 
(3)
 x3 
1
0
0
1 0
r31 r32 r33 t3
1
Mithilfe der Daten über die Transformationsmatrix (äußere Merkmale) sowie den
Daten über die Kameramatrix (innere Merkmale) kann das Modell szenenunabhängig angewendet werden. Diese Daten werden mit Hilfe der vorgestellten
Software „RGBDemo“ ermittelt.
B.3. Mapping zwischen Farb- und Tiefenwerten
Um die Farbwerte korrekt auf die Tiefenwerte abzubilden, wird die reale Entfernung zur Kinect benötigt. Die Infarotkamera besitzt jedoch nicht die Fähigkeit,
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
B.4. Grenzen und Probleme des Modells
33
echte Distanzen (distance) zu ermitteln, sondern kann nur einen umskalierten
Wert abgeben. Experimentelle Ausarbeitungen ergaben jedoch eine Möglichkeit,
diese Werte (disparity) zurückskalieren zu können.
distance = 1.0/(−0.00307110156374373 ∗ disparity + 3.33094951605675)
(4)
Folgender Algorithmus wird verwendet, um ein erfolgreiches Abbilden der unterschiedlichen Aufnahmen der Kameras auf einen gemeinsamen Raum zu realisieren:
1. rechne alle disparity-Werte in echte distance-Werte um
2. projiziere alle Punkte des 2D-Tiefenbildes in den 3D-Raum, indem die distanceWerte als Skalierungsfaktor s benutzt werden.
−1
xdepth = Cdepth
∗ (s ∗ ydepth )
(5)
3. transformiere die 3D-Szene der Tiefenwerte auf die 3D-Szene der RGBWerte und projiziere das Ergebnis wieder in ein 2D-Bild, indem man wieder
die distance-Werte als Skalierungsfaktor s benutzt.
Crgb ∗ ( R t DepthT oRgb ∗ xdepth )
(6)
yrgb =
s
Das Ergebnis ist ein Bild, in dem die Farbwerte und die Tiefenwerte der originalen Szene korrekt aufeinander gemappt sind und immer so genau sind, wie die
Kalibrierung dies ermöglicht.
B.4. Grenzen und Probleme des Modells
Da die Tiefenbildkamera und die Farbkamera bei gleicher Auflösung verschiedene Sichtbereiche der selben 3D-Szene haben, können einige Punkte am Rand
der Bilder nicht aufeinander abgebildet werden. Dadurch hat die resultierende
Punktwolke eine geringere Auflösung als die ursprünglichen Bilder.
Eine weitere Schwäche des Modells ist die Annahme eines Loches als Blende.
Echte Linsen haben jedoch eine Verzerrung, was zur einer Störung im Bild führt,
welche durch die Kameramatrix nicht ausgeglichen wird. Gerade bei dieser Modellschwäche können noch entscheidende Verbesserungen durchgeführt werden.
Diese erhöhen jedoch den Rechenaufwand und könnten zur Verschlechterung der
Performanz führen.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
34
Literatur
Literatur
[Kin]
Inside The Kinect Hardware. 5. Aug. 2011. URL: http : / / www .
trueachievements.com/n2124/inside-the-kinect-hardware.htm.
[Wika]
Kinect. 5. Aug. 2011.
URL :
http://de.wikipedia.org/wiki/Kinect.
[Wikb]
Kinect. 5. Aug. 2011.
URL :
http://en.wikipedia.org/wiki/Kinect.
[Bur]
Kinect Calibration. 10. Sep. 2011. URL: http://nicolas.burrus.
name/index.php/Research/KinectCalibration.
[New06] Newman, T.S. „A survey of the marching cubes algorithm“. In: Computer Graphics 30 (2006). URL: http://www.proxyarch.com/util/
techpapers/papers/survey%20of%20marching%20cubes.pdf.
[Pin]
Pinhole camera model. 10. Sep. 2011.
org/wiki/Pinhole_camera_model.
[Kaza]
Poisson Surface Reconstruction. 8. Juli 2011.
jhu.edu/~misha/MyPapers/SGP06.pdf.
[Kazb]
Poisson Surface Reconstruction Quelltext. 8. Juli 2011.
www.cs.jhu.edu/~misha/Code/PoissonRecon/.
[Bou]
Polygonising a scalar field. 14. Juli 2011.
net/geometry/polygonise/.
[Kazc]
Unconstrained Isosurface Extraction on Arbitrary Octrees. 8. Juli 2011.
URL : http://www.cs.jhu.edu/~misha/MyPapers/SGP07a.pdf.
Reinhardt/Dach/Backasch/Schlegel/Schröder: 3D-Scan 2.0
URL :
http://en.wikipedia.
URL :
URL :
http://www.cs.
URL :
http://
http://paulbourke.