O namespace do panorama descrito aqui contém propriedades que fornecem informações sobre a criação e a renderização de esferas fotográficas, também chamados de panoramas, aqueles criados pelo recurso Photo Sphere da câmera do Android 4.2. A metadados devem ser serializados e incorporados na esfera fotográfica como descritos pelo Adobe XMP padrão (consulte as referências no final desta página).
O URI do namespace é http://ns.google.com/photos/1.0/panorama/
Propriedades de metadados
Os diagramas e a tabela abaixo mostram as propriedades de esferas fotográficas encapsuladas por os parâmetros GPano. Ao editar e visualizar as panorâmicas 360°, não se esqueça de verificar e atualizar os metadados adequadamente, conforme descrito posteriormente neste documento. Ao especificar os campos de pose e cabeçalho iniciais, certifique-se de seguir as convenções do ângulo de Euler discutidas mais adiante este documento.
Os produtos do Google são compatíveis apenas com projeções esféricas. No momento, as projeções adicionais são aceitas apenas por terceiros.
Projeções esféricas
Projeções cilíndricas
Se o topo de uma imagem cilíndrica estiver acima do horizonte, CroppedAreaTopPixels precisa ser negativo. Um valor de 0 para CroppedAreaTopPixels vai colocar a parte superior da imagem no horizonte. Um valor positivo de CroppedAreaTopPixels posiciona a parte superior da imagem abaixo do horizonte.
Referência de parâmetro GPano
Nome | Tipo | Obrigatório | Valor padrão (Espectador assumido) |
Descrição da propriedade | Ação necessária se a imagem for modificada |
---|---|---|---|---|---|
GPano:UsePanoramaViewer | Booleano | Não | Verdadeiro | Indica se esta imagem será exibida em um visualizador de photo sphere em vez de como uma imagem plana normal. Pode ser especificado com base nas preferências do usuário ou pelo software de montagem. O aplicativo que exibe ou ingere a imagem pode optar por ignorar isso. | dimensionamento/corte: Nenhuma alteração. Um aplicativo pode decidir mudar para False se o campo de visão estiver abaixo de um determinado valor. |
GPano:CaptureSoftware | String | Não | N/A | Se a captura foi feita com um aplicativo em um dispositivo móvel, como um smartphone Android, informe o nome do aplicativo usado (como "Photo Sphere"). Este campo deve ser deixado em branco se as imagens de origem forem capturadas manualmente, como com o uso de uma DSLR em um tripé. | N/A |
GPano:StitchingSoftware | String | Não | N/A | O software usado para criar a foto esférica final. Às vezes, ele pode ter o mesmo valor de GPano:CaptureSoftware. | N/A |
GPano:ProjectionType | Abrir opção de texto | Sim |
equirretangular |
Tipo de projeção usado no arquivo de imagem. No momento, os produtos do Google só são compatíveis com o valor equirretangular. | dimensionamento/corte: nenhuma alteração. |
GPano:PoseHeadingDegrees | Real | Não, mas é necessário para exibição no Google Maps | N/A | Orientação da bússola, medida em graus no sentido horário a partir do Norte, para o centro da imagem. O valor precisa ser maior ou igual a 0 e menor 360 | dimensionamento/corte: nenhuma alteração. |
GPano:PosePitchDegrees | Real | Não | 0 | Inclinação, medida em graus acima do horizonte, para o centro da imagem. O valor precisa ser maior ou igual a -90 e menor ou igual a 90. | dimensionamento/corte: nenhuma alteração. |
GPano:PoseRollDegrees | Real | Não | 0 | Rolagem, medida em graus, da imagem em que o nivelamento com o horizonte é 0. Conforme a rolagem aumenta, o horizonte gira no sentido anti-horário na imagem. O valor precisa ser maior que -180 e <= 180. | dimensionamento/corte: nenhuma alteração. |
GPano:InitialViewHeadingDegrees | Número inteiro | Não | 0 | O ângulo de direção da visualização inicial em graus no sentido horário a partir do norte do mundo real, não relativo ao centro do panorama. | dimensionamento/corte: nenhuma alteração. |
GPano:InitialViewPitchDegrees | Número inteiro | Não | 0 | O ângulo de inclinação da visualização inicial em graus acima do horizonte do mundo real, não relativo ao centro do panorama. | dimensionamento/corte: nenhuma alteração. |
GPano:InitialViewRollDegrees | Número inteiro | Não | 0 | O ângulo de rolagem da visualização inicial em graus, em que o nível com o horizonte do mundo real é 0. Conforme a rolagem aumenta, o horizonte gira no sentido anti-horário na visualização. | dimensionamento/corte: nenhuma alteração. |
GPano:InitialHorizontalFOVDegrees | Real | Não | N/A | O campo de visão horizontal inicial que o visualizador deve exibir (em graus). Isso é semelhante a um nível de zoom. | N/A |
GPano:InitialVerticalFOVDegrees | Real | Não | N/A | O campo de visão vertical inicial que o visualizador deve exibir (em graus). Isso é semelhante a um nível de zoom. Se GPano:InitialHorizontalFOVdegrees e GPano:InitialVerticalFOVdegrees estiverem presentes, GPano:InitialHorizontalFOVdegrees terá precedência. Use apenas InitialVerticalFOVdegrees se o conteúdo for exibido em várias proporções e você preferir que o campo de visão vertical permaneça constante enquanto o campo de visão horizontal for alterado. No momento, os produtos do Google não oferecem suporte a esse campo. | N/A |
GPano:FirstPhotoDate | Data | Não | N/A | Data e hora da primeira imagem criada na esfera fotográfica. | dimensionamento/corte: nenhuma alteração. |
GPano:LastPhotoDate | Data | Não | N/A | Data e hora da última imagem criada na esfera fotográfica. | dimensionamento/corte: nenhuma alteração. |
GPano:SourcePhotosCount | Número inteiro | Não | N/A | Número de imagens de origem usadas para criar a Photo Sphere. | dimensionamento/corte: nenhuma alteração. |
GPano:ExposureLockUsed | Booleano | Não | N/A | quando as fotografias de origem individuais foram capturadas, independentemente de a configuração de exposição da câmera estar definida ou não. | N/A |
GPano:CroppedAreaImageWidthPixels | Número inteiro | Sim | N/A | Largura original em pixels da imagem (igual à largura da imagem real em imagens não editadas). Veja os diagramas acima. | dimensionar/cortar: essa propriedade precisa ser atualizada para refletir o novo tamanho da imagem. |
GPano:CroppedAreaImageHeightPixels | Número inteiro | Sim | N/A | A altura original em pixels da imagem (igual à altura da imagem real para imagens não editadas). Veja os diagramas acima. | dimensionar/cortar: essa propriedade precisa ser atualizada para refletir o novo tamanho da imagem. |
GPano:FullPanoWidthPixels | Número inteiro | Sim | N/A | Largura total original a partir da qual a imagem foi cortada. Se apenas uma esfera fotográfica parcial tiver sido capturada, esse campo especifica a largura total que a esfera fotográfica completa teria. Veja os diagramas acima. | cortar: sem alterações. redimensionar: precisa ser dimensionado adequadamente. |
GPano:FullPanoHeightPixels | Número inteiro | Sim | N/A | Altura original total a partir da qual a imagem foi cortada. Se apenas uma esfera fotográfica parcial tiver sido capturada, esse campo especifica a altura total que a esfera fotográfica completa teria. Veja os diagramas acima. | cortar: sem alterações. redimensionar: precisa ser dimensionado adequadamente. |
GPano:CroppedAreaLeftPixels | Número inteiro | Sim | N/A | Coluna onde a borda esquerda da imagem foi cortada a partir da foto esférica de tamanho original. Veja os diagramas acima. | crop: se o corte esquerdo da imagem for alterado, esse valor precisará ser atualizado. redimensionar: precisa ser dimensionado corretamente. |
GPano:CroppedAreaTopPixels | Número inteiro | Sim | N/A | Linha em que a borda superior da imagem foi cortada a partir da foto esférica de tamanho original. Veja os diagramas acima. | crop: se o corte superior da imagem for alterado, esse valor precisará ser atualizado. redimensionar: precisa ser dimensionado corretamente. |
GPano:InitialCameraDolly | Real | Não | 0 | Esse parâmetro opcional move a posição da câmera virtual ao longo da linha de visão para longe do centro da esfera fotográfica. Uma posição de superfície traseira é representada pelo valor -1,0, enquanto uma posição de superfície frontal é representada por 1,0. Para visualização normal, esse parâmetro deve ser definido como 0. | N/A |
Exemplo de uma Photo Sphere completa
Usuários que não são programadores podem adicionar o exemplo de metadados abaixo à foto completa esferas (360 graus x 180 graus) com apenas pequenas modificações. Isso pode ser feito em produtos de edição de imagem, como o Adobe Photoshop.
- altere todas as ocorrências de 4000 e 2000 para que correspondam à largura e altura correspondentes da sua imagem em pixels
- atualize PoseHeadingdegrees se quiser que o Google Maps mostre sua Photo Sphere. caso contrário, é possível remover esse parâmetro
- atualizar ou remover parâmetros opcionais (conforme listado acima);
<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>
Exemplo de uma foto esférica parcial
<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>
Robustez para edição de imagens
Para serem robustos, os programas que exibem esferas fotográficas em um visualizador devem verificar se a esfera fotográfica original foi dimensionada por um aplicativo sem atualizar o metadados. Isso pode ser feito com as etapas a seguir:
- garantir que a tag CroppedAreaImageWidthPixels seja igual à largura real da imagem
- verificar se a tag CroppedAreaImageHeightPixels é igual à altura real da imagem
- Se a etapa 1 ou 2 falhar, verifique se a proporção da imagem foi preservada
- Se a etapa 3 falhar, não exiba a imagem como uma Photo Sphere, pois ela foi transformada de forma incompatível e causaria distorções ruins
- Se a etapa 3 for aprovada, a proporção será equivalente e todos os valores de tag associados a seguir precisarão ser dimensionados para se ajustar ao novo tamanho da imagem:
CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, CroppedAreaLeftPixels, CroppedAreaRightPixels.
Visão geral dos ângulos de Euler
A orientação da esfera fotográfica no enquadramento global é definida por Euler ângulos diferentes. Ângulos de Euler podem ser definidos de muitas maneiras. Para estar correto, um programa deve seguir as convenções dos ângulos de Euler descritas aqui.
A posição acima da superfície terrestre define uma "região frame" XYZ, onde Z está para cima e é ortogonal à superfície da Terra, X é leste verdadeiro e Y é norte verdadeiro. A orientação é definida em relação "frame local" fixo, e os ângulos de Euler são rotações em torno desses foram corrigidos os eixos XYZ. Portanto, a orientação das posições é indefinida nos polos. Isso significa que uma esfera fotográfica com ângulos (0, 0, 0) estará orientada de tal forma que pixel central voltado para o norte com o equador da foto esférica paralelo a na superfície terrestre.
Os ângulos de Euler fornecem um mapeamento de pontos na "foto" (girada)
frame esférica" em pontos no "frame local" (fixo):
Uma matriz de rotação é construída com base nos ângulos de Euler da seguinte forma
segue (é importante preservar essa ordem):
R = R_Z(cabeçalho) * R_X(pitch) * R_Y(rolar)
onde: R_*(t) é uma rotação à direita em torno do eixo nomeado:
R_Z(ângulo) = [ cos(ang/ ângulo)/ = = [ cos(ang/ ângulo) -sin(ang(ang): 0
e onde: Z = para cima, X = leste, Y = norte.
É importante preservar esta ordem:
R = R_Z(cabeçalho) * R_X(pitch) * R_Y(rolar)
pois as rotações não são comutativas.
O ângulo de direção é igual ao de uma bússola padrão.
Referências
Padrão Adobe XMP: http://www.adobe.com/devnet/xmp.html