PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fotos entzerren / Perspektivische Projektion / Homographie


Pinoccio
2011-01-21, 19:35:13
Hallo,

ich habe ein Gehirnverknotendes Problem.
Ich habe ein Luftbild, von dem weiß, wie die Kamera im Raum liegt (Position und Lage) und welchen Öffnungswinkel das Objektivs hat. Anhand dessen bin ich in der Lage, auszurechnen, wo die 4 Ecken meines Bildes real liegen. Das kann ich als kml speichern und so an Google Earth übergeben. Dort wird das Bild dann richtig entzerrt dargestellt.
Im KML sieht das so aus:
<GroundOverlay><name>Spandau</name>
<description>Luftbild http:\\de.wikipedia.org\wiki\Datei:Luftbild_Spandau_wilhelmstadt.jpg (http://de.wikipedia.org/wiki/Datei:Luftbild_Spandau_wilhelmstadt.jpg), Lizenz: GNU General Public License</description>
<Icon><href>http:\\upload.wikimedia.org\wikipedia\commons\c\cb\Luftbild_Spandau_wilhelmstadt .jpg (http://upload.wikimedia.org/wikipedia/commons/c/cb/Luftbild_Spandau_wilhelmstadt.jpg)</href>
<viewBoundScale>0.75</viewBoundScale> </Icon>
<gx:LatLonQuad><coordinates>
13.20194194601994,52.53553565881712,0
13.18849332074116,52.53597941433976,0
13.17511891250003,52.5028397311904,0
13.22599989978386,52.49881986390889,0
</coordinates></gx:LatLonQuad></GroundOverlay></kml>(Im Anhang als gezippte KML-Datei zum Ansehen. Das eingebundene Bild (http://de.wikipedia.org/wiki/Datei:Luftbild_Spandau_wilhelmstadt.jpg) ist nicht von mir, aber es illustriert das Problem.)

Nun würde ich gerne das Bild selbst entzerren, also quasi folgendes als Ergebnis haben:
http://www.abload.de/thumb/spandauggss.gif
(Hier das Bild als gif wegen der Transparenz) (http://www.abload.de/image.php?img=spandauggss.gif)

Als Lösungsmittel soll Octave (also ein matlab-Derivat) zum Einsatz kommen. Dort gibt es eigentlich mit imperspectivewarp (http://octave.sourceforge.net/image/function/imperspectivewarp.html) die passende Funktion, aber ich bin irgendwie zu blöd, sie zu bedienen.
Die Funktion möchte mit einer Matrix gefüttert werden. Ich habe damit auch schon rumprobiert mit folgenden Ansätzen Paul Heckbert: Projective Mappings for Image Warping (http://pages.cs.wisc.edu/~dyer/cs766/readings/heckbert-proj.pdf) (PDF) oder diesem Tutorial von Jepson (http://www.cs.toronto.edu/~jepson/csc2503/tutorials/homography.pdf) (PDF). Auch Peter Kovesis homography2d.m (http://www.csse.uwa.edu.au/~pk/research/matlabfns/Projective/homography2d.m) habe ich schon versucht, aber da kommen auch merkwürdige Ergebnsise raus.

Gibt es einen einfachen Weg, aus meinen Kameraparametern (Bildentfernung, Öffnungswinkel, Position und Lage) entweder selbst zur rechnen* oder die Projektionsmatrix zu erhalten? Ich steh da irgendwie völlig auf dem Schlauch.

* Ich mein, ich könnte für jeden Pixel seperat rechnen, aber das kann ja nicht die Lösung sein, oder?!

mfg

Jotta
2011-01-22, 18:56:38
Hi,

ich würde mal folgendermassen vorgehen:

Zuerst erstellst du mal die Matrizen für Rotation,Skalierung,
Translatation und Projektionund findest raus, wie diese
Verkettet werden, um aus einem Orginalbild dein Abbild
zu bekommen (meist ist hier das Problem, die Reihenfolge
der Rotationen rauszubekommen, evtl. braucht es zwei
Translatationen).

Dann kannst du alle Matrizen bis auf die Projektion invertieren
und in umgekehrter Reihenfolge aufmultiplizieren: Damit wird
das Orginalbild so über das Abbild im Raum gelegt, dass nur
noch eine Projektion notwendig ist.

Im Dritten Schritt kannst du diese simple Projektion umkehren
(du hast ja nur 2D-Objekte!!!).

Zuletzt kannst du dann für ein gedachtes Texture-Rechteck
auf das Abbild 1:1 umrechnen.


Hört sich komplizierter an als es ist, geht aber im 10 min!

Viel Spass