Metadatos XMP para fotos esféricas

El espacio de nombres para panorámicas que se describe aquí contiene propiedades que proporcionan información sobre la creación y el procesamiento de fotos esféricas, también denominadas panorámicas, como las que se crean con la función Foto esférica en la cámara de Android 4.2. Los metadatos se deben serializar e incorporar a la foto esférica como se describe en el estándar Adobe XMP (consulta las references al final de esta página).

El URI del espacio de nombres es http://ns.google.com/photos/1.0/panorama/

Propiedades de los metadatos

Los diagramas y la tabla que aparecen a continuación muestran las propiedades de las fotos esféricas encapsuladas por los parámetros GPano. Cuando edites y visualices fotos esféricas, asegúrate de verificar y actualizar los metadatos según corresponda, tal como se describe más adelante en este documento. Cuando especifiques los campos de pose y encabezado inicial, asegúrate de seguir las convenciones de los ángulos de Euler que se analizan más adelante en este documento.

Ten en cuenta que los productos de Google solamente admiten proyecciones esféricas. Actualmente, las proyecciones adicionales solo son compatibles con otras partes.

Proyecciones esféricas

Proyecciones cilíndricas

Ten en cuenta que si la parte superior de una imagen cilíndrica está por encima del horizonte, CroppedAreaTopPixels debe ser negativo. Un valor de 0 para CroppedAreaTopPixels coloca la parte superior de la imagen en el horizonte. Un valor positivo de CroppedAreaTopPixels coloca la parte superior de la imagen debajo del horizonte.

Referencia del parámetro GPano

Nombre Tipo Obligatorias Valor predeterminado
(visor asumido)
Descripción de la propiedad Acción obligatoria si se modifica la imagen
GPano:UsePanoramaViewer Booleano No Verdadero Indica si se debe mostrar esta imagen en un visor de fotos esféricas en lugar de como imagen plana normal. Esto se puede especificar en función de las preferencias del usuario o mediante el software de cosido de imágenes. La aplicación que muestra o transfiere la imagen puede ignorar esto. escala/recortar:
Sin cambios. Una aplicación puede decidir cambiar el valor a "False" si el campo de visión es inferior a un valor determinado.
GPano:CaptureSoftware Cadena No N/A Si la captura se realizó con una aplicación en un dispositivo móvil, como un teléfono Android, el nombre de la aplicación utilizada (como "Foto esférica"). Este nombre debe dejarse en blanco si las imágenes de origen se capturaron manualmente, por ejemplo, con una cámara réflex digital en un trípode. N/A
GPano:StitchingSoftware Cadena No N/A El software que se utilizó para crear la foto esférica final. En ocasiones, puede ser el mismo valor que el de GPano:CaptureSoftware. N/A
GPano:ProjectionType Opción de texto libre

equirrectangular

Tipo de proyección usado en el archivo de imagen. Actualmente, los productos de Google solo admiten el valor equirrectangular. scale/recortar: Sin cambios.
GPano:PoseHeadingDegrees Real No, pero es obligatorio para mostrarse en Google Maps N/A Orientación de la brújula, medida en grados en sentido horario a partir del norte, para el centro de la imagen. El valor debe ser mayor que 0 y menor que 360. scale/recortar: Sin cambios.
GPano:PosePitchDegrees Real No 0 Inclinación, medida en grados sobre el horizonte, para el centro de la imagen. El valor debe ser >= -90 y <= 90. scale/recortar: Sin cambios.
GPano:PoseRollDegrees Real No 0 Rollo, medido en grados, de la imagen donde el nivel con el horizonte es 0. A medida que aumenta el desplazamiento, el horizonte gira en sentido contrario a las agujas del reloj en la imagen. El valor debe ser mayor que -180 y <= 180. scale/recortar: Sin cambios.
GPano:InitialViewHeadingDegrees Número entero No 0 El ángulo de orientación de la vista inicial en grados en sentido horario a partir del norte real, no relativo al centro de la panorámica. scale/recortar: Sin cambios.
GPano:InitialViewPitchDegrees Número entero No 0 El ángulo de inclinación de la vista inicial en grados sobre el horizonte del mundo real, no relativo al centro de la panorámica. scale/recortar: Sin cambios.
GPano:InitialViewRollDegrees Número entero No 0 El ángulo de balanceo de la vista inicial en grados donde el nivel con el horizonte del mundo real es 0. A medida que aumenta el giro, el horizonte gira en sentido antihorario en la vista. scale/recortar: Sin cambios.
GPano:InitialHorizontalFOVDegrees Real No N/A Campo visual horizontal inicial que el visor debe mostrar (en grados). Es similar al nivel de zoom. N/A
GPano:InitialVerticalFOVDegrees Real No N/A Campo visual vertical inicial que el visor debe mostrar (en grados). Es similar al nivel de zoom. Si los atributos GPano:InitialHorizontalFOVDegrees y GPano:InitialVerticalFOVDegrees están presentes, GPano:InitialHorizontalFOVDegrees tiene prioridad. Usa solo InitialVerticalFOVDegrees si tu contenido se mostrará en varias relaciones de aspecto y prefieres que el campo visual vertical permanezca constante mientras el campo visual horizontal puede cambiar. En este momento, los productos de Google no admiten este campo. N/A
GPano:FirstPhotoDate Fecha No N/A Fecha y hora de la primera imagen creada en la foto esférica. scale/recortar: Sin cambios.
GPano:LastPhotoDate Fecha No N/A Fecha y hora de la última imagen creada en la foto esférica. scale/recortar: Sin cambios.
GPano:SourcePhotosCount Número entero No N/A Cantidad de imágenes de origen utilizadas para crear la foto esférica. scale/recortar: Sin cambios.
GPano:ExposureLockUsed Booleano No N/A Indica si el parámetro de configuración de exposición de la cámara estaba bloqueado o no cuando se tomaron las fotografías de origen individuales. N/A
GPano:CroppedAreaImageWidthPixels Número entero N/A Es el ancho original de la imagen en píxeles (equivalente al ancho real de la imagen para las imágenes sin editar). Consulta los diagramas anteriores. scale/recortar: Esta propiedad debe actualizarse para reflejar el nuevo tamaño de la imagen.
GPano:CroppedAreaImageHeightPixels Número entero N/A Es la altura original de la imagen en píxeles (equivalente a la altura real de la imagen para imágenes sin editar). Consulta los diagramas anteriores. scale/recortar: Esta propiedad debe actualizarse para reflejar el nuevo tamaño de la imagen.
GPano:FullPanoWidthPixels Número entero N/A Ancho completo original a partir del cual se recortó la imagen. Si solo se capturó una foto esférica parcial, esta propiedad especifica el ancho que habría tenido la foto esférica completa. Consulta los diagramas anteriores. recorte: Sin cambios.
Escala: Se debe ajustar la escala de la imagen correctamente.
GPano:FullPanoHeightPixels Número entero N/A Altura completa original a partir de la cual se recortó la imagen. Si solo se capturó una foto esférica parcial, esta propiedad especifica la altura que hubiera tenido la foto esférica completa. Consulta los diagramas anteriores. recorte: Sin cambios.
Escala: Se debe ajustar la escala de la imagen correctamente.
GPano:CroppedAreaLeftPixels Número entero N/A Columna en la que el borde izquierdo de la imagen se recortó a partir de la foto esférica de tamaño completo. Consulta los diagramas anteriores. recorte: si se modifica el recorte izquierdo de la imagen, se debe actualizar este valor.
Ajustar: Se debe ajustar correctamente la escala.
GPano:CroppedAreaTopPixels Número entero N/A Fila en la que el borde superior de la imagen se recortó a partir de la foto esférica de tamaño completo. Consulta los diagramas anteriores. recorte: Si se cambia el recorte superior de la imagen, se debe actualizar este valor.
Ajustar: Se debe ajustar correctamente la escala.
GPano:InitialCameraDolly Real No 0 Este parámetro opcional mueve la posición de la cámara virtual a lo largo de la línea de visión, lejos del centro de la foto esférica. Una posición superficial trasera se representa con el valor -1.0, mientras que la posición superficial delantera se representa con el valor 1.0. Para la visualización normal, este parámetro se debe establecer en 0. N/A

Ejemplo de una foto esférica completa

Los usuarios que no son programadores pueden agregar el siguiente ejemplo de metadatos a sus fotos esféricas completas existentes (360 grados x 180 grados) solo con pequeñas modificaciones. Esto se puede realizar en productos de edición de imágenes, como Adobe Photoshop.

  1. cambia las ocurrencias de 4000 y 2000 para que coincidan con el ancho y la altura correspondientes de tu imagen en píxeles
  2. Actualiza PoseheadingDegrees si deseas que Google Maps pueda mostrar tu foto esférica; de lo contrario, tienes la opción de quitar este parámetro.
  3. actualizar o quitar parámetros opcionales (como se indicó anteriormente)
<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>

Ejemplo de una 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>

Solidez para la edición de imágenes

Para ser sólidos, los programas que muestran fotos esféricas en un visor deben comprobar si una aplicación ajustó la foto esférica original a escala sin actualizar los metadatos. Esto se puede realizar en los siguientes pasos:

  1. Asegúrate de que la etiqueta CroppedAreaImageWidthPixels sea equivalente al ancho real de la imagen
  2. Asegúrate de que la etiqueta CroppedAreaImageHeightPixels sea equivalente a la altura real de la imagen
  3. Si el paso 1 o 2 falla, comprueba si se conservó la relación de aspecto de la imagen.
  4. Si el paso 3 falla, no muestres la imagen como foto esférica, ya que se transformó de una manera incompatible que generará distorsiones graves
  5. si se aprueba el paso 3, la relación de aspecto es equivalente y todos los valores de etiqueta asociados se deben ajustar para adaptarse al nuevo tamaño de la imagen:
    CroppedAreaImageWidthPixels, CroppedAreaImageHeightPixels, FullPanoWidthPixels, FullPanoHeightPixels, CroppedAreaLeftPixels, RecortadoAreaRightPixels.

Descripción general de los ángulos de Euler

La orientación de la foto esférica en el marco del mundo está definida por ángulos de Euler. Los ángulos de Euler pueden definirse de diversas maneras. Para ser correcto, un programa debe seguir estrictamente las convenciones de los ángulos de Euler que se describen aquí.

La posición sobre la superficie de la Tierra define un "marco local" fijo XYZ, en el que Z es hacia arriba y en ortogonal respecto de la superficie de la Tierra, X es el extremo este e Y es el norte geográfico. La orientación se define en relación con este "marco local" fijo, y los ángulos de Euler son rotaciones alrededor de esos ejes XYZ fijos. Por lo tanto, la orientación de la pose es indefinida en los polos. Esto significa que una foto esférica con ángulos (0, 0, 0) se orientará de modo que el píxel central se oriente hacia el norte con el ecuador de la foto esférica paralelo a la superficie de la Tierra.

Los ángulos de Euler proporcionan una asignación desde puntos en el "marco de la foto esférica" (rotado) hasta puntos en el "marco local" (fijo):
 
Se construye una matriz de rotación a partir de los ángulos de Euler de la siguiente manera (es importante preservar este orden):

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

donde: R_*(t) es una rotación hacia la derecha alrededor del eje nombrado:

R_Z(ángulo) = [ cos(ángulo), -sen(ángulo), 0
seno(ángulo), cos(ángulo), 0
0, 0, 1 ]
 
R_X(ángulo) = [ 1, 0 (ángulo),
,




donde: Z = Arriba, X = Este, Y = Norte.

Es importante mantener este orden:

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

ya que las rotaciones no son conmutativas.

Ten en cuenta que el ángulo de orientación es el mismo que la orientación estándar con brújula.

Referencias

Estándar Adobe XMP: http://www.adobe.com/devnet/xmp.html