Der hier beschriebene Panorama-Namespace enthält Eigenschaften, die Informationen zur Erstellung und Darstellung von 360°-Fotos, manchmal auch als Panoramen bezeichnet, wie die mit der Photo Sphere-Funktion in der Android 4.2-Kamera erstellt wurden. Die Metadaten sollten serialisiert und als beschrieben im Adobe XMP Standard. Weitere Informationen finden Sie in den Referenzen am Ende dieser Seite.
Der Namespace-URI lautet http://ns.google.com/photos/1.0/panorama/
Metadatenattribute
Die Diagramme und die Tabelle unten zeigen die Eigenschaften der 360°-Fotos, die von die GPano-Parameter. Wenn Sie 360°-Fotos bearbeiten und ansehen, Überprüfen und aktualisieren Sie die Metadaten entsprechend, wie weiter unten in diesem Dokument beschrieben. Beachten Sie bei der Angabe der Felder für die Pose und die anfängliche Überschrift die Eulerwinkel-Konventionen, die später in in diesem Dokument.
Beachten Sie, dass Google-Produkte nur sphärische Projektionen unterstützen. Weitere Prognosen werden derzeit nur von anderen Parteien unterstützt.
Sphärische Projektionen
Zylinderprojektionen
Wenn sich der obere Rand eines zylinderförmigen Bildes über dem Horizont befindet, ZugeschnitteneBereicheTopPixels müssen negativ sein. Ein Wert von 0 für cropedAreaTopPixels platziert das obere Bild am Horizont. Ein positiver Wert von ZuschneidebereichTopPixels platziert den oberen Rand des Bildes unterhalb des Horizonts.
GPano-Parameterverweis
Name | Typ | Erforderlich | Standardwert (vom Betrachter angenommen) |
Beschreibung der Unterkunft | Aktion erforderlich, wenn Bild geändert wird |
---|---|---|---|---|---|
GPano:UsePanoramaViewer | Boolesch | Nein | Richtig | Gibt an, ob dieses Bild in einer Photo Sphere-Ansicht und nicht als normales flaches Bild angezeigt werden soll. Dies kann basierend auf den Benutzervoreinstellungen oder durch die Zusammenfügungssoftware festgelegt werden. Die Anwendung, die das Bild anzeigt oder aufnimmt, kann dies ignorieren. | Skalieren/Zuschneiden: Keine Änderung. In einer Anwendung kann diese Option auf "False" gesetzt werden, wenn das Sichtfeld unter einen bestimmten Wert fällt. |
GPano:CaptureSoftware | String | Nein | – | Wenn die Aufnahme mit einer App auf einem Mobilgerät durchgeführt wurde, z. B. einem Android-Smartphone, der Name der verwendeten App (z. B. „360°-Foto“). Dieses Feld sollte leer bleiben, wenn die Quellbilder manuell aufgenommen wurden, z. B. mit einer digitalen Spiegelreflexkamera auf einem Stativ. | – |
GPano:StitchingSoftware | String | Nein | – | Die Software, mit der das fertige Photo Sphere-Panorama erstellt wurde. Dieser Wert kann manchmal mit dem Wert von GPano:CaptureSoftware übereinstimmen. | – |
GPano:ProjectionType | Offene Textauswahl | Ja |
Rektangular |
In der Bilddatei verwendeter Projektionstyp. Google-Produkte unterstützen derzeit nur den Wert „equirektangular“. | scale/crop: Keine Änderung. |
GPano:PoseHeadingDegrees | Real | Nein, aber für die Anzeige in Google Maps erforderlich | – | Kompassausrichtung, gemessen in Grad im Uhrzeigersinn von Norden, für den Bildmittelpunkt. Wert muss >= 0 und < sein 360. | scale/crop: Keine Änderung. |
GPano:PosePitchDegrees | Real | Nein | 0 | Neigung, gemessen in Grad über dem Horizont, der Bildmitte. Der Wert muss >= -90 und <= 90 sein. | scale/crop: Keine Änderung. |
GPano:PoseRollDegrees | Real | Nein | 0 | Rollbewegung, gemessen in Grad, des Bildes, wobei die Ebene am Horizont 0 ist. Wenn die Rolle zunimmt, dreht sich der Horizont im Bild gegen den Uhrzeigersinn. Wert muss > sein -180 und <= 180. | scale/crop: Keine Änderung. |
GPano:InitialViewHeadingDegrees | Ganzzahl | Nein | 0 | Die Neigungswinkel der Anfangsansicht in Grad im Uhrzeigersinn vom tatsächlichen Norden ausgehend, nicht relativ zum Panoramazentrum. | scale/crop: Keine Änderung. |
GPano:InitialViewPitchDegrees | Ganzzahl | Nein | 0 | Der Neigungswinkel der Anfangsansicht in Grad über dem realen Horizont, nicht relativ zum Panoramazentrum. | scale/crop: Keine Änderung. |
GPano:InitialViewRollDegrees | Ganzzahl | Nein | 0 | Der Rollwinkel der Anfangsansicht in Grad, wobei die Ebene mit dem realen Horizont 0 beträgt. Wenn die Rolle zunimmt, dreht sich der Horizont in der Ansicht gegen den Uhrzeigersinn. | scale/crop: Keine Änderung. |
GPano:InitialHorizontalFOVDegrees | Real | Nein | – | Das anfängliche horizontale Sichtfeld (in Grad), das im Viewer angezeigt werden soll Dies entspricht in etwa der Zoomstufe. | – |
GPano:InitialVerticalFOVDegrees | Real | Nein | – | Das anfängliche vertikale Sichtfeld (in Grad), das der Viewer anzeigen soll. Dies entspricht in etwa der Zoomstufe. Wenn sowohl „GPano:InitialHorizontalFOVDegrees“ als auch „GPano:InitialVerticalFOVDegrees“ vorhanden ist, hat „GPano:InitialHorizontalFOVDegrees“ Vorrang. Verwenden Sie nur „InitialVerticalFOVDegrees“, wenn Ihre Inhalte in mehreren Seitenverhältnissen angezeigt werden sollen und wenn das vertikale Sichtfeld konstant bleiben soll, während sich das horizontale Sichtfeld ändern kann. Dieses Feld wird von Google-Produkten derzeit nicht unterstützt. | – |
GPano:FirstPhotoDate | Datum | Nein | – | Datum und Uhrzeit des ersten in der 360°-Fotos erstellten Bilds. | scale/crop: Keine Änderung. |
GPano:LastPhotoDate | Datum | Nein | – | Datum und Uhrzeit des letzten in der 360°-Fotos erstellten Bilds. | scale/crop: Keine Änderung. |
GPano:SourcePhotosCount | Ganzzahl | Nein | – | Anzahl der Quellbilder, die zur Erstellung der 360°-Fotos verwendet wurden | scale/crop: Keine Änderung. |
GPano:ExposureLockUsed | Boolesch | Nein | – | Wann einzelne Ausgangsfotos aufgenommen wurden, unabhängig davon, ob die Belichtungseinstellung der Kamera gesperrt war. | – |
GPano:CroppedAreaImageWidthPixels | Ganzzahl | Ja | – | Ursprüngliche Breite des Bilds in Pixeln. Entspricht der tatsächlichen Bildbreite bei unbearbeiteten Bildern. Siehe Diagramme oben. | scale/crop: Diese Eigenschaft muss aktualisiert werden, um die neue Größe des Bilds widerzuspiegeln. |
GPano:CroppedAreaImageHeightPixels | Ganzzahl | Ja | – | Ursprüngliche Höhe des Bilds in Pixeln (entspricht der Höhe des Bildes bei unbearbeiteten Bildern) Siehe Diagramme oben. | scale/crop: Diese Eigenschaft muss aktualisiert werden, um die neue Größe des Bilds widerzuspiegeln. |
GPano:FullPanoWidthPixels | Ganzzahl | Ja | – | Ursprüngliche Breite, aus der das Bild zugeschnitten wurde. Wenn nur ein Teilbild aufgenommen wurde, gibt dieser Wert die Breite an, die das vollständige Bild gehabt hätte. Siehe Diagramme oben. | crop: Keine Änderung. scale: Dies muss korrekt entsprechend skaliert werden. |
GPano:FullPanoHeightPixels | Ganzzahl | Ja | – | Ursprüngliche Höhe, aus der das Bild zugeschnitten wurde Wenn nur ein Teilbild aufgenommen wurde, gibt dieser Wert die Höhe an, die das vollständige Bild gehabt hätte. Siehe Diagramme oben. | crop: Keine Änderung. scale: Dies muss korrekt entsprechend skaliert werden. |
GPano:CroppedAreaLeftPixels | Ganzzahl | Ja | – | Spalte, an der der linke Bildrand aus der Originalgröße entfernt wurde. Siehe Diagramme oben. | crop: Wenn der linke Ausschnitt des Bildes geändert wird, muss dieser Wert aktualisiert werden. scale: Muss korrekt entsprechend skaliert werden. |
GPano:CroppedAreaTopPixels | Ganzzahl | Ja | – | Zeile, in der der obere Rand des Bilds aus der Originalgröße entfernt wurde. Siehe Diagramme oben. | crop: Wenn der obere Zuschnitt des Bildes geändert wird, muss dieser Wert aktualisiert werden. scale: Muss korrekt entsprechend skaliert werden. |
GPano:InitialCameraDolly | Real | Nein | 0 | Mit diesem optionalen Parameter wird die Position der virtuellen Kamera entlang der Sichtlinie, weg vom Mittelpunkt der 360°-Aufnahme, verschoben. Eine hintere Oberflächenposition wird durch den Wert -1,0 und eine vordere Oberflächenposition durch 1,0 dargestellt. Für eine normale Anzeige sollte dieser Parameter auf 0 gesetzt werden. | – |
Beispiel für eine vollständige 360°-Foto
Ohne Programmierer kann das Metadatenbeispiel unten zu ihrem vorhandenen vollständigen Foto hinzugefügt werden (360 Grad x 180 Grad) mit nur geringfügigen Änderungen. Verwenden Sie dazu ein Bildbearbeitungsprogramm, z. B. Adobe Photoshop.
- Ändern Sie alle Vorkommen von 4000 und 2000 so, dass sie der entsprechenden Breite und Höhe Ihres Bildes in Pixeln entsprechen.
- Aktualisieren Sie PoseHeadingDegrees, wenn Ihre 360°-Fotos in Google Maps angezeigt werden können. Andernfalls können Sie diesen Parameter
- Optionale Parameter aktualisieren oder entfernen (wie oben aufgeführt)
<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/"> <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer> <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware> <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware> <GPano:ProjectionType>equirectangular</GPano:ProjectionType> <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees> <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees> <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees> <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees> <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees> <GPano:CroppedAreaLeftPixels>0</GPano:CroppedAreaLeftPixels> <GPano:CroppedAreaTopPixels>0</GPano:CroppedAreaTopPixels> <GPano:CroppedAreaImageWidthPixels>4000</GPano:CroppedAreaImageWidthPixels> <GPano:CroppedAreaImageHeightPixels>2000</GPano:CroppedAreaImageHeightPixels> <GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels> <GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels> <GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate> <GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate> <GPano:SourcePhotosCount>50</GPano:SourcePhotosCount> <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed> </rdf:Description>
Beispiel für eine unvollständige 360°-Panoramaaufnahme
<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/"> <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer> <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware> <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware> <GPano:ProjectionType>equirectangular</GPano:ProjectionType> <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees> <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees> <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees> <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees> <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees> <GPano:CroppedAreaLeftPixels>90</GPano:CroppedAreaLeftPixels> <GPano:CroppedAreaTopPixels>128</GPano:CroppedAreaTopPixels> <GPano:CroppedAreaImageWidthPixels>2300</GPano:CroppedAreaImageWidthPixels> <GPano:CroppedAreaImageHeightPixels>1042</GPano:CroppedAreaImageHeightPixels> <GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels> <GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels> <GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate> <GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate> <GPano:SourcePhotosCount>50</GPano:SourcePhotosCount> <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed> </rdf:Description>
Robustheit bei der Bildbearbeitung
Um robust zu sein, sollten Programme, die 360°-Aufnahmen in einem Viewer anzeigen, überprüfen, ob Das Originalfoto wurde von einer Anwendung skaliert, ohne das Metadaten. Führen Sie dazu folgende Schritte aus:
- muss das Tag "CutpedAreaImageWidthPixels" der tatsächlichen Bildbreite entsprechen.
- muss das Tag "cropedAreaImageHeightPixels" der tatsächlichen Bildhöhe entsprechen.
- Wenn Schritt 1 oder 2 fehlschlägt, prüfen Sie, ob das Seitenverhältnis des Bildes beibehalten wurde.
- Falls Schritt 3 fehlschlägt, zeigen Sie das Bild nicht als 360°-Foto an, da es auf inkompatible Weise transformiert wurde, wodurch es zu starken Verzerrungen kommt.
- Ist Schritt 3 erfolgreich, entspricht das Seitenverhältnis und alle folgenden zugehörigen Tag-Werte sollten an die neue Bildgröße angepasst werden:
CutpedAreaImageWidthPixels, cropedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, TreataLeftPixels, CroppedAreaRightPixels.
Übersicht über Eulerwinkel
Die Ausrichtung der 360°-Fotos im Weltrahmen wird durch Euler definiert. Winkeln. Es gibt viele Möglichkeiten, um Eulerwinkel zu definieren. Um richtig zu sein, muss ein Programm genau die hier beschriebenen Eulerwinkelkonventionen.
Die Position oberhalb der Erdoberfläche definiert eine feste "lokale Frame“ XYZ, wobei Z oben und im rechten Winkel zur Erdoberfläche steht, X für der geografische Osten und Y der geografische Norden. Die Ausrichtung wird relativ zu diesem fester „lokaler Frame“ und die Eulerwinkel sind Drehungen um diese feste XYZ-Achsen. Die Positionsausrichtung an den Polen ist daher nicht definiert. Dieses bedeutet, dass eine Photo Sphere-Aufnahme mit den Winkeln (0, 0, 0) so ausgerichtet ist, dass der Pixel wird in der Mitte nach Norden ausgerichtet, wobei der Äquator der 360°-Foto parallel zu der Erdoberfläche analysieren.
Die Eulerwinkel ermöglichen eine Kartierung von Punkten im (gedrehten) "Foto".
Kugelrahmen" zu Punkten im (festen) "lokalen Frame":
Eine Rotationsmatrix wird aus den Euler-Winkeln wie folgt konstruiert:
folgt (es ist wichtig, diese Reihenfolge beizubehalten):
R = R_Z(-heading) * R_X(Pitch) * R_Y(Roll)
Dabei ist R_*(t) eine Drehung nach rechts um die genannte Achse:
Dabei gilt: Z = Nach oben, X = Ost, Y = Norden.
Es ist wichtig, diese Reihenfolge beizubehalten:
R = R_Z(-heading) * R_X(Pitch) * R_Y(Roll)
da Rotationen nicht kommutativ sind.
Beachten Sie, dass die Himmelsrichtung der Kompassausrichtung entspricht.
Verweise
Adobe XMP-Standard: http://www.adobe.com/devnet/xmp.html