¿Qué es FITS?
FITS — Flexible Image Transport System (Sistema Flexible de Transporte de Imágenes) — es el formato estándar de datos utilizado en astronomía desde hace más de cuatro décadas. Definido en 1981 por Wells, Greisen y Harten en el NRAO (National Radio Astronomy Observatory), FITS fue adoptado oficialmente como estándar por la Unión Astronómica Internacional (UAI) y la NASA. Su principio rector, inscrito en la especificación del formato, es elegantemente simple: "FITS no es solo un formato de imagen, es un sistema de transporte de datos."
A diferencia de los formatos de imagen para consumidor que optimizan la compresión para pantalla, FITS prioriza la fidelidad científica. Un archivo FITS transporta valores de píxeles en bruto sin compresión con pérdida, preserva precisión numérica completa hasta 64 bits en coma flotante, y embebe metadatos ricos que describen el significado físico de cada número del conjunto de datos. Un PNG o JPEG descarta la diferencia entre un conteo de fotones de 1.842 y 1.843; un archivo FITS la preserva.
Unidades de Datos de Cabecera (HDUs)
Los archivos FITS se organizan en una o más Header Data Units (HDUs). Cada HDU tiene dos secciones:
- Cabecera: tarjetas de texto ASCII, cada una de exactamente 80 caracteres, con pares clave = valor
- Datos: un array multidimensional o tabla de valores numéricos
El primer HDU es la HDU Primaria, que contiene el conjunto de datos principal. Pueden seguir HDUs de Extensión adicionales:
| Tipo de extensión | Código | Descripción |
|---|---|---|
| Extensión de imagen | IMAGE_EXT |
Array de píxeles multidimensional |
| Tabla ASCII | TABLE |
Datos en columnas legibles por humanos |
| Tabla binaria | BINTABLE |
Datos en columnas binarias compactos |
| Imagen comprimida | COMPRESSED_IMAGE |
Arrays con compresión por teselas vía CFITSIO |
Un único archivo FITS del Telescopio Espacial James Webb (JWST) puede contener docenas de extensiones: arrays de datos de ciencia, arrays de error, indicadores de calidad de datos, metadatos WCS y tablas de calibración fotométrica, todo en un solo archivo autodescriptivo.
Palabras Clave de Cabecera: La Capa de Metadatos Científicos
Las palabras clave de cabecera FITS documentan cada detalle de la observación:
SIMPLE = T / el archivo cumple el estándar FITS
BITPIX = -32 / número de bits por píxel de datos
NAXIS = 2 / número de ejes de datos
NAXIS1 = 4096 / longitud del eje 1
NAXIS2 = 4096 / longitud del eje 2
OBJECT = 'M31 ' / nombre del objeto observado
TELESCOP= 'HST ' / telescopio utilizado
INSTRUME= 'WFC3 ' / instrumento utilizado
DATE-OBS= '2023-11-15' / fecha de observación
EXPTIME = 1200.00 / tiempo de exposición en segundos
BITPIX codifica el tipo de datos de píxel:
| BITPIX | Tipo | Rango |
|---|---|---|
| 8 | Entero sin signo de 8 bits | 0–255 |
| 16 | Entero con signo de 16 bits | −32.768–32.767 |
| 32 | Entero con signo de 32 bits | −2.147.483.648–2.147.483.647 |
| −32 | Flotante IEEE de 32 bits | ±3,4×10³⁸ |
| −64 | Doble IEEE de 64 bits | ±1,8×10³⁰⁸ |
La mayoría de instrumentos científicos modernos usan BITPIX = -32 o BITPIX = -64 para evitar artefactos de cuantización en mediciones espectrales o fotométricas. Los conteos de detectores CCD llegan típicamente como enteros de 16 bits (BITPIX = 16), luego se convierten a unidades físicas de flujo (electrones/segundo) por el pipeline de calibración.
Sistema de Coordenadas del Mundo (WCS)
Una de las características más potentes de FITS es el WCS — World Coordinate System. Palabras clave especiales transforman coordenadas de píxel en coordenadas físicas del cielo (Ascensión Recta, Declinación) o ejes de longitud de onda/frecuencia:
CTYPE1 = 'RA---TAN' / tipo de coordenada (proyección gnomónica)
CTYPE2 = 'DEC--TAN' / tipo de coordenada
CRPIX1 = 2048.000 / píxel de referencia X
CRPIX2 = 2048.000 / píxel de referencia Y
CRVAL1 = 10.6847929 / AR de referencia (grados)
CRVAL2 = 41.2690650 / Dec de referencia (grados)
CD1_1 = -1.38889E-05 / elemento de la matriz de transformación
CD1_2 = 0.00000E+00
CD2_1 = 0.00000E+00
CD2_2 = 1.38889E-05
Estas palabras clave permiten a cualquier herramienta FITS superponer imágenes de distintos telescopios con precisión, mostrar ejes RA/Dec correctamente etiquetados y medir separaciones angulares directamente desde coordenadas de píxel. El código de proyección TAN indica una proyección gnomónica (plano tangente) — el estándar para imágenes ópticas de campo pequeño.
Lectura de FITS con Astropy
La biblioteca Astropy de Python es la herramienta principal para el acceso a FITS en la astronomía moderna:
from astropy.io import fits
import numpy as np
# Abrir un archivo FITS (el gestor de contexto lo cierra automáticamente)
with fits.open('hubble_m31.fits') as hdul:
print(hdul.info()) # listar todos los HDUs y sus formas
# Acceder a los datos de imagen principal
imagen = hdul[0].data # array numpy, p.ej. forma (4096, 4096)
cabecera = hdul[0].header
print(f"Forma: {imagen.shape}")
print(f"BITPIX: {cabecera['BITPIX']}")
print(f"Objeto: {cabecera['OBJECT']}")
print(f"Tiempo de exp.: {cabecera['EXPTIME']} segundos")
# Acceder a una extensión de tabla binaria por nombre
tabla = hdul['SCI'].data
ar = tabla['RA']
dec = tabla['DEC']
# Aplicar estiramiento ZScale para visualización (revela características tenues)
from astropy.visualization import ZScaleInterval
from PIL import Image
intervalo = ZScaleInterval()
vmin, vmax = intervalo.get_limits(imagen)
escalado = np.clip((imagen - vmin) / (vmax - vmin), 0, 1)
img_8bit = (escalado * 255).astype(np.uint8)
Image.fromarray(img_8bit).save('m31_vista_previa.png')
ZScaleInterval es esencial porque las imágenes astronómicas contienen píxeles con diferencias de muchos órdenes de magnitud — una estrella brillante y el fondo del cielo pueden diferir en un factor de 100.000. Un escalado lineal ingenuo de 0 a 255 dejaría todo en negro excepto las estrellas más brillantes.
CFITSIO: La Biblioteca en C/Fortran
La biblioteca CFITSIO (NASA/GSFC) es la base de casi todas las aplicaciones de astronomía. Gestiona internamente el cambio de bytes, la compresión por teselas y la verificación de sumas de comprobación:
#include "fitsio.h"
fitsfile *fptr;
int status = 0;
long naxes[2], fpixel[2] = {1, 1};
float *imagen;
fits_open_file(&fptr, "imagen.fits", READONLY, &status);
fits_get_img_size(fptr, 2, naxes, &status);
imagen = malloc(naxes[0] * naxes[1] * sizeof(float));
fits_read_pix(fptr, TFLOAT, fpixel, naxes[0] * naxes[1],
NULL, imagen, NULL, &status);
fits_close_file(fptr, &status);
if (status) fits_report_error(stderr, status);
Existen enlaces para Python (Astropy la envuelve), Julia (FITSIO.jl), Rust (crate fitsio) e IDL (procedimiento readfits incorporado).
Visualización de Archivos FITS
SAOImageDS9 (DS9) es el visor interactivo dominante, desarrollado por el Smithsonian Astrophysical Observatory y disponible gratuitamente para Windows, macOS y Linux. Renderiza imágenes FITS con escalado ajustable (lineal, logarítmico, raíz cuadrada, arcsinh, ecualización de histograma), superpone catálogos de VizieR y SIMBAD mediante mensajería SAMP, y muestra coordenadas RA/Dec en tiempo real mientras se mueve el ratón.
Aladin (CDS Estrasburgo) funciona en el navegador y es excelente para cruzar datos de múltiples longitudes de onda. Renderiza teselas HiPS (Hierarchical Progressive Surveys) — un sistema LOD en streaming para inspecciones FITS de todo el cielo.
CARTA está diseñado específicamente para cubos de datos de radioastronomía, con extracción de perfiles espectrales en tiempo real y generación de mapas de momentos para cubos con cientos de canales espectrales.
Tamaño de Archivo y Estructura de Bloques
FITS impone límites de bloque de 2880 bytes: cada sección de cabecera o datos se rellena hasta un múltiplo de 2880 bytes con bytes nulos. Esto se eligió originalmente para coincidir con el tamaño de bloque de las cintas magnéticas de 9 pistas de los años 70.
Las grandes inspecciones generan archivos enormes: una única exposición del plano focal completo del Observatorio Vera C. Rubin (LSST) tiene 3.200 megapíxeles almacenados en un único archivo FITS — aproximadamente 6,4 GB a 16 bits de profundidad entera, antes de cualquier compresión. El esquema de compresión por teselas de CFITSIO (usando algoritmos RICE, GZIP o PLIO) logra típicamente una reducción de tamaño de 2 a 4 veces para imágenes astronómicas, permaneciendo sin pérdida.
FITS en Misiones Espaciales
Todos los grandes telescopios espaciales usan FITS como formato archivístico primario:
- Telescopio Espacial Hubble (HST): el archivo MAST en STScI distribuye FITS multi-extensión con exposiciones de calibración, archivos de jitter y datos de adquisición de estrellas guía en un paquete único por visita
- Telescopio Espacial James Webb (JWST): productos de pipeline de Nivel 1–3 en FITS con archivos sidecar ASDF para árboles de metadatos complejos
- Observatorio de Rayos X Chandra: listas de eventos de alta energía en extensiones BINTABLE con columnas TIEMPO, X, Y, ENERGÍA, GRADO
- Kepler/TESS: series temporales a nivel de píxel como pilas de extensiones IMAGE_EXT, una por cadencia
El Archivo Mikulski para Telescopios Espaciales (MAST) sirve más de 800 terabytes de datos FITS de forma gratuita al público. El estándar del Observatorio Virtual (VO) de IVOA exige FITS como formato de intercambio para todos los archivos conformes a nivel mundial.