3D-Rekonstruktion

Mein hier vorgestelltes Verfahren ist eine Abwandlung des Silouettenverfahrens. Als Voraussetzung müssen, wie bei dem Silouettenverfahren auch, mehrere Bilder des zu rekonstruierden Objekts und deren zugehörigen Camerapositionen, aus denen die Bilder aufgenommen wurden, bekannt sein.
Zu Beginn des Verfahrens wird ein 3D-Bild (im Prinziep ein 3 Dimensionales Array, dessen einzelne Elemente je eine Farbe und zusätzlich einige Flags speichern kann, also etwa äquivalent zu einer normalen 2D-Bild repräsentation im Speicher) mit jeden Pixel NOTUSED initialisiert. Anschließend werden nun die einzelnen Bilder von der jeweiligen Cameraposition auf den Würfel projeziert. Dabei gilt, es folgende Fälle zu unterscheiden: Anschließend sind die Farbpixel als Bestandteil des Objekts zu sehen und die FREE-Pixel als leere Raum. An den Stellen mit NOTUSED-Pixeln lagen keine Bildinformationen vor.
Dies ist nur als grobe Vorgehensweise zu sehen. Natürlich müssen da überall Schwellwerte eingebaut und auch benachbarte Pixel betrachtet werden damit nicht richtige Pixel aufgrund von leichten Farbschwankungen und leicht falschen Cameraposition gelöscht werden. Auch sollte ein Pixel nicht Aufgrund eines Bildes gelöscht werden wenn er z.B. in drei anderen Bildern wunderbar passt. Einige Statistische Betrachtungen sind also notwendig um es tatsächlich funktionsfähig zu machen.
Ein Vorteil dieses Verfahrens im Vergleich zum Silouttenverfahren ist dass auch Hohlräume rekonstruiert werden können. Weiterhin muss auch vor der Projezierung keine Unterscheidung zwischen Hintergrund und Objekt vorgenommen werden, ist der Hintergrund abwechslungsreich genug, wovon man ausgehen kann wenn man Bilder von rundrum des Objekts macht, werden die Hintergrundpixel immer irgendwann aus dem 3D-Bild-Bereich herausprojeziert. Im Gegensatz zum Silouttenverfahren wird also die Texturierung der Objekte mit zur Rekonstruktion benutzt.
Nachteile sind jedoch, dass die sich Beleuchtung der Szene auf den Bildern nicht all zu groß ändern darf. Ein anderer Nachteil ist die Geschwindigkeit. Während beim Silouttenverfahren jedes Bild nur einmal projeziert wird, muss beim diesem Verfahren jedes Bild mehrmals projeziert werden. Das Objekt wird praktisch aus dem soliden 3D-Bild-Würfel herausgeschnitte.
Das Projezieren läst sich jedoch wunderbar beschleunigen durch den Einsatz heutiger 3D-Grafik-Beschleuniger. Deshalb verlangen die unten angegebene Programme OpenGL. Bei verschiedenen Tests auf verschiedenen Karten habe ich jedoch festgestellt, dass allzu neue Karten (GeForce & Co) nicht so sehr dafür geeignet sind, da sie die von S3 entwickelte Texturkompression verwenden. Leider zerstört die die benötigten Informationen. Ich habe leider nicht herausgefunden, wie man diese Kompression in OpenGL ausschalten kann oder ob das vielleicht mit DirectX geht.


Mein erstes Ergebniss:

Die Quellbilder, aus denen das 3D-Bild erzeugt wurde:

Diese Bilder wurden mit Povray erstellt. http://www.povray.org

Bilder vom erstellten 3D-Bild (ungefiltert):

Das 3D-Bild hat eine Auflösung von 128x128x128.

Bilder vom gefilterten 3D-Bild:

ohne Farbe:

Diese Bilder sind Screenshots einer Rotationsanimation um das Ergebniss-3D-Bild.

Download:

Download auf eigene Gefahr! Ich distanziere mich hiermit ausdrücklich von allen Schäden die durch die Benutzung der hier zur Verfügung gestellten Software entstehen. Die Nutzung erfolgt auf eingene Gefahr. Mit dem Download der Software erklären Sie sich hiermit einverstanden.
Die Programme sind ausschließlich Windows-Executeables.

Links


Copyright 2001 Marc Rochel16.04.2001