Photo Sphere XMP メタデータ

ここで説明するパノラマ名前空間には、Android 4.2 カメラの Photo Sphere 機能により作成されるもののような、パノラマとも呼ばれる Photo Sphere の作成およびレンダリングに関する情報を提供するプロパティが含まれています。

メタデータは、Adobe XMP 標準 で説明されているように、Photo Sphere 内にシリアル化して埋め込む必要があります(このページの最後にあるリファレンスをご覧ください)。

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

メタデータ プロパティ

次の図と表は、Photo Sphere プロパティを示しています。 このメタデータを作成する開発者は、このドキュメントで後述するオイラー角規則に従ってください。

Photo Sphere を編集および表示する開発者は、このドキュメントで後述する説明に従って、メタデータを確認し、アップデートしてください。

名前 必須かどうか デフォルト値
(ビューアにより想定される)
プロパティの説明 画像が変更された場合に必要なアクション
GPano:UsePanoramaViewer Boolean 型 いいえ True この画像を通常の 2 次元画像としてではなく、Photo Sphere ビューアで表示するかどうか。 これは、ユーザーのプリファレンスに基づいて指定するか、スティッチング ソフトウェアにより指定できます。 画像を表示または取り込むアプリケーションは、これを無視するよう選択できます。 サイズ変更/切り取り:
変更なし。 視野が特定の値より小さくなる場合、アプリケーションによってこのプロパティが False に切り替えられることがあります。
GPano:CaptureSoftware 文字列 いいえ 該当せず Android 携帯端末などのモバイル端末のアプリケーションを使用して撮影が行われた場合の、使用されたアプリケーションの名前(「Photo Sphere」など)。 DSLR と三脚を使用するなど、ソース画像が手動で撮影されている場合は、このプロパティを空白のままにする必要があります。 該当せず
GPano:StitchingSoftware 文字列 いいえ 該当せず 最終的な Photo Sphere を作成するために使用されたソフトウェア。 これは、GPano:CaptureSoftware と同じ値であることがあります。 該当せず
GPano:ProjectionType 任意のテキスト はい

equirectangular

画像ファイルで使用される投影タイプ。 Google 製品では現在、equirectangular の値がサポートされています。 サイズ変更/切り取り:変更なし。
GPano:PoseHeadingDegrees 実数 いいえ。ただし、Google マップでの表示には必要。 該当せず 度数で示される、画像の中心のコンパスの向首方向。 値は 0 以上 360 以下である必要があります。 サイズ変更/切り取り:変更なし。
GPano:PosePitchDegrees 実数 いいえ 0 度数で示される、画像の中心のピッチ。 値は -90 以上 90 以下である必要があります。 サイズ変更/切り取り:変更なし。
GPano:PoseRollDegrees 実数 いいえ 0 水平に合わせた場合を 0 として、度数で示される画像のロール。値は > -180 かつ <= 180 にする必要があります。 サイズ変更/切り取り:変更なし。
GPano:InitialViewHeadingDegrees 整数 いいえ 0 度数で示される、初回ビューの向首角。 サイズ変更/切り取り:変更なし。
GPano:InitialViewPitchDegrees 整数 いいえ 0 度数で示される、初回ビューのピッチ角。 サイズ変更/切り取り:変更なし。
GPano:InitialViewRollDegrees 整数 いいえ 0 度数で示される、初回ビューのロール角。 サイズ変更/切り取り:変更なし。
GPano:InitialHorizontalFOVDegrees 実数 いいえ 該当せず ビューアで表示する必要がある、初回の水平方向の視野(度数)。 これはズームレベルに似ています。 該当せず
GPano:FirstPhotoDate 日付 いいえ 該当せず Photo Sphere で作成された最初の画像の日付と時刻。 サイズ変更/切り取り:変更なし。
GPano:LastPhotoDate 日付 いいえ 該当せず Photo Sphere で作成された最後の画像の日付と時刻。 サイズ変更/切り取り:変更なし。
GPano:SourcePhotosCount 整数 いいえ 該当せず Photo Sphere を作成するために使用されたソース画像の数。 サイズ変更/切り取り:変更なし。
GPano:ExposureLockUsed Boolean 型 いいえ 該当せず 個別のソース写真が撮影されたときに、カメラの露出設定がロックされていたかどうか。 該当せず
GPano:CroppedAreaImageWidthPixels 整数 はい 該当せず ピクセル単位で示される画像の元の幅(未編集の画像では、実際の画像の幅に等しい)。 サイズ変更/切り取り:このプロパティは、画像の新しいサイズを反映するためにアップデートする必要があります。
GPano:CroppedAreaImageHeightPixels 整数 はい 該当せず ピクセル単位で示される画像の元の高さ(未編集の画像では、実際の画像の高さに等しい)。 サイズ変更/切り取り:このプロパティは、画像の新しいサイズを反映するためにアップデートする必要があります。
GPano:FullPanoWidthPixels 整数 はい 該当せず 切り取られた画像の元となる画像全体の幅。 Photo Sphere の一部のみが取得された場合、これは完全な Photo Sphere であった場合の幅を示します。 切り取り:変更なし。
サイズ変更:このプロパティは、適宜サイズ変更する必要があります。
GPano:FullPanoHeightPixels 整数 はい 該当せず 切り取られた画像の元となる画像全体の高さ。 Photo Sphere の一部のみが取得された場合、これは完全な Photo Sphere であった場合の高さを示します。 切り取り:変更なし。
サイズ変更:このプロパティは、適宜サイズ変更する必要があります。
GPano:CroppedAreaLeftPixels 整数 はい 該当せず フルサイズの Photo Sphere から画像が切り取られた場合の、切り取られた画像左端の列。 切り取り:画像左端の切り取り部分が変更された場合は、この値をアップデートする必要があります。
切り取り:このプロパティは、適宜サイズ変更する必要があります。
GPano:CroppedAreaTopPixels 整数 はい 該当せず フルサイズの Photo Sphere から画像が切り取られた場合の、切り取られた画像上端の行。 切り取り:画像上端の切り取り部分が変更された場合は、この値をアップデートする必要があります。
サイズ変更:このプロパティは、適宜サイズ変更する必要があります。
GPano:InitialCameraDolly 実数 いいえ 0 この省略可能なパラメータは、仮想カメラ位置を視線に沿って Photo Sphere の中心から移動させます。 背面位置は値 -1.0 で表され、前面位置は 1.0 で表されます。通常の表示では、このパラメータは 0 に設定する必要があります。 該当せず

完全な Photo Sphere の例

プログラマー以外のユーザーは、次に示すメタデータの例を少し変更して、既存の完全な Photo Sphere (360 度 x 180 度)に追加できます。

これは、Adobe Photoshop などの画像編集製品で行うことができます。

  1. 4000 と 2000 をすべて、ご使用の画像の対応する幅と高さ(ピクセル単位)に変更します。
  2. 自分の Photo Sphere を Google マップで表示できるようにする場合は、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>

部分的な Photo Sphere の例

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

画像編集の堅牢性

堅牢性を確保するには、ビューアで Photo Sphere を表示するプログラムで、元の Photo Sphere がアプリケーションによってメタデータをアップデートせずにサイズ変更されていることを確認する必要があります。

これを行うには、次のステップを実行します。

  1. CroppedAreaImageWidthPixels タグが、実際の画像の幅に等しいことを確認します。
  2. CroppedAreaImageHeightPixels タグが、実際の画像の高さに等しいことを確認します。
  3. ステップ 1 または 2 を確認できなかった場合は、画像のアスペクト比が保持されていることを確認します。
  4. ステップ 3 を確認できなかった場合は、画像を Photo Sphere として表示しないでください。これは、画像が不適合な方法で変換されており、歪みを引き起こすためです。
  5. ステップ 3 を確認できた場合は、アスペクト比が等しいため、次の関連するタグ値すべてを新しい画像サイズに合わせて変更する必要があります。
    CroppedAreaImageWidthPixels、CroppedAreaImageHeightPixels、FullPanoWidthPixels、FullPanoHeightPixels、CroppedAreaLeftPixels、CroppedAreaRightPixels。

オイラー角の概要

世界フレームでの Photo Sphere の画面の向きは、オイラー角により定義されます。 オイラー角は、さまざまな方法で定義できます。 正確性を保つためには、プログラムはここで説明するオイラー角規則に厳密に従う必要があります。

地表面の上の位置は、固定の「ローカル フレーム」である XYZ を定義します。ここで Z は地表面に対して直角の上方向、X は真東、Y は真北を表します。

画面の向きは、この固定の「ローカル フレーム」に対して相対的に定義され、オイラー角は固定されたこれらの XYZ 軸の周りの回転です。

 したがって、姿勢の向きは極では定義されません。 つまり、角度が(0, 0, 0)の Photo Sphere は、中央のピクセルが真北を向き、Photo Sphere の赤道が地表面に平行になるように方向付けされます。

オイラー角は、(回転された)「Photo Sphere フレーム」内の点から、(固定の)「ローカル フレーム」内の点へのマッピングを提供します。


 
回転マトリックスは、オイラー角から次のように作成されます(この順序を守ることが重要です)。

R = R_Z(-heading) * R_X(pitch) * R_Y(roll)

説明:ここで、R_*(t) は指定された軸を中心とした時計回りの回転です。

    R_Z(angle) = [ cos(angle), -sin(angle),  0
                   sin(angle),  cos(angle),  0
                   0,       0,  1 ]
 
    R_X(angle) = [ 1,       0,      0,
                   0,  cos(angle), -sin(angle),
                   0,  sin(angle),  cos(angle) ]
 
    R_Y(angle) = [ cos(angle),  0,  sin(angle),
                   0,  1,       0,
                   -sin(angle),  0,  cos(angle) ]

and where: Z =また、Z = 上、X = 東、Y = 北です。

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

R = R_Z(-heading) * R_X(pitch) * R_Y(roll)

これは、回転は非可換であるためです。

向首角は標準のコンパスの向首角と同じであることに注意してください。

リファレンス

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