360°写真の XMP メタデータ

ここで説明するパノラマの名前空間には、 360°写真の作成とレンダリングに関する情報も 「パノラマ」と呼ばれることもあります。 Android 4.2 カメラの 360°写真機能によって作成された写真「 メタデータをシリアル化し、次のように 360°写真内に埋め込む必要があります。 が Adobe XMP 標準仕様(このページの最後にある参照資料を参照)

名前空間 URI は http://ns.google.com/photos/1.0/panorama/ です。

メタデータのプロパティ

下の図と表は、360° パノラマ写真のプロパティを GPano パラメータ360°写真を編集、表示する際は、 メタデータを検証、更新することもできます。これについては、このドキュメントで後述します。 ポーズと最初の見出しフィールドを指定するときは、 オイラー角の規則については、このモジュールの ご覧ください。

なお、Google プロダクトは球面投影のみをサポートしています。 その他の予測は現在、他社のみがサポートしています。

球面投影

円柱投影

円柱画像の最上部が水平線より上にある場合、 CroppedAreaTopPixels は負の値で指定してください。CroppedAreaTopPixels の値は 0 です。 水平線上に画像の上端が配置されます。正の値: CroppedAreaTopPixels は、画像の上端を水平線の下に配置します。

GPano パラメータのリファレンス

名前 タイプ 必須 デフォルト値
(閲覧者を想定)
プロパティの説明 画像が変更された場合は対応が必要です
GPano:UsePanoramaViewer ブール値 いいえ 正しい この画像を通常のフラット画像ではなく、360°写真ビューアで表示するかどうかを指定します。これは、ユーザー設定に基づいて、または合成ソフトウェアによって指定できます。画像を表示または取り込むアプリケーションは、これを無視することもできます。 縮尺/切り抜き:
変更なし。視野が一定の値を下回った場合、アプリケーションはこれを False に切り替えることがあります。
GPano:CaptureSoftware 文字列 いいえ なし モバイル デバイスのアプリ(Android スマートフォンなど)を使用して撮影が行われた場合は、使用されたアプリの名前(「360°写真」など)。DSLR を三脚に取り付けるなどして、ソース画像が手動でキャプチャされた場合は、空白のままにします。 なし
GPano:StitchingSoftware 文字列 いいえ なし 最終的な 360°写真の作成に使用されたソフトウェア。GPano:CaptureSoftware と同じ値である場合もあります。 なし
GPano:ProjectionType 自由回答

正距円筒図法

画像ファイルで使用される投影タイプ。現在、Google プロダクトでは equirectangular の値のみがサポートされています。 縮尺/切り抜き: 変更なし。
GPano:PoseHeadingDegrees 実際 ×(Google マップでの表示には必須) なし 画像の中心のコンパスの向き。北からの時計回りの角度で示されます。0 以上の値を指定してください360。 縮尺/切り抜き: 変更なし。
GPano:PosePitchDegrees 実際 いいえ 0 画像の中心のピッチ。地平線からの角度で表します。値は -90 以上 90 以下にする必要があります。 縮尺/切り抜き: 変更なし。
GPano:PoseRollDegrees 実際 いいえ 0 水平方向のレベルを 0 として、画像のロール(度数)。ロールが増えると、水平線が画像内で反時計回りに回転します。> の値にする必要があります-180 ~ 180 の範囲で指定する必要があります。 縮尺/切り抜き: 変更なし。
GPano:InitialViewHeadingDegrees Integer いいえ 0 最初のビューの向きの角度(パノラマの中心からの相対角度ではなく、現実世界の北からの時計回りの角度)。 縮尺/切り抜き: 変更なし。
GPano:InitialViewPitchDegrees Integer いいえ 0 初期ビューのピッチ角度。パノラマの中心からの相対角度ではなく、現実世界の地平線からの角度。 縮尺/切り抜き: 変更なし。
GPano:InitialViewRollDegrees Integer いいえ 0 最初のビューのロール角(度)。実世界のホライズンとの水準が 0 です。ロールが増えると、水平線がビュー内で反時計回りに回転します。 縮尺/切り抜き: 変更なし。
GPano:InitialHorizontalFOVDegrees 実際 いいえ なし ビューアに表示する最初の水平画角(度数)。これはズームレベルに似ています。 なし
GPano:InitialVerticalFOVDegrees 実際 いいえ なし ビューアが最初に表示する垂直画角(度数)。これはズームレベルに似ています。GPano:InitialHorizontalFOVDegrees と GPano:InitialVerticalFOVDegrees の両方が指定されている場合、GPano:InitialHorizontalFOVDegrees が優先されます。InitialVerticalFOVDegrees は、コンテンツが複数のアスペクト比で表示され、水平の視野角が変化しても垂直の視野角を一定にしたい場合のみ使用します。現在、Google サービスはこのフィールドをサポートしていません。 なし
GPano:FirstPhotoDate 日付 いいえ なし 360°写真で作成された最初の画像の日時。 縮尺/切り抜き: 変更なし。
GPano:LastPhotoDate 日付 いいえ なし 360°写真で作成された最後の画像の日時。 縮尺/切り抜き: 変更なし。
GPano:SourcePhotosCount Integer いいえ なし 360°写真の作成に使用されたソース画像の数。 縮尺/切り抜き: 変更なし。
GPano:ExposureLockUsed ブール値 いいえ なし 個々のソース写真をキャプチャしたときに、カメラの露出設定がロックされていたかどうか。 なし
GPano:CroppedAreaImageWidthPixels Integer なし 画像の元の幅(ピクセル単位)。未編集の画像の場合は、実際の画像の幅に等しくなります。上の図を参照してください。 縮尺/切り抜き: このプロパティは、画像の新しいサイズを反映するように更新する必要があります。
GPano:CroppedAreaImageHeightPixels Integer なし 画像の元の高さ(ピクセル単位)。未編集の画像の場合は、実際の画像の高さに等しくなります。上の図を参照してください。 縮尺/切り抜き: このプロパティは、画像の新しいサイズを反映するように更新する必要があります。
GPano:FullPanoWidthPixels Integer なし 切り抜かれた画像の元の全幅。360°写真の一部のみがキャプチャされた場合、これは 360°写真全体である場合の幅を指定します。上の図を参照してください。 切り抜き: 変更なし。
縮尺: 適宜調整する必要があります。
GPano:FullPanoHeightPixels Integer なし 切り抜かれた画像の元の全体の高さ。360°写真の一部のみがキャプチャされた場合に、完全な 360°写真である場合の高さを指定します。上の図を参照してください。 切り抜き: 変更なし。
縮尺: 適宜調整する必要があります。
GPano:CroppedAreaLeftPixels Integer なし フルサイズの 360°写真から画像の左端を切り抜いた列。上の図を参照してください。 切り抜き: 画像の左の切り抜きが変更された場合、この値を更新する必要があります。
縮尺: これに合わせて適切に拡大縮小する必要があります。
GPano:CroppedAreaTopPixels Integer なし フルサイズの 360°写真から画像の上端を切り抜いた行。上の図を参照してください。 切り抜き: 画像の上部切り抜きが変更された場合、この値を更新する必要があります。
縮尺: 適切に拡大縮小する必要があります。
GPano:InitialCameraDolly 実際 いいえ 0 このオプション パラメータを使用すると、仮想カメラの位置を 360°写真の中心から見通しに沿って移動させることができます。背面の位置は値 -1.0、前面の位置は 1.0 で表されます。通常表示の場合、このパラメータは 0 に設定する必要があります。 なし

完全な 360°写真の例

プログラマーでなくても、以下のメタデータの例を既存の完全な写真に追加できます。 わずかに修正しただけの球体(360 度 x 180 度) これは、Adobe Photoshop などの画像編集製品で行うことができます。

  1. 4000 と 2000 を、画像の対応する幅と高さ(ピクセル単位)に変更します。
  2. Google マップで 360°写真を表示できるようにするには、PoseHeadingDegrees を更新します。それ以外の場合は、このパラメータを必要に応じて削除できます。
  3. オプションのパラメータを更新または削除(上記のリストを参照)
<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>

部分的な 360°写真の例

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

画像編集に対する堅牢性

堅牢性を確保するために、ビューアに 360°写真を表示するプログラムでは、 元の 360°写真が、アプリケーションによって 提供します。これを行うには、次のステップを実行します。

  1. CroppedAreaImageWidthPixels タグが実際の画像の幅と等しいことを確認します。
  2. CroppedAreaImageHeightPixels タグが実際の画像の高さと等しいことを確認してください
  3. ステップ 1 または 2 で失敗した場合は、画像のアスペクト比が維持されているかどうかを確認します。
  4. ステップ 3 に失敗した場合は、画像が 360°写真として表示されないようにしてください。不適切な方法で変換されているため、ひどい歪みが生じます。
  5. ステップ 3 で問題がなければ、アスペクト比は同等です。次の関連するタグ値はすべて、新しい画像サイズに合わせてスケーリングする必要があります。
    CroppedAreaImageWidthPixels、CroppedAreaImageHeightPixels、FullPanoWidthPixels、FullPanoHeightPixels、CroppedAreaLeftPixels、CroppedAreaRightPixels のピクセルを紹介します。

オイラー角の概要

世界フレームにおける 360°写真の向きはオイラーによって定義される 角度です。オイラー角はさまざまな方法で定義できます。正確には、プログラムは、 ここで説明するオイラー角の規則に従います。

地表面の上の位置により、固定された「局所的な」 フレーム」XYZ(Z は地表に直交する方向、X は 真東が真北です画面の向きは、この位置を基準として 固定された「ローカル フレーム」であり、オイラー角はこれらの 固定 XYZ 軸。そのため、極では姿勢の向きが定義されません。この 角度 (0, 0, 0) の 360°写真であれば、 中央のピクセルは真北を向いており、360°写真の赤道と平行 自動的にスケールします。

オイラー角は、(回転した)写真内の点からのマッピングを提供します。 球のフレーム"(固定された)「ローカル フレーム」内のポイントを指すようにします。
 
回転行列は、オイラー角から (この順序を維持することが重要です)。

R = R_Z(方位)× R_X(ピッチ)× R_Y(ロール)

ここで、R_*(t) は指定された軸を中心とする右回りの回転です。











Z = 上、X = 東、Y = 北です。

この順序を維持することが重要です。

R = R_Z(方位)× R_X(ピッチ)× R_Y(ロール)

回転は可換ではないためです。

方角は、標準のコンパス方角と同じです。

参照

Adobe XMP 標準: http://www.adobe.com/devnet/xmp.html