Metadane zdjęć sferycznych XMP

Opisana tutaj przestrzeń nazw panoramy zawiera właściwości, które zapewniają informacje na temat tworzenia i renderowania zdjęć sferycznych, a także i czasami nazywane panoramami, utworzone za pomocą funkcji Photo Sphere w aparacie z Androidem 4.2. powinny zostać zserializowane i umieszczone wewnątrz zdjęcia sferycznego jako opisane przez Adobe XMP. (patrz źródła informacji na końcu tej strony).

Identyfikator URI przestrzeni nazw to http://ns.google.com/photos/1.0/panorama/

Właściwości metadanych

Na diagramach i w tabeli poniżej przedstawiono właściwości zdjęć sferycznych zawarte w obrazach sferycznych Parametry GPano. Podczas edytowania i wyświetlania zdjęć sferycznych odpowiednio zweryfikować i zaktualizować metadane, co opisano w dalszej części tego dokumentu. Określając pola pozycji i początkowego nagłówka, pamiętaj o przestrzeganiu konwencje kątów Eulera omówione w dalszej części artykułu ten dokument.

Pamiętaj, że usługi Google obsługują tylko rzutowanie sferyczne. Dodatkowe prognozy są obecnie obsługiwane tylko przez inne podmioty.

Odwzorowania sferyczne

Odwzorowanie walcowe walcowe

Pamiętaj, że jeśli góra obrazu walcowego znajduje się powyżej horyzontu, Wartość CroppedAreaTopPixels musi być ujemna. Wartość 0 w przypadku CroppedAreaTopPixels spowoduje umieszczenie obrazu na horyzoncie. Wartość dodatnia Skrót CroppedAreaTopPixels umieszcza górną część zdjęcia poniżej horyzontu.

Odniesienie do parametrów GPano

Nazwa Typ Wymagane Wartość domyślna
(przypuszczalne przez widza)
Opis właściwości Wymagane działanie w przypadku zmodyfikowania obrazu
GPano:UsePanoramaViewer Wartość logiczna Nie Prawda Określa, czy obraz ma być wyświetlany w przeglądarce zdjęć sferycznych, a nie jako zwykły płaski obraz. Można to określić na podstawie preferencji użytkownika lub przez oprogramowanie do łączenia zdjęć. Aplikacja wyświetlająca lub przetwarzająca obraz może to zignorować. skala/przycięcie:
bez zmian. Aplikacja może zmienić to ustawienie na Fałsz, jeśli pole widzenia spadnie poniżej określonej wartości.
GPano:CaptureSoftware Ciąg znaków Nie nie dotyczy Jeśli zdjęcie zostało zrobione przy użyciu aplikacji na urządzeniu mobilnym, np. telefonu z Androidem, jest to nazwa użytej aplikacji (np. „Zdjęcie sferyczne”). To pole należy pozostawić puste, jeśli zdjęcia źródłowe zostały wykonane ręcznie, np. przy użyciu lustrzanki cyfrowej na statywie. nie dotyczy
GPano:StitchingSoftware Ciąg znaków Nie nie dotyczy Oprogramowanie, które posłużyło do utworzenia ostatecznego zdjęcia sferycznego. Może ona być czasami taka sama jak w polu GPano:Capture Software. nie dotyczy
GPano:ProjectionType Otwórz wybór tekstu Tak

walcowy równoodległościowy

Typ projekcji użyty w pliku obrazu. Usługi Google obsługują obecnie tylko wartość walcową równoodległościową. skala/przycięcie: bez zmian.
GPano:PoseHeadingDegrees Prawdziwe Nie, ale jest wymagany do wyświetlania w Mapach Google nie dotyczy Nagłówek kompasu, mierzony w stopniach od północy zgodnie z ruchem wskazówek zegara, oznaczający środek zdjęcia. Wartości muszą mieścić się w zakresie >= 0 i < 360. skala/przycięcie: bez zmian.
GPano:PosePitchDegrees Prawdziwe Nie 0 Wysokość punktu, mierzona w stopniach powyżej horyzontu, dotycząca środka obrazu. Wartość musi mieścić się w przedziale od –90 do <= 90. skala/przycięcie: bez zmian.
GPano:PoseRollDegrees Prawdziwe Nie 0 Obrót (mierzony w stopniach) obrazu, gdy poziom krawędzi horyzontu wynosi 0. W miarę jak horyzont rośnie, horyzont obraca się na zdjęciu w lewo. Wartość musi być większa niż -180 i <= 180. skala/przycięcie: bez zmian.
GPano:InitialViewHeadingDegrees Liczba całkowita Nie 0 Kąt kierunku początkowego widoku wyrażony w stopniach w kierunku zgodnym z ruchem wskazówek zegara, względem rzeczywistej północy, a nie względem środka panoramy. skala/przycięcie: bez zmian.
GPano:InitialViewPitchDegrees Liczba całkowita Nie 0 Kąt nachylenia początkowego widoku wyrażony w stopniach powyżej horyzontu rzeczywistego, a nie w odniesieniu do środka panoramy. skala/przycięcie: bez zmian.
GPano:InitialViewRollDegrees Liczba całkowita Nie 0 Kąt obrotu widoku początkowego w stopniach, przy którym poziom do rzeczywistego horyzontu wynosi 0. W miarę jak horyzont obraca się w kierunku przeciwnym do ruchu wskazówek zegara, horyzont obraca się w kierunku przeciwnym do ruchu wskazówek zegara. skala/przycięcie: bez zmian.
GPano:InitialHorizontalFOVDegrees Prawdziwe Nie nie dotyczy Początkowe poziome pole widzenia, które użytkownik powinien wyświetlić (w stopniach). Przypomina to poziom powiększenia. nie dotyczy
GPano:InitialVerticalFOVDegrees Prawdziwe Nie nie dotyczy Początkowe pionowe pole widzenia, które powinien wyświetlić użytkownik (w stopniach). Przypomina to poziom powiększenia. Jeśli obecne są zarówno wartości GPano:InitialLevelFOVDe tworzones, a także GPano:InitialVerticalFOVDecites, ustawienie ma pierwszeństwo. Wartości pola Początkowej odległości w pionie należy użyć tylko wtedy, gdy materiały mają być wyświetlane w różnych formatach obrazu i wolisz, aby pionowe pole widzenia pozostawało stałe, a poziome pole może się zmieniać. Usługi Google obecnie nie obsługują tego pola. nie dotyczy
GPano:FirstPhotoDate Data Nie nie dotyczy Data i godzina utworzenia pierwszego zdjęcia sferycznego. skala/przycięcie: bez zmian.
GPano:LastPhotoDate Data Nie nie dotyczy Data i godzina utworzenia ostatniego zdjęcia sferycznego. skala/przycięcie: bez zmian.
GPano:SourcePhotosCount Liczba całkowita Nie nie dotyczy Liczba obrazów źródłowych użytych do utworzenia zdjęcia sferycznego. skala/przycięcie: bez zmian.
GPano:ExposureLockUsed Wartość logiczna Nie nie dotyczy Informacje o tym, czy ustawienie ekspozycji aparatu zostało zablokowane, czy nie podczas robienia poszczególnych zdjęć źródłowych. nie dotyczy
GPano:CroppedAreaImageWidthPixels Liczba całkowita Tak nie dotyczy Oryginalna szerokość obrazu w pikselach (równa rzeczywistej szerokości nieedytowanych obrazów). Zobacz wykresy powyżej. skala/przycięcie: ta właściwość wymaga zaktualizowania pod kątem nowego rozmiaru obrazu.
GPano:CroppedAreaImageHeightPixels Liczba całkowita Tak nie dotyczy Oryginalna wysokość obrazu w pikselach (równa rzeczywistej wysokości obrazu w przypadku nieedytowanych obrazów). Zobacz wykresy powyżej. skala/przycięcie: ta właściwość wymaga zaktualizowania pod kątem nowego rozmiaru obrazu.
GPano:FullPanoWidthPixels Liczba całkowita Tak nie dotyczy Oryginalna pełna szerokość, z której obraz został przycięty. Jeśli zrobione zostało tylko częściowe zdjęcie sferyczne, ta wartość określa szerokość całego zdjęcia sferycznego. Zobacz wykresy powyżej. przycięcie: bez zmian.
Skala: wymaga odpowiedniej przeskalowania.
GPano:FullPanoHeightPixels Liczba całkowita Tak nie dotyczy Oryginalna pełna wysokość, z której obraz został przycięty. Jeśli zrobione zostało tylko częściowe zdjęcie sferyczne, ta wartość określa wysokość całego zdjęcia sferycznego. Zobacz wykresy powyżej. przycięcie: bez zmian.
Skala: wymaga odpowiedniej przeskalowania.
GPano:CroppedAreaLeftPixels Liczba całkowita Tak nie dotyczy Kolumna, w której lewa krawędź obrazu została przycięta ze zdjęcia sferycznego w pełnym rozmiarze. Zobacz wykresy powyżej. crop: jeśli lewe przycięcie obrazu ulegnie zmianie, należy zaktualizować tę wartość.
Skala: należy odpowiednio dostosować rozmiar.
GPano:CroppedAreaTopPixels Liczba całkowita Tak nie dotyczy Wiersz, w którym górna krawędź obrazu została przycięta ze zdjęcia sferycznego w pełnym rozmiarze. Zobacz wykresy powyżej. crop: jeśli zmieni się górne przycięcie obrazu, należy zaktualizować tę wartość.
Skala: należy odpowiednio dostosować rozmiar.
GPano:InitialCameraDolly Prawdziwe Nie 0 Ten opcjonalny parametr przesuwa pozycję kamery wirtualnej wzdłuż linii wzroku od środka zdjęcia sferycznego. Położenie tylnej powierzchni jest wyrażone wartością -1,0, a położenie przedniej powierzchni – 1,0. Przy normalnym wyświetlaniu ten parametr powinien mieć wartość 0. nie dotyczy

Przykład pełnego zdjęcia sferycznego

Osoby niebędące programistami mogą dodać do swojego pełnego zdjęcia widoczne poniżej metadane (360° x 180 stopni) z niewielkimi zmianami. Można to zrobić w programach do edycji obrazów, takich jak Adobe Photoshop.

  1. zmień wszystkie wystąpienia 4000 i 2000, aby dopasować je do odpowiedniej szerokości i wysokości obrazu w pikselach
  2. zaktualizuj PoseHeadingDegrads, jeśli chcesz, by Mapy Google mogły wyświetlać Twoje zdjęcie sferyczne; w przeciwnym razie możesz opcjonalnie usunąć ten parametr,
  3. zaktualizowanie lub usunięcie parametrów opcjonalnych (jak opisano powyżej)
<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>

Przykład częściowego zdjęcia sferycznego

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

Niezawodność edytowania obrazów

Aby wszystko działało jak najdokładniej, programy wyświetlające zdjęcia sferyczne w przeglądarce powinny oryginalne zdjęcie sferyczne zostało przeskalowane przez aplikację bez aktualizowania metadanych. Aby to zrobić:

  1. upewnij się, że tag CroppedAreaImageWidthPixels jest równa rzeczywistej szerokości obrazu
  2. upewnij się, że tag CroppedAreaImageHeightPixels jest równy rzeczywistej wysokości obrazu;
  3. jeśli krok 1 lub 2 nie powiedzie się, sprawdź, czy format obrazu został zachowany
  4. Jeśli krok 3 nie powiedzie się, nie wyświetlaj zdjęcia jako zdjęcia sferycznego, ponieważ zostało ono przekształcone w niekompatybilny sposób, co spowoduje pojawienie się
  5. jeśli krok 3 zostanie zaliczony, współczynnik proporcji będzie równoważny i wszystkie następujące powiązane wartości tagów należy przeskalować, aby pasowały do nowego rozmiaru obrazu:
    CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, CroppedAreaLeftPixels, CroppedAreaRightPixels.

Omówienie kątów Eulera

Orientację zdjęcia sferycznego w ramce świata jest określana przez Eulera pod kątem różnych kątów. Kąty Eulera można zdefiniować na wiele sposobów. Aby mieć pewność, że program jest słuszny, zgodnie z podanymi tutaj konwencjami kątów Eulera.

Położenie nad powierzchnią Ziemi określa stały „lokalny”, ramki” XYZ, gdzie Z jest w górę i ortogonalne do powierzchni Ziemi, X to prawdziwy wschód, a Y to północ, Orientacja jest zdefiniowana w odniesieniu do tego stała „lokalna klatka”, a kąty Eulera to obroty wokół tych o stałej osi XYZ. Orientacja pozycji jest więc nieokreślona na biegunach. Ten oznacza, że zdjęcie sferyczne o kątach (0, 0, 0) zostanie zorientowane w taki sposób, środkowe płaszczyzny piksela skierowane na północ do równika zdjęcia sferycznego, równolegle do na powierzchni Ziemi.

Kąty Eulera umożliwiają przyporządkowanie punktów na (obróconym) „zdjęciu” ramki sferycznej" do punktów w (stałej) „ramce lokalnej”:
 
Macierz obrotu jest zbudowana z kątów Eulera jako następujące (ważne jest zachowanie tej kolejności):

R = R_Z(-nagłówek) * R_X(pitch) * R_Y(rola)

gdzie: R_*(t) oznacza obrót praworęczny wokół nazwanej osi:











gdzie: Z = wyżej, X = wschód, Y = północ.

Ważne jest zachowanie tej kolejności:

R = R_Z(-nagłówek) * R_X(pitch) * R_Y(rola)

, bo rotacje nie są przemienne.

Pamiętaj, że kąt nagłówka jest taki sam jak w przypadku standardowego nagłówka kompasu.

Pliki referencyjne

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