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:
Trifft ein projezierter Pixel auf einen NOTUSED-Pixel,
so bekommt letztere Pixel die Farbe des projezierten Pixels und das NOTUSED-Flag wird gelöscht.
Trifft ein projezierter Pixel auf einen Pixel dessen Farbe identisch ist passiert nichts weiter.
Trifft ein projezierter Pixel auf einen Pixel mit unterschiedlicher Farbe wird das FREE-Flag gesetzt.
Trifft ein projezierter Pixel auf einen Pixel mit FREE-Flag, wird der Pixel weiterprojeziert bis er entweder
auf einen nicht FREE-Flag Pixel trifft oder den Bereich des 3D-Bildes verlässt.
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 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.
Pixed: Der 3D-Bildbetrachter. Mit der rechten Maustaste kann das 3D-Bild gedreht werden. Eine 3D-Beschleunigerkarte mit OpenGL Unterstützung wird benötigt. Ich verwende eine ATI 128 GL mit 8MB Videomemory. Das ist unterste Grenze! Tip: Trotz MDI immer nur ein 3D-Bild auf einmal geöffnet haben. Wenn der Grafikkartenspeicher nicht aussreicht, wird das ganze sonst sehr langsam und es können Fehler auftreten.
Screenshotdownload: pixed.tar.gz
Projektor: Erstellt ein 3D-Bild aus mehreren 2D-Bildern. Für die Projektion muss die Desktop-Farbtiefe auf 32Bit eingestellt sein. Sonst wird Müll produziert! Die Bedienung ist erwas kompliziert, aber um das Verfahren auszuprobieren, einfach gemeinsam in ein Verzeichniss mit den Quellbildern (nächster Punkt) entpacken und "scan" anklicken. Mit den Pfeilbuttons kann das Ergebniss anschließend gedreht werden und mit angabe eines Dateinamens und Click auf "Save3D" gespeichert und in Pixed geladen werden.
Die Projektion selber braucht etwas Zeit. Auf meinem Celeron 466 mit ATI 128 GL 8MB dauert diese Projektion 10 Minuten. Sollte nach einer Projektion eine Fehlermeldung erscheinen, läuft kein Windows 2000. Diese ist aber einfach wegclickbar und hat weiter keine Bewandniss.
Screenshotdownload: projektor.tar.gz
Die Rotationsanimation des 3D-Bildes im AVI-Format. Windows Media Player 7 oder höher wird benötigt.
download: 3gut_rotanim.avi
Rotate: Erstellt eine Rotationsanimation um eine Povray-scene. Wurde zur Erstellung der Quellbilder benutzt. Der Vorteil gegenüber der Scriptingfunktionalität von Povray selber ist dass für jedes Bild eine eigene Povray-scene erstellt wird und somit eine Animation von mehreren Povrays gleichzeitig bearbeitet werden kann. Da die Quellbilder auf einem Multiprozessorsystem erstellt wurden ist dies von Vorteil.
download: rotate.tar.gz
Links
DARPA MARS program: "We are engaged in a 100% effort to develop laboratory prototype sensor-based software for utility mobile robots for industrial transport, floor maintenance, security etc., that matches the months-between-error reliability of existing industrial robots without requiring their expensive worksite preparation or site-specific programming. Our machines will navigate employing a dense 3D awareness of their surroundings, be tolerant of route surprises, and be easily placed by ordinary workers in entirely new routes or work areas. The long-elusive combination of easy installation and reliability should greatly expand cost-effective niches for mobile robots, and make possible a growing market that can itself sustain further development." http://www.ri.cmu.edu/~hpm/project.archive/robot.papers/2001/ARPA.MARS/Report.0103.html Spezial Thanks to Thomas Friedel für den Link!