Metadata Photo Sphere XMP

Namespace panorama yang dijelaskan di sini berisi properti yang menyediakan informasi mengenai pembuatan dan rendering foto 360 ̊, juga kadang-kadang disebut sebagai panorama, seperti yang dibuat dengan fitur Photo Sphere dalam kamera Android 4.2. Tujuan metadata harus diserialisasi dan disematkan di dalam fotosfer sebagai dijelaskan oleh Adobe XMP standar (lihat referensi di bagian akhir halaman ini).

URI namespace adalah http://ns.google.com/photos/1.0/panorama/

Properti metadata

Diagram dan tabel di bawah ini menampilkan properti fotosfer yang dienkapsulasi oleh Parameter GPano. Ketika mengedit dan melihat foto 360 ̊, pastikan untuk memverifikasi, dan memperbarui metadata sebagaimana mestinya, sebagaimana dijelaskan nanti dalam dokumen ini. Saat menentukan isian pose dan judul awal, pastikan untuk mengikuti konvensi sudut Euler yang akan dibahas nanti dalam dokumen ini.

Perhatikan bahwa produk Google hanya mendukung proyeksi sferis. Proyeksi tambahan saat ini hanya didukung oleh pihak lain.

Proyeksi bola

Proyeksi silinder

Perhatikan bahwa jika bagian atas gambar silinder berada di atas cakrawala, CroppedAreaTopPixels harus negatif. Nilai 0 untuk CroppedAreaTopPixels akan menempatkan bagian atas gambar di cakrawala. Nilai positif CroppedAreaTopPixels menempatkan bagian atas gambar di bawah cakrawala.

Referensi parameter GPano

Nama Jenis Wajib Nilai default
(asumsi penonton)
Deskripsi properti Tindakan diperlukan jika gambar diubah
GPano:UsePanoramaViewer Boolean Tidak Benar Apakah akan menampilkan gambar ini dalam penampil foto 360 ̊ bukan sebagai gambar datar normal. Ini bisa ditetapkan berdasarkan preferensi pengguna atau oleh perangkat lunak perangkai. Aplikasi yang menampilkan atau menyerap gambar dapat memilih untuk mengabaikannya. skala/pangkas:
Tidak ada perubahan. Aplikasi dapat memutuskan untuk mengubahnya ke Salah (False) jika ruang pandang berada di bawah nilai tertentu.
GPano:CaptureSoftware String Tidak t/a Jika pengambilan gambar dilakukan menggunakan aplikasi di perangkat seluler, seperti ponsel Android, nama aplikasi yang digunakan (seperti “Photo Sphere”). Bidang ini harus dibiarkan kosong jika gambar sumber diambil secara manual, misalnya menggunakan DSLR pada tripod. t/a
GPano:StitchingSoftware String Tidak t/a Perangkat lunak yang digunakan untuk membuat photo sphere akhir. Nilai ini terkadang mungkin sama dengan nilai GPano:CaptureSoftware. t/a
GPano:ProjectionType Pilihan Teks Terbuka Ya

Equirectangular

Jenis proyeksi yang digunakan dalam file gambar. Produk Google saat ini hanya mendukung nilai equirectangular. skala/pangkas: Tidak ada perubahan.
GPano:PoseHeadingDegrees Real Tidak, tapi diperlukan untuk ditampilkan di Google Maps t/a Arah kompas, diukur dalam derajat searah jarum jam dari Utara, untuk bagian tengah gambar. Nilai harus >= 0 dan < 360. skala/pangkas: Tidak ada perubahan.
GPano:PosePitchDegrees Real Tidak 0 Pitch, diukur dalam derajat di atas cakrawala, untuk bagian tengah gambar. Nilai harus >= -90 dan <= 90. skala/pangkas: Tidak ada perubahan.
GPano:PoseRollDegrees Real Tidak 0 Rol gambar, diukur dalam derajat, dengan tinggi garis cakrawala 0. Ketika rol meningkat, cakrawala berputar berlawanan arah jarum jam pada gambar. Nilai harus > -180 dan <= 180. skala/pangkas: Tidak ada perubahan.
GPano:InitialViewHeadingDegrees Bilangan Bulat Tidak 0 Sudut arah tujuan tampilan awal dalam derajat searah jarum jam dari Utara dunia nyata, tidak relatif terhadap pusat panorama. skala/pangkas: Tidak ada perubahan.
GPano:InitialViewPitchDegrees Bilangan Bulat Tidak 0 Sudut pitch pada tampilan awal dalam derajat di atas cakrawala dunia nyata, tidak relatif terhadap pusat panorama. skala/pangkas: Tidak ada perubahan.
GPano:InitialViewRollDegrees Bilangan Bulat Tidak 0 Sudut lemparan tampilan awal dalam derajat yang sejajar dengan cakrawala dunia nyata adalah 0. Ketika rol meningkat, cakrawala berputar berlawanan arah jarum jam dalam tampilan. skala/pangkas: Tidak ada perubahan.
GPano:InitialHorizontalFOVDegrees Real Tidak t/a Ruang pandang horizontal awal yang harus ditampilkan penonton (dalam derajat). Hal ini serupa dengan tingkat zoom. t/a
GPano:InitialVerticalFOVDegrees Real Tidak t/a Ruang pandang vertikal awal yang harus ditampilkan penonton (dalam derajat). Hal ini serupa dengan tingkat zoom. Jika GPano:InitialHorizontalFOVDegrees dan GPano:InitialVerticalFOVDegrees ada, GPano:InitialHorizontalFOVDegrees akan diprioritaskan. Hanya gunakan InitialVerticalFOVDegrees jika konten Anda ditampilkan dalam beberapa rasio aspek, dan Anda ingin ruang pandang vertikal tetap konstan sementara ruang pandang horizontal dapat berubah. Produk Google saat ini tidak mendukung kolom ini. t/a
GPano:FirstPhotoDate Tanggal Tidak t/a Tanggal dan waktu gambar pertama yang dibuat dalam foto 360 ̊. skala/pangkas: Tidak ada perubahan.
GPano:LastPhotoDate Tanggal Tidak t/a Tanggal dan waktu gambar terakhir dibuat di foto 360°. skala/pangkas: Tidak ada perubahan.
GPano:SourcePhotosCount Bilangan Bulat Tidak t/a Jumlah gambar sumber yang digunakan untuk membuat foto 360 ̊. skala/pangkas: Tidak ada perubahan.
GPano:ExposureLockUsed Boolean Tidak t/a Saat foto sumber individual diambil, apakah setelan eksposur kamera dikunci atau tidak. t/a
GPano:CroppedAreaImageWidthPixels Bilangan Bulat Ya t/a Lebar asli dalam piksel gambar (sama dengan lebar gambar sebenarnya untuk gambar yang tidak diedit). Lihat diagram di atas. skala/pangkas: Properti ini perlu diperbarui untuk mencerminkan ukuran gambar yang baru.
GPano:CroppedAreaImageHeightPixels Bilangan Bulat Ya t/a Tinggi gambar asli dalam piksel gambar (sama dengan tinggi gambar sebenarnya untuk gambar yang tidak diedit). Lihat diagram di atas. skala/pangkas: Properti ini perlu diperbarui untuk mencerminkan ukuran gambar yang baru.
GPano:FullPanoWidthPixels Bilangan Bulat Ya t/a Lebar penuh asli yang digunakan untuk memangkas gambar. Jika hanya sebagian foto 360 ̊ yang ditangkap, ini akan menentukan lebar foto 360 ̊ penuh. Lihat diagram di atas. pangkas: Tidak ada perubahan.
skala: Ruang ini perlu diskalakan dengan benar.
GPano:FullPanoHeightPixels Bilangan Bulat Ya t/a Tinggi penuh asli tempat gambar dipangkas. Jika hanya sebagian foto 360 ̊ yang ditangkap, ini akan menentukan tinggi seharusnya foto 360 ̊ penuh. Lihat diagram di atas. pangkas: Tidak ada perubahan.
skala: Ruang ini perlu diskalakan dengan benar.
GPano:CroppedAreaLeftPixels Bilangan Bulat Ya t/a Kolom dengan tepi kiri gambar dipangkas dari photo sphere ukuran penuh. Lihat diagram di atas. pemangkasan: Jika pemangkasan kiri gambar diubah, nilai ini harus diperbarui.
skala: Ini perlu diskalakan dengan benar.
GPano:CroppedAreaTopPixels Bilangan Bulat Ya t/a Baris dengan tepi atas gambar dipangkas dari photo sphere ukuran penuh. Lihat diagram di atas. pemangkasan: Jika pemangkasan atas gambar diubah, nilai ini harus diperbarui.
skala: Ini perlu diskalakan dengan benar.
GPano:InitialCameraDolly Real Tidak 0 Parameter opsional ini memindahkan posisi kamera virtual di sepanjang garis pandang, dari tengah foto 360 ̊. Posisi permukaan belakang dinyatakan dengan nilai -1.0, sedangkan posisi permukaan depan dinyatakan dengan 1.0. Untuk tampilan normal, parameter ini harus disetel ke 0. t/a

Contoh photo sphere penuh

Non-programmer dapat menambahkan contoh metadata di bawah ini ke foto lengkap yang sudah ada bola (360 derajat x 180 derajat) dengan hanya sedikit perubahan. Hal ini bisa dilakukan dengan produk penyunting gambar, misalnya Adobe Photoshop.

  1. ubah frekuensi 4000 dan 2000 agar sesuai dengan lebar dan tinggi gambar Anda dalam piksel
  2. memperbarui PoseHeadingDegrees jika Anda ingin Google Maps dapat menampilkan photo sphere Anda; jika tidak, Anda dapat menghapus parameter ini
  3. memperbarui atau menghapus parameter opsional (seperti yang tercantum di atas)
<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>

Contoh foto 360 ̊ sebagian

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

Keandalan pengeditan gambar

Agar canggih, program yang menampilkan foto 360 ̊ di penampil harus memeriksa apakah photo sphere asli telah diskalakan oleh aplikasi tanpa memperbarui {i>metadata<i}. Ini bisa dilakukan dengan langkah berikut:

  1. pastikan tag CroppedAreaImageWidthPixels sama dengan lebar gambar yang sebenarnya
  2. memastikan tag CroppedAreaImageHeightPixels sama dengan tinggi gambar yang sebenarnya
  3. jika langkah 1 atau 2 gagal, periksa apakah rasio aspek gambar telah dipertahankan
  4. jika langkah 3 gagal, jangan tampilkan gambar sebagai photo sphere karena telah ditransformasi dengan cara yang tidak kompatibel sehingga akan menimbulkan distorsi yang buruk
  5. jika langkah 3 berhasil, rasio aspeknya akan sama dan semua nilai tag terkait berikut harus diskalakan agar sesuai dengan ukuran gambar baru:
    PikselGambarAreayang Dipangkas,PikselAreayang Dipangkas,Piksel Panorama LebarPiksel, Piksel Panorama PenuhPiksel, Piksel yang Dipangkas,Piksel Kiri,AreaPiksel yang Dipangkas.

Ringkasan Sudut Euler

Orientasi fotosfer dalam bingkai dunia didefinisikan oleh Euler sudut. Sudut Euler bisa didefinisikan dengan banyak cara. Agar benar, program harus benar-benar mengikuti konvensi sudut Euler yang dijelaskan di sini.

Posisi di atas permukaan bumi menentukan bingkai" XYZ, di mana Z berada di atas dan ortogonal dengan permukaan bumi, X adalah timur sebenarnya, dan Y adalah utara sejati. Orientasi ditetapkan sesuai dengan "bingkai lokal" tetap, dan sudut Euler adalah rotasi di sekitar sumbu XYZ tetap. Oleh karena itu, orientasi pose tidak terdefinisi pada kutub. Ini berarti bahwa fotosfer dengan sudut-sudut (0, 0, 0) akan diorientasikan sedemikian rupa sehingga sisi piksel tengah menghadap ke utara dengan khatulistiwa fotosfer yang sejajar dengan di permukaan bumi.

Sudut Euler memberikan pemetaan dari titik-titik dalam "foto yang (diputar) bingkai bola" ke titik dalam "frame lokal" (tetap):
 
Matriks rotasi dibuat dari sudut Euler sebagai berikut (penting untuk mempertahankan urutan ini):

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

di mana: R_*(t) adalah rotasi tangan kanan di sekitar sumbu yang dinamai:











dan di mana: Z = Atas, X = Timur, Y = Utara.

Penting untuk mempertahankan pengurutan ini:

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

karena rotasi tidak bersifat komutatif.

Perhatikan bahwa sudut arah tujuan sama dengan arah kompas standar.

Referensi

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