Rekonstruktion
Die Szenenrekonstruktion geht gegenüber der Kamerarekonstruktion (die ja nur einige 3D-Punkte, die sog. "Features" erzeugt), einen Schritt weiter: sie versucht, das Video mittels einer 3D-Punktewolke bzw. eines Meshes zu rekonstruieren. Außerdem werden die Punkte oder das Mesh mittels Vertex-Farben entsprechend des Footage eingefärbt.
Das Resultat einer solchen Szenenrekonstruktion kann unter idealen Bedingungen (s. u. "Optimales Footage") eine dichte Punktewolke bzw. ein zusammenhängendes Mesh bilden (die Realität sieht allerdings oft anders aus, da meist kein ideales Footage vorliegt; Sie erhalten dann zerlöcherte und isolierte Punktewolken bzw. Meshes).
Die Szenenrekonstruktion ersetzt keinen 3D-Scanner! Die erzeugten Punktewolken oder Meshes können z.B. zur Orientierung im 3D-Raum dienen, zum Nachbauen von Objekten u.ä.
Voraussetzungen für eine Szenenrekonstruktion
Damit Sie eine erfolgreiche Szenenrekonstruktion vornehmen können, muss stets eine erfolgreiche Kamerarekonstruktion stattgefunden haben, d.h. es wurde ein 2D-Tracking vorgenommen, danach die Kamera rekonstruiert und das ganze durch einen Klick auf 3D-Rekonstruktion im Tab "3D-Berechnung" abgeschlossen (oder alles automatisch mittels des Befehls Volle Rekonstruktion (Hauptmenü: Tracker) angestoßen). Die Kamera und Features mittels der Constraint-Tags zu kalibrieren, kann ebenfalls nicht schaden, denn dann ist die später rekonstruierte Szene bzw. Punktewolke korrekt in Größe und Ausrichtung.
Wann ist eine Kamerarekonstruktion erfolgreich? Nun, wenn das eben beschriebene abgeschlossen ist und sich als Unterobjekte des Motion Tracker Objekts eine Anzahl Auto- bzw. Benutzer-Features befinden. Die Features sind wichtig, da sie später bei der Szenenrekonstruktion als Startpunkte verwendet werden.
Die vorhandenen 2D-Tracks spielen bei der Szenenrekonstruktion dann übrigens keine Rolle mehr.
Optimales Footage
Das optimale Footage, mit dem die Szenenrekonstruktion am besten arbeitet, weist folgende Eigenschaften auf:
- hohe fotografische Schärfe, also möglichst keine Tiefenschärfe oder Bewegungsunschärfe.
- die Bilder sind detailreich und weisen möglichst keine gleichmäßigen, einfarbigen Flächen auf.
- die fortlaufenden Bilder bilden kontinuierlich, ohne große Sprünge, möglichst viele Seiten eines Objekts ab.
- es sollte ausreichend Parallaxe vorhanden sein, was z.B. bei Aufnahmen mit starken Zoom-Objektiven nicht der Fall ist. Aus gleichem Grunde ist Footage, was nur aus einem Kameraschwenk besteht, nicht geeignet.
- spiegelnde Materialien wie Glas, Chrom oder wandernde Glanzlichter im Footage sollten möglichst vermieden werden.
- wenn Sie in der freien Natur selbst Footage erstellen wollen, hilft es, bei bedecktem Himmel zu filmen, sodass ein gleichmäßiges, diffuses Licht herrscht.
Wissenswertes
- Unabhängig davon, was Sie im Tab "Footage" unter Resample angegeben haben, die Szenenrekonstruktion zieht immer die volle Videoauflösung heran (sofern Sie nichts anderes definieren).
- Tracks dienen als Startpunkte, um von dort aus benachbarte Regionen zu rekonstruieren.
- Es ist eine gleichmäßige, ausreichende Trackdichte anzustreben. Je mehr Tracks vorhanden sind, desto mehr Startpunkte sind möglich und desto größer die Wahrscheinlichkeit, möglichst viele Bereiche rekonstruieren zu können. Ausnahmen bestätigen die Regel: bei relativ großen, kontinuierlichen Oberflächen kann ein einziges Feature dort ausreichen, diese Oberfläche zu rekonstruieren.
- Große, gleichfarbige Bereiche (z.B. Himmel) können von verschiedenen Kamerapositionen aus nicht identifiziert werden und bleiben somit unrekonstruiert.
Limitationen
- mit hohen Einstellungen und/oder hoher Footage-Auflösungen kann sich ein hoher Speicherbedarf ergeben. Bei Tests des Autors wurden weit über 10GB erreicht.
- je nach Einstellungen können sich lange Rechenzeiten von mehreren bis vielen Minuten ergeben.
- Voraussetzung für eine Szenenrekonstruktion ist eine möglichst gute Kamerarekonstruktion. Ist das Video in seiner Beschaffenheit nicht ausreichend, eine möglichst korrekte Kamerarekonstruktion zu berechnen, kann die Szenenrekonstruktion, die darauf aufbaut, auch nicht besonders gut gelingen.
- Bereiche, die von der Kamera nicht gesehen werden, können logischerweise nicht akkurat rekonstruiert werden. Gleiches gilt für Regionen, in denen keine oder zu wenig 3D-Features errechnet wurden.
Funktionsweise
Der zugrunde liegende Algorithmus ist kompliziert und soll hier nur in Kürze wieder gegeben werden (da die Parameterbenamung ansonsten unverständlich bleibt, wenn dort z.B. von Patches und Zellen die Rede ist). Sinnvollerweise gibt es den Parameter Qualität, der Ihnen die Einstellungen nach einigen Qualitätskriterien vornimmt.
Was passiert also generell, wenn Sie eine Szenenrekonstruktion vornehmen?
-
aus der Vielzahl an Bildern werden automatisch eine Anzahl (Minimum jedes 10., bei schnellen Kamerabewegungen mehr) ausgewählt.
-
für jedes dieser Bilder gibt es eine Kameraposition (ermittelt aus der zuvor erfolgten 3D-Kamerarekonstruktion).
-
jedes dieser Bilder wird in ein Gitter quadratischer Bereiche, den sog. "Zellen", aufgeteilt.
-
ein 3D-Punkt in der Szene, der von verschiedenen Kamerapositionen aus sichtbar ist, hat in jedem zugehörige Bild eine 2D-Position. Diese wiederum liegt in genau einer Zelle.
-
die vorherige 3D-Kamerarekonstruktion hat bereits eine Anzahl 3D-Punkte (nämlich die 3D-Features) erzeugt. Diese werden verwendet, um Start-Patches zu kreieren. Patches sind ausgerichtete Punkte im Raum, aus denen später die Punktewolke besteht. Jeder Patch repräsentiert einen kleinen, flächigen Oberflächenbereich.
-
für jedes der ausgewählten Bilder wird festgehalten, welcher Patch mit welcher Zelle korrespondiert.
-
es erfolgt jetzt eine iterativer Expansionsprozess, in der von den vorhandenen Patches ausgehend weitere Patches erzeugt werden (diese liegen auf der zu rekonstruierenden 3D-Oberfläche).
-
Neue Patches werden den Zellen zugeordnet, sodass sich das Zellengitter langsam füllt. Das Ziel ist, in jeder Zelle einen Patch zu platzieren (was allerdings selten gelingt).
-
Die Expansion neuer Patches wird in Richtung bisher leerer Zellen vorangetrieben.
- Der Expansionsprozess hält solange an, bis keine weiteren, neuen Patches erstellt werden können, die die diversen, internen Filterbedingungen erfüllen (jeder erzeugte Patch durchläuft eine Reihe von Testbedingungen; bei Nichterfüllung wird der Patch verworfen) oder die Zellen aller Bilder mindestens einen zugeordneten Patch aufweisen.
Zusammengefasst nimmt der Algorithmus also eine vorhandene Anzahl 3D-Punkte (beim ersten Expansionsvorgang die Features der Kamera-Rekonstruktion, in den weiteren Expansionsvorgängen die Patches des vorangegangenen Durchganges) als Startposition und expandiert auf der 3D-Oberfläche nach außen. Wie gut das funktioniert, ist Footage- bzw. Szenenabhängig (wie die Kamerarekonstruktion auch).
Die Patches werden dann schlußendlich einem Polygonobjekt namens "Szenenpunktewolke" zugewiesen. Jeder Punkt hat dabei eine aus dem Footage ermittelte Farbe, die dem Polygonobjekt in Form eines Vertex-Farben-Tags anhängt. Auf Wunsch kann danach noch ein "Meshing" vorgenommen werden, das eine Polygonoberfläche aus den rekonstruierten Punkten erzeugt.
Sie finden hier verschiedene Presets, die Ihnen die weiter unten angeordneten Parameter nach den hier gelisteten Qualitätsstufen einstellt. Sollten Sie mit diesen Presets zu keinen brauchbaren Ergebnissen kommen, so können Sie mit ziemlicher Sicherheit davon ausgehen, dass das Footage nicht optimal ist (s.a. Optimales Footage).
Wenn Sie kurz einen Blick auf die Reihenfolge der Funktionsweise der internen Vorgänge werfen, sehen Sie, dass eine Reihe von iterativen Aufgaben abgearbeitet wird. Das sind hauptsächlich das Erzeugen neuer Patches in bisher leeren Bereichen, optimieren und das Ausfiltern "schlechter" Patches. Und das ganze wieder von vorne. Wie oft nun diese Iterationen vorgenommen werden sollen, definiert dieser Parameter.
Die praktischen Auswirkungen: je höher der Wert, desto weniger "Löcher" zeigt die Punktewolke, desto länger ist aber auch die Rechenzeit.
Es gibt für die 3D-Kamerarekonstruktion (Resample) und die Szenenrekonstruktion 2 voneinander unabhängige Einstellungen, mit welcher Auflösung das Footage bei den Rekonstruktionen Eingang finden soll. Die Footageauflösungsstufe ist diejenige für die Szenenrekonstruktion.
Soll das Footage für die Szenenrekonstruktion intern mit einer kleineren Auflösung verarbeitet werden, so erhöhen Sie hier den Wert. 0 entspricht der Originalauflösung (s.a. nächsten Absatz), 1 der halben Auflösung (in beide Dimensionen, also wird ein quadratischer Pixelbereich von 4 Pixel zusammengefasst) usw. Die Szenenrekonstruktion rechnet mit zunehmender Auflösung schneller, allerdings sinkt dabei die Punktewolkendichte.
Diese Einstellung können Sie verwenden (also Werte höher 1 einstellen), wenn Sie Footage sehr hoher Auflösung geladen haben. Sie können damit die Rechenzeiten etwas bändigen.
Beachten Sie, dass 0 für die Originalauflösung nicht zwangsweise bessere Ergebnisse als 1 erzielt. Intern werden je nach Enfernung Kamera zu Patch abweichende Auflösungen verwendet. Die einzustellende Auflösung gilt dabei nur für eine explizite Kamera-Patch-Distanz (die durch die sog. "Referenz-Kamera" festgelegt wird). Bei all diesen Distanzen wird die eingestellte Auflösung verwendet. Variieren die Distanzen zwischen Kameras und Patch stark, werden automatisch sowohl kleinere als auch größere Auflösungen herangezogen. Steht der Wert allerdings auf 0, können keine höheren Auflösungen mehr herangezogen werden.
Durch diesen Mechanismus lassen sich Patches aus verschiedenen Entfernungen leichter vergleichen.
Wie unter Funktionsweise schon erwähnt, wird jedes Bild des Footage in ein Gitterraster aufgeteilt. Der Algorithmus setzt sich als Ziel, in jeder Zelle des Rasters einen 3D-Punkt der Punktewolke zu errechnen. Im Idealfall (optimales Footage) kann das auch klappen (in den allermeisten Fällen werden jedoch Lücken und Löcher verbleiben).
Wie auch immer, die Punktdichte legt die Größe der einzelnen Zellen dieses Rasters fest.
Je größer Sie diesen Wert setzen, desto kleiner und somit dichter werden die Zellen und damit auch die Dichte der Punktewolke sein. Beim maximal möglichen Wert von 8 entspricht die Zellgröße der Pixelgröße, womit im Idealfall auf jedem Pixel des Footage ein Punkt der Punktewolke zu liegen kommt. Natürlich steigen die Rechenzeiten mit wachsender Punktdichte stark an.
Der Algorithmus versucht, kleine Stückchen im Footage zu verschiedenen Zeiten wieder zu erkennen und daraus dann die Position und Ausrichtung der Patches zu bestimmen und zu optimieren. Die Patchgröße gibt die rechteckige Größe dieser Stückchen in Pixel an. Im Prinzip entspricht dieser Wert der bekannten Mustergröße beim 2D Tracking, nur eben für die Szenenrekonstruktion:
Es sei noch einmal wiederholt: jeder Patch wird später durch einen 3D-Punkt einer Punktewolke repräsentiert.
Mit höheren Werten erreichen Sie eine bessere Qualität der Punktewolke, wobei sich die Rechenzeit erhöht. Beachten Sie in obiger Abbildung, wie sich z.B. die Verzerrung der Fenstereinfassung und -sprossen mit zunehmender Patchgrösse bessert.
Diese Einstellung regelt einen Schwellwert, der die Pixelvariation eines Patches in Augenschein nimmt. Ändert sich in diesem Patch kaum etwas innerhalb seiner Fläche, ist diese also eher gleichfarbig, ohne hohe Kontraste, so verhindert ein höherer Wert, dass hier ein Patch überhaupt erst erzeugt wird (= keine Rekonstruktion an dieser Stelle).
Der Zweck dieser Einstellung: Möchten Sie verhindern, dass Patches in Bereichen geringer Texturdetails (z.B. konstant blauer Himmel) erstellt werden, erhöhen Sie den Wert vorsichtig. Solcherlei Bereiche sind sehr schwierig zu verarbeiten und somit fehleranfällig.
Haben Sie Footage mit vielen Texturdetails geladen, kann die Erhöhung des Wertes zu einer Punktewolke besserer Qualität führen.
Zusammenfassend lässt sich feststellen: Höhere Parameterwerte führen zu weniger, aber qualitativ besseren Patches/rekonstruierten Punkten. Kleinere Werte erzeugen mehr, aber qualitativ schlechtere Patches/rekonstruierte Punkte.
Die voreingestellten 0.5% sollten für das meiste Footage richtig dimensioniert sein.
Ist diese Option aktiviert, versucht die Szenenrekonstruktion kleine, isolierte Patchregionen zu beseitigen. Beachten Sie in obiger Abbildung, wie viele der kleinen, isolierten Punktansammlungen ausgefiltert werden.
Allerdings hängt die Wirksamkeit dieser Option stark vom Footage ab und kann deshalb deaktiviert werden, da evtl. sinnvolle Patches beseitigt werden.
Zuallererst: welcher Winkel ist gemeint? Stellen Sie sich eine Gerade zwischen der ersten Kamera und dem Patch und der zweiten Kamera und dem Patch vor: beide Geraden treffen sich im Patch. Der Winkel zwischen beiden Geraden ist derjenige welche.
Patches werden von verschiedenen Kamerapositionen (denen aus der Kamerarekonstruktion) aus verarbeitet. Damit Patches nicht aus der Sicht von 2 nebeneinander liegenden Kameras, die sich vielleicht garnicht bewegt haben (der Patch also nahezu identisch ist), bearbeitet werden, gibt es diesen Parameter, der dafür sorgt, das ein minimaler Winkel zwischen den Kameras eingehalten wird.
Der voreingestellte Wert funktioniert für das meiste Footage. Bei Videos, deren aufnehmende Kamera sich nur sehr wenig bewegt, kann es sinnvoll sein, den Wert etwas zu erniedrigen. Allerdings wird die Rekonstruktion dann ungenauer. Lassen Sie sich deswegen nicht täuschen, wenn sich bei kleinen Parameterwerten die Ansicht mit Patches und rekonstruierten Punkten füllt: Masse ist nicht unbedingt gleichbedeutend mit Klasse.
Zusammenfassend lässt sich feststellen: Höhere Parameterwerte führen zu weniger, aber qualitativ besseren Patches/rekonstruierten Punkten. Kleinere Werte erzeugen mehr, aber qualitativ schlechtere Patches/rekonstruierte Punkte. Bei zu hohen Werten wird übrigens gar keine Punktewolke mehr erstellt.
Nachdem sich die Einstellungen des vorherigen Untertabs "Weitergehende Einstellungen" mit der Erzeugung der Punktewolke befassten, geht es nun darum, aus diesen Punkten ein Polygonmesh zu zu erzeugen.
Fotometrische Wichtung[0..100%]
Beide Parameter sind in ihrer Wirkung sehr ähnlich.
Mit steigenden Werten wird versucht, größere Dreiecke zu unterbinden und diese durch kleinere, die den selben Bereich abdecken, zu ersetzen.
Ebenfalls werden inkorrekte Flächen – so weit möglich – verhindert. Bei sehr großen Werten bleibt – je nach Szene – evtl. immer weniger Mesh übrig.
Die Fotometrische Wichtung agiert etwas intelligenter als Flächenwichtung, da diese zusätzliche Footage-Informationen heranzieht.
Hiermit stoßen Sie die Szenenrekonstruktion an. Das Endergebnis ist – bei Erfolg – eine Szenenpunktewolke mit einem Vertex-Farben-Tag (das die Farben des Footage jedes Punktes speichert).
Je nach Footage und Einstellungen kann die Berechnung durchaus auch mehrere bis viele Minuten dauern.
Der Button ist ausgegraut, sofern etwas zur Berechnung fehlt. Das kann z.B. sein:
- es hat noch keine Kamerarekonstruktion stattgefunden.
- das Footage wurde nicht gefunden.
Sollte bereits eine Szenenrekonstruktion stattgefunden haben – sprich, Sie haben bereits schon einmal auf Punktewolke erzeugen geklickt, werden diese Daten verwendet, um ein zugehöriges Polygonmesh zu erzeugen. Sie können jederzeit Flächenwichtung und Fotometrische Wichtung ändern und durch erneuten Klick auf Mesh generieren ein neues Mesh erzeugen, ohne dass die komplette Szenenrekostruktion nochmal durchgeführt werden muss.
Gab es noch keine Szenenrekostruktion, wird diese kurzerhand durchgeführt und dann das Mesh generiert. Die einzelnen Punkte des Polygon-Objekts entsprechen dabei rekonstruierten 3D-Positionen im Raum.
Es empfiehlt sich übrigens, zunächst nur Punktewolken zu erzeugen, bis Sie mit der Dichte und der Abdeckung zufrieden sind und sich dann erst um ein evtl. Mesh zu kümmern. Wenn Sie sich die Punktewolke einmal genauer betrachten, werden Sie feststellen, dass selbst die auf völlig ebenen Flächen des Footage rekonstruierten Punkte in ihrer Höhenabweichung gegenüber der Fläche schwanken. Das Mesh kann also ebenen Flächen nur sehr schwierig nachbilden und wird immer mehr oder weniger "zerklüftet" sein. Die Szenenrekonstruktion kann somit nicht mit den Ergebnissen eines 3D-Scanners mithalten.
Tip: Verleihen Sie dem Polygonmesh ein Phong-Tag, damit etwas Glättung stattfindet.
Problembereiche beim Erzeugen des Meshs sind Löcher in der Punktewolke. Diese werden erst einmal ohne Rücksicht geschlossen, was zu sehr großen Dreiecken führen kann, was unschön aussieht. Die vorherigen beiden Parameter bieten dafür etwas Besserung.