lunes, 24 de abril de 2023

Fotografiando la Tierra desde el espacio con R

La perspectiva o deformación de un sujeto al ser fotografiado no depende de la distancia focal usada, sino exclusivamente de la distancia física del sujeto a la que se coloca la cámara. Esto mismo es aplicable a las fotografías que se pueden hacer de la Tierra desde el espacio: en función de la distancia a la que se la fotografíe tendremos una cobertura diferente de su superficie.

Fuente: Lunar Reconnaissance Orbiter, NASA

En este ejercicio vamos a simular el resultado que obtendríamos fotografiando la Tierra desde diferentes distancias, en concreto en el rango que va desde la Estación Espacial Internacional o ISS (408km de altitud media) a la Luna (376.891km de distancia media).

Partimos del dataset de parejas longitud/latitud que proporciona la librería ggmap de R. Es un conjunto lo suficientemente denso como para definir claramente el contorno de todos los países y continentes a base solo de puntos, de muy fácil representación al ser independientes unos de otros:


Basándonos en la proyección de cámara rectilínea que estudiamos en 'Proyección lineal de escenas 3D sobre el plano con R', plasmamos la vista de la Tierra centrada sobre el punto de longitud=0 y latitud=0. Adaptamos en cada fotograma el ángulo de visión (focal de un hipotético objetivo) para que en toda la secuencia la Tierra mantenga su tamaño respecto al encuadre. La trigonometría usada es muy sencilla:


El resultado final puede verse aquí (hacer clic para mayor resolución):


~~~

Por el camino añadimos una parada adicional correspondiente a la misión Polaris Dawn de SpaceX (1.401km de altitud en el apogeo). A continuación se representan las órbitas tanto de la ISS como de la misión Polaris Dawn en relación al tamaño real de la Tierra:


Por orbitar tan a ras de superficie la ISS está bastante cegata, su horizonte de visión abarca relativamente poco y por eso las fotos que nos llegan tomadas desde ella siempre serán muy parciales. La cápsula de Elon Musk logra una perspectiva más amplia, pero todavía no logra abarcar África al completo por ejemplo.

La siguiente imagen estática compara el campo de visión instantáneo de la ISS y de la misión Polaris Dawn superpuestas a la visión que se tiene desde la Luna:


La imagen desde la Luna ya está tomada lo suficientemente lejos como para que la perspectiva sea casi axonométrica. Se hace justicia al verdadero tamaño de África, continente que por su cercanía al ecuador siempre aparece "maltratado" en los mapas Mercator a los que nos tiene acostumbrados Google.

Para comprobar que la simulación coincide con la realidad podemos fijarnos en que la vista desde la Luna es muy similar a la de la fotografía de la NASA con que empieza el artículo.

Aunque seguramente las habrá, no he encontrado ninguna fotografía hecha desde la ISS que abarque toda la porción de Tierra visible desde la misma (una toma de objetivo ultraangular o panorámica), así que la simulación hecha donde aparece un gajo de África, sin ser una foto real, es la primera imagen que veo mostrando la vista completa que se tendría desde la ISS.

El ángulo de visión requerido para capturar toda la Tierra desde cada punto es:

  • ISS: FOV≈140º (diagonal de un ultraangular de 8mm en FF)
  • Polaris Dawn: FOV≈110º (diagonal de un ultraangular de 15mm en FF)
  • La Luna: FOV≈1,9º (diagonal de un teleobjetivo de 1.300mm en FF)

Los astronautas que suben a la ISS suelen enviar fotografías de zonas específicas como ésta donde aparecen El Cairo y la península del Sinaí:

Fuente: ISS

Fuente: Polaris Dawn, SpaceX

Terminamos con una última foto preciosa donde aparecen a la vez la Tierra y la Luna. Está tomada a una distancia tal que permite comparar sus tamaños relativos (el radio de la Tierra es 3,7 veces mayor al de la Luna), si bien la distancia aparente entre ambos sea muy inferior a la real:

Fuente: Mars Reconnaissance Orbiter, NASA

~~~

Las rutinas usadas en este ejercicio se han reutilizado para realizar una animación 3D más sofisticada en 'OppenheimeR, el destructor de mundos'.

El código R con el que se ha generado la animación está completamente vectorizado usando dataframes, generando 100 fotogramas en menos de 13s en mi portátil. Eso son 7,7fps que no dan para animar en tiempo real con calidad pero se aproxima, nada mal para un lenguaje interpretado orientado a la estadística. Repositorio con el código R: GitHub.


3 comentarios:

  1. Disculpa que lo haga en este artículo, pero lo elegí por ser el más reciente, tiene mucho tiempo que no me pasaba por aquí, me alegra encontrar mucha nueva información. Pero venía buscando específicamente algo, sí no eres tú, entonces no sé quién más podría ser. Recuerdo que había una forma de hacer un balance de blancos que ajustaba el histograma de manera correcta en canon, esto de manera manual, pero no encuentro el artículo, yo estaba seguro que era tuyo, pero ahora estoy durando. ¿Podrías confirmarme esto? Muchas gracias Guillermo.

    ResponderEliminar
    Respuestas
    1. Hola Luci, creo que te refieres a este artículo:

      http://guillermoluijk.com/tutorial/uniwb/index.htm

      Salu2!

      Eliminar
    2. Muchísimas gracias por la respuesta, en efecto ese es el artículo que estaba buscando. Saludos.

      Eliminar

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.