Stereofotos Low Cost - Fotogrammetrie Homepage LangLilge.de sitemap

von Winfried Lilge, Technischer Zeichner, Shakespeareplatz 8, 27283 Verden, 5254'44"N 914'10"E
Stand: 04.02.2004

1. Grundüberlegungen

Ausgehend von der erschreckenden Tatsache, dass professionelle Software zur Fotorgrammetrischen Auswertung von (Stereo-)Fotos an den Neupreis eines Kleinwagens heran reichen, mache ich mir hier Gedanken, eine billigere Lösung zu finden.

Hardware:

Ich stell mir vor, eine einfache Vorrichtung zu bauen, die eine waagerechte Verschiebung der Kamera in der Film- bzw. Bildsensor-Ebene um einen festgelegten Abstand B erlaubt. Dies sollte z.B. durch eine lineare Führung mit entsprechenden Anschlägen möglich sein, die auf ein Kamerastativ geschraubt wird. Eine Wasserwaagenlibelle zeigt die waagerechte Ausrichtung an. Dabei sind zwei Libellen oder eine Punktlibelle nötig, um Neigung und Kippung ausgleichen zu können. Eventuell ist am Stativ außerdem ein Lot befestigt, das auf den Punkt am Boden unter der linken Kameraposition zeigt, um den exakten Abstand zum Objekt messen zu können.
Die Ausrichtung der Kamera zum Stativsystem sollte möglichst stabil sein und außerdem gewährleisten, dass die Sensor-Chip-Ebene parallel zur Verschiebeachse ist.

Software:

Die Aufnahmen, die auf diesem Wege gemacht werden, sollen am Bildschirm auswertbar sein. Indem auf den zusammengehörigen Stereofotos die Bildpunkte eines Objektpunktes nacheinander angeklickt werden, werden Bildpunktpaare gebildet. Aus den Bildkoordinaten dieser Paare werden die realen Objektkoordinaten bezogen auf die linke Kameraposition durch die Software ermittelt. Es sollte eine geeignete Ausgabe der 3D-Information möglich sein, einfachsten falls als Textausgabe der 3 Koordinaten oder komfortabler gleich als VRML-Datei1.
Die Punktwolken oder Punktverbindungen, die sich durch die Klick-Identifizierung ergeben, sollen in einer 2D-Datei gespeichert werden, um die Benutzereingaben sichern und verändern zu können. In dieser Datei sind außerdem sonstige eingetippte Informationen der Aufnahme und die Namen der Stereo-Bilder abgelegt. Im Idealfall klickt man im Explorer doppelt auf diese Datei, die Stereo-Dateien werden in die entsprechenden Bildfelder geladen und die Punkte und/oder Verbindungen zwischen Punkten werden als Vordergrundebene gezeichnet.
Um hinreichende Genauigkeit zu erzielen, werden die Koordinaten in der 2D-Datei mit einer Nachkommastelle abgelegt. Dadurch sind zehntel-Pixel-Informationen möglich.

Mögliche Anordnung in einer HTML-Datei mit JavaScript:

Linke Position: left1.jpg Rechte Position: right1.jpg Textausgabefeld
HTML-Datei mit JavaScript

Bestimmung der Punkte mittels JavaScript durch Auswertung der Klickposition innerhalb der Bilder

Hier klicken für das vorläufige Programm FOGRA. Es macht bei weitem noch nicht alles, was es soll, aber die Bildschirmaufteilung und ein paar der Funktionen, sind schon so wie sie später sein sollen. Eines der Hauptprobleme ist die fehlende Grafikfähigkeit von JavaScript, damit ich auf den Bildern ein paar Punkte und Striche zeichnen kann. Für die Speicherung der Koordinaten fehlt dann auch die Möglichkeit mit JavaScript Dateien zu sichern und einzulesen.
Wer mir bei dem Projekt und dem Programm helfen kann, der schreibe mir doch bitte eine Mail. :o)

2. Transformationen zwischen Objektkoordinaten und Bildkoordinaten

Als Abbildungsgleichungen habe ich von A. Wiedemann / TU Berlin folgende Darstellung gefunden:
Voraussetzung hierfür ist, die exakt waagerechte Verschiebung der Kamera ohne Verdrehung in irgendeiner der drei Raumachsen, weil sich sonst ungleich kompliziertere Gleichungen ergeben.
P: Objektpunkt mit (X Y Z)
O1: linkes Projektionszentrum, Kameralinse linke Position (0 0 0)
O2: rechtes Projektionszentrum mit (B 0 0)
ck: Kamerakonstante, Abstand Linse - Projektionsebene
X', y': Bildkoordinaten linker Bildpunkt
X'', y'': Bildkoordinaten rechter Bildpunkt

        Y           B
X = x' ---- = x' --------     1.1
        ck       x' - x''

          B
Y = ck ---------              1.2
        x' - x''

        Y          B
Z = y' --- = y' ---------     1.3
        ck       x' - x''
Aufnahmeszene, Draufsicht

bzw. bei bekannten Objektkoordinaten :
         X                      X - B                   Z
x' = ck ---  1.4      x'' = ck -------  1.5     y' = ck --- = y''    1.6
         Y                        Y                     Y

y' = y''     1.7      (wegen waagerechter Verschiebung)
Wobei die 2-dimensionalen Koordinatensysteme der beiden Stereo-Bilder die folgende Orientierung haben:
Stereo-Bilder

Abbildung 1 zeigt eine Draufsicht auf die Aufnahmeszene, die Objekt-Z-Achse steht senkrecht auf der Blattebene. Z-Achse und y'- bzw y''-Achse zeigen in dieselbe Richtung. x' und x'' zeigen in Abb. 1 zwar in negativer X-Richtung, man muss aber berücksichtigen, dass die Aufnahmen real um 180 gedreht verwendet werden und wie eine Fensterscheibe zu sehen sind, durch die man blickt, so wie in Abb. 2 dargestellt.

3. Ermittlung der Kamerakonstante ck

Die reale Kamerakonstante bezogen auf den Abstand Objektiv-Sensorchip ist eigentlich nebensächlich, denn es kommt vielmehr darauf an, in welcher Größe die Aufnahmen später abgebildet werden. Deshalb gibt es für jeden Abbildundgsmaßstab eine eigene (Kamera-)Konstante, die folgendermaßen ermittelt werden kann:
Für alle Punkte, die sich genau 1m (bzw. eine Längeneinheit) vor der Kameralinse (Y=0) befinden, wird Y = 1. Dadurch vereinfachen sich die Gleichungen 1.4 bis 1.6 zu:

x'1m = ck X   3.1        x''1m = ck (X - B)    3.2       y'1m = ck Z = y''1m     3.3
fotografiert man in dieser Ebene einen 1m langen Stab oder Maßstab, so kann man direkt die Kamerakonstante ablesen. Der Stab muß dabei genau von der Bildmitte aus nach oben oder rechts zeigen:
Maßstab fotografiert
Maßstab senkrechtMaßstab waagerecht


Es ergeben sich aus Gleichung 3.1 und 3.3 die folgenden Bildkoordinaten:

P = (0  1  1)   Q = (0  1  0)   |   x'P = 0    y'P = ck   |   x'Q = 0   y'P = 0
R = (1  1  0)   S = (0  1  0)   |   x'R = ck   y'R = 0    |   x'S = 0   y'S = 0
In meinem Fall habe ich ein Muster aus dunklen Klebestreifen auf eine weiße Wand geklebt und meine Kamera auf dem Stativ auf die Mitte ausgerichtet. Mit minimalem Zoom und Bildgröße 1600x1200 Pixel ergaben sich folgende Werte:
waagerechtsenkrecht BildbreiteBildhöhe
Bildrand 1620 Pixel/m824 Pixel/0,5m = 1648 Pixel/m => 0,988m0,728m
Bildmitte 1610 Pixel/m800 Pixel/0,5m = 1600 Pixel/m => 0,994m0,75m

Die Unterschiede zwischen Rand und Mitte liegen waagerecht bei 0,6% und senkrecht bei 3%

Mit maximalem Zoom habe ich nur eine waagerechte Messung in der Bildmitte gemacht:
1422 Pixel / 0,3m = 4740 Pixel/m => Bildbreite: 0,338m -höhe: 0,253m

Für die Abbildung der Fotos auf dem Bildschirm bzw. auf (Foto-)Papier ist es günstig, die Bildgröße so zu wählen, dass dieser Meterstab eine "runde" Länge hat, z.B. genau 100Pixel oder genau 5cm. Oder man wählt die Bildbreite und -höhe so, dass sie einem runden Bruchteil der errechneten Breite und Höhe in 1m Abstand entspricht, was prinzipiell zum gleichen Ergebnis führt. In meinem Fall z.B. 98,6mm gemittelte Breite und 73,9mm gemittelte Höhe für minimalen Zoom.

Wählt man diese Abbildungsprozedur immer gleich, also: dann braucht man für eine bestimmte Serie von Bildern die Kamerakonstante ck nur einmal zu ermitteln. Die dabei benutzten Werte sollten in einem Protokoll festgehalten werden.

In professionellen Fotogrammetriesystemen werden aufwändige Messobjekte fotografiert, um mehrere Parameter der Abbildgundsgeometrie und Verzeichnung der Kameraoptik zu bestimmen, die dann auch in der Mess-Software benutzt werden. Ich beschränke mich darauf, einen Mittelwert für die Abbildungskonstante zu ermitteln. Falls die fotogrammetrierten Objekte dann nicht genau genug mit den errechneten 3D-Koordinaten übereinstimmen, mache ich mir weitere Gedanken.

4. Transformationen zwischen Objektkoordinaten und VRML

VRML hat das Weltkoodinatensystem folgendermaßen festgelegt:

VRML-Iso bzw. VRML-Front Ansicht bei Eintritt in die Szene
ohne speziellen Viewpoint
Die Z-Achse zeigt auf den Betrachter, Vorderansicht auf die XY-Ebene und der Horizont liegt in der XZ-Ebene.

Architektur-Koordinatensystem sind hingegen meist an Luftaufnahmen orientiert:
Arch-Iso bzw. Arch-Top Ansicht bei Luftaufnahmen Arch-Front Aufnahme auf dem Boden stehend

Das Gelände liegt waagerecht in XY-Ebene, Objekte ragen in positiver Z-Achse auf. Die Y-Achse zeigt meist vom Betrachter weg, wenn man sich den Betrachter wieder auf der Erde stehend vorstellt.

Dadurch erbeben sich die Transformationen:
XVRML = XArch        5.1

YVRML = ZArch        5.2

ZVRML = -YArch        bzw.        YArch = -ZVRML        5.3

5. Beispiel für bekannte Objektkoordinaten (Einheiten in m, ck x' x'' y'' in Pixel):

P=(0,1  0,2  0,05)  =>  X=0,1  Y=0,2  Z=0,05
ck=1624
B=0,07  =>  O1=(0  0  0)  O2=(0,07  0  0)

x' =        ck X / Y =        1624 * 0,1 / 0,2 =           812
x'' =       ck (X - B) / Y =  1624 * (0,1 - 0,07) / 0,2 =  243,6
y' = y'' =  ck Z / Y =        1624 * 0,05 / 0,2 =          406
Probe:
XA = x' B / (x' - x'') =  812 * 0,07 / (812 - 243,6) =   0,1
YA = ck B / (x' - x'') =  1624 * 0,07 / (812 - 243,6) =  0,2
ZA = y' B / (x' - x'') =  406 * 0,07 / (812 - 243,6) =   0,05



Fußnoten: 1VRML: Virtual Reality Modeling Language, mit Internet-Browser und Plug-In darstellbar

allercappella.de und ganainm.de sind für den Inhalt externer Links nicht verantwortlich.