GIMP – Compensación de la rotación de la Tierra

Aviso para navegantes: el siguiente artículo es muy friki, comparado con la tendencia habitual de esta blogcosa.

En el artículo anterior, describí un método muy casero (y cutre) para fotografiar el firmamento con una cámara réflex. En este, voy a detallar cómo se puede mejorar el resultado con GIMP.

Brevemente, describo el problema: para captar la débil luz de las estrellas se necesita un tiempo de exposición prolongado (una ISO alta destroza la foto por el ruido que aparece entre tanta negrura). Durante ese tiempo, que puede ser del orden de varios minutos, la Tierra tiene la mala costumbre de no estarse quieta y, como se puede deducir y experimentar, la foto sale movida. Los modernos telescopios incorporan un servomotor que permite hacer un seguimiento de objetos que compensa la rotación.

Si no se tiene esa compensación, es necesario tomar muchas fotos breves (menos de 30 segundos) y superponerlas para aumentar la intensidad luminosa, en lugar de una o varias tomas largas.

GIMP ofrece la posibilidad de trabajar con capas y, lo que es más importante, con scripts. El siguiente script Python (basado en uno disponible en el magnífico tutorial de Python para GIMP de Javier Pérez Pacheco) superpone las imágenes disponibles en un directorio en distintas capas, aplicando a cada una un factor de corrección lineal.

earthrotation.py

#!/usr/bin/env python
# -*- coding: latin-1 -*-

# Script for Gimp in Python
# Implemented by José Miguel Cotrino (https://www.cotrino.com)
# The purpose of this script is to combine a set of astronomical
# images and compensate the Earth rotation from one to another
# following a linear movement.

from gimpfu import *
import os
import math

def EarthRotation(img, drawable, path, angle, offset):
# begin of UNDO action
pdb.gimp_image_undo_group_start(img)

# load all images in the given folder
files = os.listdir(path)
files.sort()

# calculate offset stepping
offset_x = 0
offset_y = 0
angle_radians = math.radians(angle);
diff_x = offset * math.cos(angle_radians) / (len(files)-1);
diff_y = offset * math.sin(angle_radians) / (len(files)-1);

# load each file
for file in files:
# each files is loaded as a new layer
# and added to the current image
layer_mark = pdb.gimp_file_load_layer(img, path+os.sep+file)
pdb.gimp_image_add_layer(img, layer_mark, -1)
# the layer is translated with the calculated offset
pdb.gimp_layer_translate(layer_mark, offset_x, offset_y)
# set the layer in addition mode to increase the starlight
pdb.gimp_layer_set_mode(layer_mark, ADDITION_MODE)
# modify output levels to reduce ambient light and noise
# (it may also hide weak stars)
pdb.gimp_levels(layer_mark, HISTOGRAM_VALUE, 0, 255, 1.0, 0, 127)
# update offset for next image
offset_x += diff_x
offset_y += diff_y

# combine all visible layers
# pdb.gimp_image_merge_visible_layers(img, 1)

# end of UNDO action
pdb.gimp_image_undo_group_end(img)

# main function
if __name__ == '__main__':

# call to register function
register(
"earth_rotation",
"Compensate Earth rotation in a set of astronomical pictures",
"Compensate Earth rotation in a set of astronomical pictures",
"Jose Miguel Cotrino",
"Jose Miguel Cotrino",
"2007",
"<Image>/Python-Fu/Fix Eath rotation",
"RGB*, GRAY*",
[
(PF_FILE, "path", "Folder with input images", "/home/cotrino/estrellas"),
(PF_SPINNER, "angle", "Movement angle", 72, (0, 360, 1)),
(PF_SPINNER, "offset", "Total movement (in pixels)", 40, (0, 1000, 1)),
],
[],
EarthRotation)
main()

Para usar este script, es necesario GIMP 2.4 o superior, ya que en versiones anteriores no se soporta la carga de imágenes en capas vía scripting. El archivo earthrotation.py se almacenará en el directorio $HOME/.gimp-2.4/plug-ins y se le asignará permiso de ejecución (chmod +x earthrotation.py).

Es necesario abrir la primera y última imagen del set para calcular el desplazamiento total, usando alguna estrella como referencia. Para ello, se puede utilizar la herramienta de medida de GIMP.

A continuación, con la primera imagen del set abierta, hay que ejecutar Python-Fu -> Fix Earth Rotation, que pide el directorio de las imágenes, el ángulo y el número de píxeles del desplazamiento.

Y listo:

Piliscsaba - Estrellas

Nota: como hemos mencionado al principio, la corrección es puramente lineal. Por lo tanto, funcionará bien en el ecuador, pero en los trópicos el movimiento será más parabólico en desplazamiento largos.

Piliscsaba – Estrellas

Acabo de terminar Cosmos, de Carl Sagan, el libro de divulgación científica más vendido mundialmente, y con razón. Quitando la excesiva reiteración en el tema nuclear y la búsqueda de señales alienígenas (SETI), así como algunas cosas escritas para niños de 7 años, el resto es muy interesante y se lee sin esfuerzo.

Este libro y este set de Flickr me han llevado a hacer un experimento de astronomía de andar por casa, con la cámara Canon EOS 350D a pelo, con trípode, 3 exposiciones de 30 segundos, en la negra noche de Piliscsaba. Se puede observar perfectamente el movimiento de las estrellas más o menos en la octava esfera celeste. Así mismo, se demuestra que el Universo fue creado en el -4004 a las 2 y cuarto y que los fósiles jurásicos son merchandising de la película de Spielberg.

Piliscsaba - Estrellas movidas

Al superponerlas con el GIMP y corregir la rotación, el resultado mejora.

Piliscsaba - Estrellas

VoIP321 sobre Linux

En la imagen, WindowsXP corriendo Skype, virtualizado sobre Ubuntu Feisty Fawn mediante VMPlayer.

Ubuntu y Skype

El único impedimento para pasarme a Linux y evitar los esporádicos cuelgues de Windows con la consecuente corrupción de un inestable disco duro Maxtor que se lleva a muerte con la placa base MSI K9N4 Ultra con chipset de NVidia y una memoria Nisu en fase terminal; como digo, mi único obstáculo, era mi flamante teléfono inalámicro USB Philips VoIP321, que por supuesto se distribuye sin drivers para cualquier otro sistema operativo distinto de Windows.

Finalmente, he conseguido instalar Skype y los drivers del teléfono USB sobre una máquina virtual simulada con VMPlayer. No se nota ningún retraso durante la conversación. Me siento casi tan cool como un maquero.

Ahora el siguiente paso es hacer lo mismo, pero con VirtualBox en lugar de VMPlayer y con seamless virtualization.

Amsterdam – Máquina de croquetas

En Schiphol, el aeropuerto de Amsterdam, se encuentra la mayor creación divina desde el chupa chups de Kójak: croqueitor, un engrendo mitad máquina, mitad bechamel, que expende croquetas recién hechas en el bar anexo.

Amsterdam - Máquina de croquetas

No me explico cómo este invento no se ha extendido aún por el Universo, ya que las croquetas de bechamel le dan mil vueltas a las cheeseburgers.

London – Jubilee Walkway (II)

London - Elefante daliniano

London - Isabel y avión

London - Torre del Parlamento

London - Estación de Paddington

London - Fuente en Trafalgar Square

London - Guardia real

London - Separación del Tower Bridge

London - Cupido en Piccadilly Circus

Cargar más