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
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