Wie wandelt sphärische Koordinaten zu equirectangular Projektion Koordinaten?
Vereinfachte Frage
Wie konvertieren Sie eine sphärische Koordinate (θ, φ) in eine position (x, y) auf einem equirectangular Projektion (auch als "geographische Projektion')?
In denen:
- x ist die Länge, die horizontale position, von -180 bis 180 Grad.
- y ist die Breite, die vertikale position von -90 bis 90 Grad.
- θ theta, der horizontale Winkel in Grad, einen Vektor von (0,0,0) zu einem Punkt auf der Oberfläche einer Kugel.
- φ ist phi, der vertikale Winkel (in Grad), einen Vektor von (0,0,0) zu einem Punkt auf der Oberfläche einer Kugel.
Unten finden Sie die ursprüngliche Frage zurück, wenn ich nicht verstehe das problem gut, aber ich denke, es ist immer noch gut, um zu zeigen, was ist eine praktische Anwendung für diese Lösung.
Kontext
Edit: Die ursprüngliche Frage-Titel war: Wie verwandeln Sie ein Foto in einem bestimmten Winkel zu einem Teil von einem panorama-Foto?
Kann jemand helfen Sie mir mit, welche Schritte sollte ich nehmen, wenn ich will, zu verwandeln, ein Foto zu einem bestimmten Winkel in einer Weise, die ich kann die resultierende (verzerrt/verändert) Bild an der entsprechenden Stelle auf ein equirectangular Projektion, cube map, oder jedes panorama Foto-Projektion?
Welcher Projektion ist die einfachste zu tun, ist gut genug, denn es gibt sehr viele Ressourcen, wie die Konvertierung zwischen verschiedenen Projektionen. Ich weiß nur nicht, wie der Schritt von einem echten Foto zu so einer Projektion.
Ist es sicher davon ausgehen, dass die Kamera bleiben an einer festen Position, und drehen kann in jede Richtung von dort. Die Daten, die ich denke, ist erforderlich, um dies zu tun, ist wahrscheinlich so etwas wie dieses:
- Horizontalen Winkel von physischen Kamera
[-180, +180]
(z.B. +140deg). - Vertikalen Winkel von physischen Kamera
[-90, +90]
(z.B. -30deg). - Auflösung des Foto -
w x h
(z.B. 1280 x 720 Pixel). - Horizontale Winkel des Fotos (z.B. 70deg).
- Vertikale Winkel des Fotos (z.B. 40deg).
- Objektiv-Korrektur a, b, c-Parameter (siehe unten).
Habe ich diese Daten, und ich denke, der erste Schritt ist zu tun, Objektiv-Korrektur, so dass alle Linien gerade sind in der Tat gerade. Und dies kann getan werden mit imagemagick
's Die Tonnenförmige Verzerrung, in dem Sie müssen nur füllen drei Parameter: a, b, und c. Die transformation, die auf das Bild angewendet, um dies zu korrigieren ist einfach.
Ich bin fest auf den nächsten Schritt. Entweder ich verstehe nicht ganz verstehen, oder auch die Suchmaschinen werden Sie nicht mir zu helfen, da die meisten Ergebnisse sind über die Konvertierung zwischen den bereits gegebenen Projektionen oder verwenden Sie fortgeschrittene Anwendungen zu Nähen Fotos intelligent zusammen. Diese Ergebnisse haben mir nicht helfen mit der Beantwortung meiner Frage.
EDIT: ich dachte mir, dass vielleicht eine Figur helfen, die erklärt es besser 🙂
Das problem ist, dass ein bestimmtes Foto Rot nicht in die equirectangular Projektion ohne eine transformation. Die Abbildung unten zeigt das problem.
So, ich habe Rot, und ich brauche, um es zu transformieren in Grün. Blau zeigt den Unterschied in der Verwandlung, aber das hängt von der horizontal - /vertikal-Winkel.
- Equirectangular Projektion, im einfachsten Fall, ändert nichts zahlen. Die projizierte x-Koordinate ist gleich der Länge θ, die projizierte y-Koordinate gleich dem Breitengrad φ. Konstante Faktoren werden so gewählt, entschied sich für die Breite, zeigt null Verzerrung. In Ihrer Anwendung ist, werden Sie wahrscheinlich haben, eine nachträgliche Skalierung / übersetzung pixel-Koordinaten.
- Bild-stitching in der Regel umfasst "advanced" korrigiert, da in der Praxis die exakte Projektion Parameter (θ, φ, sondern auch Kamera-Parameter), sind unbekannt und schwer zu bekommen.
- nicht wirklich, ich habe das problem bereits gelöst, aber ich habe noch nicht die Zeit gefunden zu posten, eine Antwort noch. Wird, dass irgendwo in der nächsten Woche. Die resultierende Projektion ist nicht pixelgenau, aber gut genug, um es zu betrachten, ohne das Zoomen in die Ränder der einzelnen Fotos (ich sollte hinzufügen, Unschärfe in der Nähe der Grenze zu einer weiteren Verringerung der übergangs-Artefakt).
- freut mich zu hören, klingt wie eine gute pragmatische Lösung 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Fotos stammen von einem festen Punkt und kann die Kamera nur drehen der yaw-und pitch-um diesen Punkt. Dann können wir betrachten eine Kugel mit einem radius (für die Mathematik ist, ist es äußerst empfehlenswert, mit einem radius von 1). Das Foto wird eine rechteckige Form auf dieser Sphäre (aus Sicht der Kamera).
Horizon-Fall
Wenn Sie auf der Suche am Horizont (äquator), dann die vertikalen Pixel Konto für breiten-und horizontal-Pixel-Konto für die Länge. Für eine einfache panorama-Foto der Horizont da ist nicht viel von einem problem:
Hier schauen wir uns grob den Horizont unserer Welt. Das heißt, die Kamera hat Winkel
va = ~0
. Dann ist dies ziemlich einfach, denn wenn wir wissen, dass das Foto ist 70 Grad breit und 40 Grad hoch, dann wissen wir auch, dass die Längen-Bereich werden etwa 70 Grad und einer Breite zwischen 40 Grad.Wenn wir kümmern uns nicht um eine leichte Verzerrung, dann die Formel zur Berechnung der
(longitude,latitude)
aus jedem pixel(x,y)
aus dem Foto wäre ganz einfach:Problem
Aber diese Annäherung arbeitet nicht auf allen, wenn wir die Kamera bewegen, viel mehr vertikal:
So, wie wir transformieren ein pixel aus dem Bild auf
(x, y)
zu einem(longitude, latitude)
koordinieren Sie in einem gegebenen vertikalen und/oder horizontalen Winkel, in dem das Foto aufgenommen wurde(va,ha)
?Lösung
Die wichtige Idee, dass das problem bei mir gelöst, ist dies: Sie haben im Grunde beiden Sphären:
Wissen Sie, die sphärische Koordinate eines Punkts auf dem Foto-Bereich, und Sie wollen wissen, wo dieser Punkt liegt auf der geo-Sphäre mit den verschiedenen Kamera-Winkel.
Das eigentliche problem
Müssen wir erkennen, dass es schwierig zu tun, die keine Berechnungen zwischen den beiden Sphären mit nur sphärische Koordinaten. Die Mathematik für die kartesischen Koordinatensystem ist viel einfacher. Im kartesischen Koordinatensystem können wir leicht drehen, um eine beliebige Achse mit Drehung Matrizen, dass multipliziert mit der Koordinate Vektor
[x,y,z]
um das gedrehte Koordinatensystem zurück.Warnung: Hier ist es sehr wichtig zu wissen, dass es gibt verschiedene Konventionen im Hinblick auf die Bedeutung der
x
-Achsey
-Achse, undz
-Achse. Es ist ungewiss, welche Achse ist die vertikale und die Punkte wo. Sie müssen nur eine Zeichnung für sich selbst und entscheiden Sie sich für diese. Wenn das Ergebnis falsch ist, ist es wahrscheinlich, weil diese gemischt sind. Das gleiche gilt für dietheta
undphi
für sphärische Koordinaten.Die wirkliche Lösung
So der trick ist die Verwandlung von Foto-Bereich zu Kartesisch, dann gelten die Drehungen, und dann gehen Sie zurück zu sphärischen Koordinaten:
[x,y,z]
Vektoren).(ha,va)
.Beispiel-code
Beachten Sie, dies ist nur eine Art von pseudo-code. Es wird empfohlen, um eine matrix-Bibliothek, die mit Ihren Multiplikationen und Rotationen von Matrizen und Vektoren.
geo_w_px
ist 2058, undgeo_h_px
ist 1036. Allerdings müssen wir zunächst zu normalisieren, die Grad, also tun wir(longitude+180)/360.0*geo_w_px
. Aber in der pseudo-code, den ich vorausberechnetegeo_w
alsgeo_w_px/360
(gleiche Idee fürgeo_h
,polar_w
,polar_h
etc).(x,y)
von Ihrem fisheye-Bild in(latitude, longitude)
, und dann eine Funktion, schaltet das latitude, longitude in einem pixel auf dem equirectangular output-image (das ist, wiegeo_w_px
berechnet wurde). Aber, bitte, stellen Sie eine neue Frage, weil Ihre situation scheint wirklich sehr von diesen unterscheiden.hmm, ich denke, vielleicht sollten Sie gehen einen Schritt zurück.
Betrachten Sie Ihre Kamera-Winkel (70mm ? oder so).
aber dein hintergrund Bild ist ein 360 Grad in der horizontalen, aber auch vertikalen).
Betrachten Sie die perspektivischen Verzerrungen, die auf beiden Bilder.
Für den hintergrund pict in einem vertikalen Sinn nur der Horizont ist nicht vertikal verzerrt. Leider ist es nur eine dünne Linie.
Als die Verzerrung erhöht, je mehr man nach oben oder unten.
Seine nicht als Konstante in die tonnenförmige Verzerrung, aber es hängt davon ab, vertikalen Abstand zum Horizont.
Ich denke, der beste Weg zu erkennen, der Unterschied ist eine seitenansicht der sowohl den Typ der Kamera und das Ziel sollen Sie die Projekt nach, von dort aus seine Trigonometrie, Mathematik.
Beachten Sie, dass für das 70mm-Bild müssen Sie wissen, den Winkel gedreht wurde. (oder schätzen)