Mission Space Lab: ISS Speed!

En este proyecto vamos a utilizar fotos tomadas por una Unidad de Vuelo Astro Pi en la Estación Espacial Internacional (ISS) para estimar la velocidad a la que la ISS orbita alrededor de la Tierra.

Esto es lo que vamos a realizar:

  1. Extraer datos EXIF de imágenes.
  2. Utilizar OpenCV para calcular distancias entre características similares en dos imágenes.
  3. Calcular la velocidad de la Estación Espacial Internacional.

La imagen muestra dos fotografías tomadas desde la Estación Espacial Internacional, con líneas que conectan características similares. Al medir la distancia en píxeles entre las características que se han movido, puedes calcular la velocidad a la que se movía la cámara y, así, ¡determinar la velocidad de la ISS!

  1. Material necesario
  2. Usar datos Exif y diferencias temporales
    1. El formato Exif
    2. Extraer listado de metadatos
    3. Extraer fecha y hora
    4. Extraer localización
  3. Encontrar la diferencia temporal entre dos fotografías
  4. Encontrar características similares
    1. Visión Artificial e Inteligencia artificial
      1. Introducción a la Visión Artificial
      2. OpenCV
  5. Mostrando características similares
  6. Encontrando coordenadas coincidentes
  7. Cálculo de distancias

Material necesario

Para realizar las prácticas necesitamos una serie de imágenes con metadatos. Vamos a utilizar unas imágenes tomadas desde la Estación Espacial Internacional.

Aquí tienes la carpeta con las imágenes (clic para descargar). Una vez descargado el archivo comprimido, debes descomprimirlo a una carpeta donde vayas a trabajar con el proyecto.

Es importante que las imágenes estén en el mismo sitio que tu script de python.

Para realizar este proyecto necesitamos un ordenador con python instalado, o un navegador con acceso a repl.it.

Nosotros vamos a instalar el editor de python Thonny.

  • Descarga la versión más actual para tu Sistema Operativo.
  • Vete a Tools > Manage packages para buscar (1) e instalar la librería matplotlib.
  • En la ventana emergente selecciona Instalar:
  • Procede de igual manera para la librería EXIF:

Usar datos Exif y diferencias temporales

El formato Exif

Lo primero es definir que es el formato Exif.

Un formato de archivo de imagen intercambiable (Exif) es una especificación estándar para formatos archivos de imagen y sonido, así como varias etiquetas específicas de metadatos que pueden almacenarse dentro del archivo.

Estas etiquetas pueden incluir la fecha hora en que se tomó la foto, la configuración de la cámara, información sobre localización (GPS), etc.

Extraer listado de metadatos

Aquí tienes una primera aproximación en Python para extraer los metadatados Exif presentes en una imagen:

Esto es todo lo que muestra en nuestro caso de imagen tomada desde la ISS:

¿Quieres simplificar el código? A ver qué te parece así…

Extraer fecha y hora

Los datos de la fecha y hora se encuentran en datetime_original.

Aquí tienes la primera aproximación en Python para obtener la fecha y hora de la fotografía (código embellecido en esta web):

Esto es un ejemplo de lo que puede mostrar en pantalla:

¿Y si quisiéramos encontrar no los datos de la fecha y hora, sino los de la localización?

Extraer localización

Antes de empezar tienes que conocer qué son las coordenadas cartográficas:

Las coordenadas se eligen, en general, de manera que las dos referencias representen una posición horizontal y una tercera que represente la altitud. Las coordenadas de posición horizontal utilizadas son la latitud longitud, un sistema de coordenadas angulares esféricas o esferoides cuyo centro es el centro de la Tierra y suelen expresarse en grados sexagesimales.

Fuente
Fuente

Aquí tienes una aproximación del código con python:

Este es un posible resultado:

Vamos a buscarlo en Google Maps:

Esta es la fotografía de referencia:

Se encuentra en la provincia de Chubut en la República Argentina, al centro sur de la región de la Patagonia:

Imagen de Google Earth

Se pueden comprobar estos metadatos mediante la aplicación Fotos de Windows:

¿Cuál es la Latitud y Longitud en la localidad en la que vives? Puedes buscarlo en páginas web como esta.

Encontrar la diferencia temporal entre dos fotografías

La velocidad es el cambio de posición de un objeto respecto al tiempo.

  •  En física se representa con {\vec  {v}}\,.
  • En análisis dimensional sus dimensiones son: [L]/[t].
  • Su unidad en el Sistema Internacional de Unidades es el m/s.

Para calcular la velocidad de la Estación Espacial Internacional a partir de las imágenes que va a tomar la cámara necesitamos saber cuánto tiempo ha transcurrido entre cada toma de la foto.

Aquí tienes una aproximación con Python:

Esta es una versión más simplificada:

Este es un posible resultado:

Si quisiéramos que mostrase únicamente la diferencia con un número (en segundos), podrías cambiar el final:

Lo que ofrece este resultado:

O más sencillo todavía:

que muestra el resultado:

Encontrar características similares

El siguiente paso es encontrar características similares en las dos imágenes, utilizando OpenCV, un proyecto Open Source de Visión Artificial y Machine Learning.

Visión Artificial e Inteligencia artificial

Introducción a la Visión Artificial

La Visión Artificial es una disciplina cuyo objetivo es permitir que los ordenadores adquieran un entendimiento de alto nivel de imágenes digitales.

Esta es una definición bastante amplia, ya que el entendimiento puede significar muchas cosas diferentes, como encontrar un objeto en una imagen (detección de objetos), comprender lo que está sucediendo (detección de eventos), describir una imagen en texto o reconstruir una escena en 3D.

También existen tareas especiales relacionadas con imágenes de humanos: estimación de edad y emoción, detección e identificación de rostros y estimación de la pose en 3D, por mencionar algunas.

Una de las tareas más simples de la visión artificial es la clasificación de imágenes.

La visión artificial se considera a menudo una rama de la inteligencia artificial. Hoy en día, la mayoría de las tareas de visión visión artificial se resuelven utilizando un tipo de redes neuronales: las redes neuronales convolucionales.

Antes de pasar la imagen a una red neuronal, en muchos casos tiene sentido utilizar algunas técnicas algorítmicas para mejorar la imagen.

Sin embargo, antes de pasar la imagen a una red neuronal, en muchos casos tiene sentido utilizar algunas técnicas algorítmicas para mejorar la imagen.

Existen varias librerías de Python disponibles para el procesamiento de imágenes: imageio, Pillow, OpenCV, dlib.

OpenCV

OpenCV (Open Computer Vision) se considera el estándar de facto para el procesamiento de imágenes. Es una biblioteca libre de visión artificial originalmente desarrollada por Intel.

Para utilizarla en Thonny tenemos que instalar el paquete:

Enprimer lugar necesitamos convertir las imágenes a objetos OpenCV para que puedan ser procesadas.

Para procesarlas vamos a utilizar el algoritmo Oriented FAST and Rotated BRIEF (ORB), basado en el detector de puntos clave FAST y el descriptor BRIEF.

El algoritmo compara el brillo de un píxel de una matriz con circundantes a su alrededor, clasificándolos en varias clases (más claros, similares o más oscuros). Si más de 8 píxeles son más oscuros o brillantes, se toma el píxel como clave. Esto lo utilizamos para obtener información sobre los bordes en una imagen.

Como las funciones FAST no tienen un componente de orientación, el algoritmo ORB usa una pirámide de imágenes multiescala (versiones de la imagen en diferentes resoluciones):

Después de ubicar los puntos clave, los convierte en vectores binarios (con 1 y 0) para representar los objetos.

En resumen: El algoritmo detecta puntos clave en una o varias imágenes. Si las imágenes son similares, se detectan los mismos puntos clave aunque se haya movido la imagen. Asignando unos descriptores a esos puntos con información sobre posición, tamaño, rotación y brillo, podemos realizar una comparativa para calcular los cambios entre las imágenes.

El método más sencillo es mediante un algoritmo de fuerza bruta, probando un descriptor de la primera imagen y tratando de encontrar semejanzas con todos los de la segunda imagen, y repitiendo el proceso hasta comparar todos los descriptores.

Aquí puedes ver el código base:

Y aquí el código simplificado:

Este es parte del resultado que muestra:

Mostrando características similares

Una vez que hemos conseguido en el paso anterior el listado de coincidencias, vamos a dibujarlas en la imagen para visualizarlas más fácilmente.

Además, mostraremos una líneas que unan esas coincidencias.

Aquí puedes ver el código comentado:

Y el resultado:

¿Y qué pasa si utilizamos otras dos imágenes? Probemos con unas reinas de ajedrez diseñadas por los alumnos a partir de la reina BFII.

Aquí podemos ver el resultado:

Se puede modificar el código para mostrar con mayor grosor las líneas (ajustando el parámetro color y thickness):

También se puede ajustar el código para mostrar los puntos clave (ajustando el parámetro radius):

Vamos a probar con otras dos imágenes:

Encontrando coordenadas coincidentes

Ahora que hemos encontrado las características coincidentes, vamos a obtener sus coordenadas.

  1. Obtenemos la diferencia de tiempo entre dos imágenes utilizando información de los metadatos EXIF.
  2. Convertimos las imágenes a objetos OpenCV.
  3. Calculamos las características como puntos clave y descriptores utilizando el algoritmo ORB.
  4. Calculamos las coincidencias entre descriptores utilizando fuerza bruta.
  5. Visualizamos las coincidencias en las imágenes.
  6. y por último mostramos en pantalla las coordenadas de la primera coincidencia encontrada.

Este es el resultado que se muestra en pantalla:

Si quieres puedes mostrar sobre la imagen las coordenadas coincidentes:

Cálculo de distancias

Una vez que hemos almacenado las coordenadas coincidentes, podemos calcular la distancia entre las imágenes, que posteriormente tendremos que convertir a su equivalente de distancia sobre la superficie terrestre.

Después podemos dividir la distancia por la diferencia de tiempo entre las imágenes para calcular la velocidad de la Estación Espacial Internacional.

[entrada en construcción]

Deja un comentario

Comments (

0

)

Diseña un sitio como este con WordPress.com
Comenzar