Photo Sphere-XMP-Metadaten

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.

  1. Ändern Sie alle Vorkommen von 4000 und 2000 so, dass sie der entsprechenden Breite und Höhe Ihres Bildes in Pixeln entsprechen.
  2. Aktualisieren Sie PoseHeadingDegrees, wenn Ihre 360°-Fotos in Google Maps angezeigt werden können. Andernfalls können Sie diesen Parameter
  3. 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:

  1. muss das Tag "CutpedAreaImageWidthPixels" der tatsächlichen Bildbreite entsprechen.
  2. muss das Tag "cropedAreaImageHeightPixels" der tatsächlichen Bildhöhe entsprechen.
  3. Wenn Schritt 1 oder 2 fehlschlägt, prüfen Sie, ob das Seitenverhältnis des Bildes beibehalten wurde.
  4. 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.
  5. 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