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.
- zmień wszystkie wystąpienia 4000 i 2000, aby dopasować je do odpowiedniej szerokości i wysokości obrazu w pikselach
- 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,
- 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ć:
- upewnij się, że tag CroppedAreaImageWidthPixels jest równa rzeczywistej szerokości obrazu
- upewnij się, że tag CroppedAreaImageHeightPixels jest równy rzeczywistej wysokości obrazu;
- jeśli krok 1 lub 2 nie powiedzie się, sprawdź, czy format obrazu został zachowany
- 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ę
- 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