Astronomía

Python con imagen en formato de ajustes

Python con imagen en formato de ajustes



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Estoy tratando de escribir un programa Python que haga lo siguiente: tomar una imagen en formato de ajustes y un archivo reg con una lista de regiones en el cielo, y determinar qué regiones de la lista están dentro de la imagen de ajustes y cuáles están fuera de. Esto se puede hacer visualmente con ds9, pero no tengo idea de cómo puedo acceder al archivo de ajustes y determinar las coordenadas del límite de la imagen.

¿Algún consejo? No sé mucho sobre el formato de ajustes, pero no se abrirá con un editor de texto habitual como gedit.

Editar: Ahora tengo un problema más específico. Tengo cuatro puntos en el cielo definidos por su declinación y ascensión recta. ¿Existe una forma sencilla de comprobar si estas coordenadas pertenecen a la imagen codificada en el archivo de ajustes?

Edición 2: Esto es lo que veo como el encabezado de mi archivo de ajustes:

No soy un experto en física, solo un matemático, por lo que no estoy seguro de cómo proceder a partir de aquí. Cualquier ayuda sería apreciada…

Edición 3: Algo parece cambiar cuando pongo el terminal en modo de pantalla completa. ¿Hay alguna información útil aquí?


Yo personalmente uso Astropy, específicamenteastropy.io.fits, aunque no soy un usuario experimentado de archivos FITS y realmente no conozco su diseño. Como un fragmento de código de ejemplo, a menudo cargo datos de archivos FITS usando

de astropy.io la importación se ajusta a datos = se adapta.open ('archivo_datos. adaptaciones') [0] .data

Encontrará más información en la documentación del módulo FITS.


  1. No hay una respuesta clara a esto, todo dependería de su archivo específico, del cual, por supuesto, no sabemos nada. Sin embargo, es probable que la información que necesita exista en el encabezado de ajustes (si es que existe). Supongo que estás leyendo tu archivo de ajustes usando elastropíapaquete ya que está usando Python (si no, definitivamente compruébelo). Si ese es el caso, puede leer todo sobre cómo mirar los encabezados del archivo de ajustes en la documentación de AstroPy. Tendrá que mirar los archivos de encabezado y escanear para ver si alguna información incluida con el archivo de ajustes le indica con precisión en qué parte del cielo está la imagen.
  2. Ninguna imagen será "circular". Las imágenes se toman en CCD cuadrados y, por lo tanto, producen imágenes cuadradas del cielo. Una imagen "normal" será cuadrada.

También hay un paquete de software, llamado DS9, que utilizo para ver tanto la imagen como el encabezado. Edito los encabezados en Python usando astropy.


Python con imagen en formato de ajustes - Astronomía

Presento un código Python simple para escalar imágenes FITS usando lineal, sqrt, pow, log10, función asinh, escala z, distribución logística y ecualización de histogramay luego guárdelos en archivos de imagen como PNG. El código también incluye métodos simples para medir los niveles del cielo y encontrar rangos adecuados de valores de píxeles para la rutina de escalado. Espero que el código te sea de utilidad en tus trabajos. Siempre agradezco los comentarios. Tenga en cuenta que estos códigos de Python se presentan como ejemplos en lugar de como un paquete de software completo. El img_scale.py se puede incorporar fácilmente a su propio código para varios métodos de escalado. En los ejemplos dados, puede descubrir cómo se pueden usar varios módulos de gráficos de Python (SciPy, Matplotlib y Python Image Library) para convertir archivos FITS en archivos de imagen convencionales.

La escala de la imagen se da en el archivo del módulo. img_scale.py. Hay varios códigos de Python de ejemplo que generan imágenes en color RGB y generan imágenes de banda única. Por favor, lea Lupton et al. (2004) sobre cómo producir imágenes RGB y métodos de escalado, y Lupton et al. (1999) sobre la escala asinh. Si está buscando una introducción general a este problema, puede encontrar útil la explicación del video de Youtube "Cómo los científicos colorean las fotografías del espacio". El código que se presenta aquí no es para la producción interactiva de imágenes. También sugiero a las personas que verifiquen STIFF, que es bastante útil para producir archivos de imágenes de alta calidad, APLpy y dmimg2jpg en CIAO, que admiten múltiples relaciones de escala para producir imágenes RGB. f2n.py es también una herramienta sencilla y útil escrita en Python para convertir imágenes FITS a archivos PNG mediante la biblioteca de imágenes de Python.

La conversión de imágenes astronómicas a imágenes convencionales consta de dos pasos que se utilizan comúnmente en el mapeo de tonos con imágenes de alto rango dinámico. En el primer paso, puede cambiar los valores de píxeles de las imágenes FITS a valores entre 0.0 y 1.0 usando img_scale.py. En el segundo paso, estos valores se dividen en 256 intervalos para imágenes de 8 bits y luego se guardan como archivos gráficos.

El archivo anterior tiene códigos de ejemplo y archivos FITS como datos de ejemplo, así como img_scale.py. El código necesita NumPy. PyFITS también es necesario para leer archivos FITS. El código build_rgb_w_asinh_SciPy.py usa Ciencia para producir archivos de imagen. Mientras tanto, el código build_single_matplotlib.py y build_rgb_w_asinh_matplotlib.py usan Matplotlib en lugar de SciPy. Si quieres usar Biblioteca de imágenes de Python (PIL) en lugar de Matplotlib y SciPy, marque build_rgb_w_asinh_PIL1.py o build_rgb_w_asinh_PIL2.py. Cuando desee cambiar los mapas de color para una imagen de una sola banda utilizando Matplotlib, busque las tablas de los mapas de color (1D y 2D). Las siguientes son imágenes de ejemplo. Al producir las siguientes imágenes, los valores de píxeles de los archivos FITS se redujeron a algunos rangos que se dividen en 256 intervalos por igual. Los valores de píxeles para las imágenes se asignan como el valor más cercano para los 256 intervalos. Puede que le interesen los mapas de color de Matplotlib para visualizar una imagen de banda única mediante Matplotlib. También puede que le interesen las herramientas interactivas que pueden leer imágenes FITS de alto rango dinámico y convertirlas a otros formatos. DS9 y Aladin son herramientas muy conocidas en la comunidad astronómica. ImageJ también se puede utilizar para este propósito con muchos métodos de análisis de imágenes.


asinh (beta = 1.0)


asinh (beta = 5.0)


asinh (beta = 20.0)


RGB tipo 1


RGB tipo 2


lineal


asinh (beta = 1.0)


asinh (beta = 5.0)


asinh (beta = 20.0)


ecualización de histograma


distribución logística


ejemplo 1 de asinh (RGB)


ejemplo 2 de asinh (RGB)


RGB tipo 1


RGB tipo 2


RGB tipo 3


Python con imagen en formato de ajustes - Astronomía

Un archivo FITS (en cinta o disco) consta de un conjunto de registros de encabezado seguidos de un conjunto de registros de datos. Todos los registros de ajustes tienen una longitud de 2880 bytes (igual a 36 tarjetas de 80 bytes), pero los datos grabados pueden usar tamaños de bloque que son un múltiplo integral de esto para aumentar la eficiencia del almacenamiento. Es común un tamaño de bloque de 10 (registros de 28.800 bytes). Todos los datos se escriben como palabras de 8 bits (360 palabras por registro).

  • SENCILLO: = T es un archivo FITS simple, F en caso contrario
  • BITPIX: número de bits por palabra en los datos
  • NAXIS: número de ejes de la matriz. 0 indica que no sigue ningún dato. Si NAXIS & gt 0, debe seguir una serie de palabras clave NAXISn. donde n está entre 1 y NAXIS, inclusive, dando la longitud de cada eje de la matriz.
  • entero de 8 bits sin signo (BITPIX = 8)
  • Entero de 16 bits con signo (BITPIX = 16)
  • Entero de complemento a dos de 32 bits (BITPIX = 32)
  • Formato de coma flotante IEEE de 32 o 64 bits (BITPIX = -32 o -64)

Los archivos FITS pueden incluir extensiones. A menudo, se encuentra que un solo archivo FITS se utiliza para almacenar una serie de tablas de datos o imágenes. En este caso, el encabezado debe incluir la línea
Cada extensión es un archivo FITS separado, con su propio encabezado y sección de datos. Algunos lectores FITS (como el de IRAF) no pueden manejar extensiones.

El formato FITS no solo se usa para imágenes, también se puede usar para datos tabulares. Si la palabra de encabezado XTENSION = "BINTABLE", entonces es un archivo de tabla binaria. FITS también admite tablas ASCII (texto).

Leer tus imágenes FITS

Utilizar el SXPAR función para extraer palabras de encabezado. Por ejemplo, si el nombre del objetivo se almacena en el encabezado de ajustes con la palabra clave 'OBJETO', puede extraerlo en la variable de cadena objetivo as target = sxpar (h, 'object') tenga en cuenta que objetivo es un nombre de variable arbitrario. El segundo argumento para SXPAR es una cadena que corresponde a la palabra clave adecuada. Si la palabra clave no está presente, SXPAR devuelve un valor de 0.

Tenga en cuenta que el archivo FITS principal no sabe cuántas extensiones siguen. Incluso si FITS palabra clave EXTEND = T, no es necesario que haya extensiones. Si intenta leer una extensión que no está allí, recibirá un mensaje de advertencia.

Para leer una extensión de tabla binaria, comience con READFITS.
TBAYUDA, h, donde h es el encabezado de la extensión, le dirá qué hay en cada columna de la tabla. TBINFO, h, s colocará esa información en una estructura.
Para extraer la columna i, use la función x = TBGET (h, d, i).

Las imágenes de astrocut de TESS se almacenan como una serie de datos unidimensionales en una extensión de tabla binaria. Tendrá que volver a formatear los datos utilizando la información del encabezado (el tamaño del corte que solicitó).

Los procedimientos para leer tablas de ajustes ASCII comienzan con las letras FT.

La documentación para las rutinas FT * y TB * se puede encontrar en la Biblioteca de usuarios de astronomía de IDL.

PITÓN

Y lea el archivo de ajustes usando la función fit.open ().
hdul = cabe.open (cabe_archivo) # hdul.close () cerrará el archivo.

hdul es la lista de todas las unidades de datos de encabezado del archivo. Para acceder a las diferentes extensiones del archivo FITS, simplemente use el índice respectivo para la extensión. Para imprimir la lista de unidades de datos de encabezado almacenadas en el archivo FITS, utilice:
hdul.info ()

Y para acceder a los datos y el encabezado de cada extensión: | br> data = hdul [1] .data # Los datos de la extensión 1 del archivo FITS
hdr = hdul [1] .header # El encabezado de la extensión 1 del archivo FITS

La actualización de los valores del encabezado se puede realizar utilizando las palabras clave asociadas de la siguiente manera:
hdr ['targname'] = 'NGC121-a' # El valor de la palabra clave del nombre de destino se ha cambiado a la cadena 'NGC121-a'


Juega con archivos FITS

La misma conferencia está ahora en formato Notebook, ver allí: http://python-astro.blogspot.mx/2014/09/interacting-with-files-reading-writing.html

¿Qué es el formato FITS?

El formato FITS es la forma más popular de guardar e intercambiar datos astronómicos. Los archivos están organizados en unidades, cada una de las cuales contiene un encabezado legible por humanos y un dato. Esta estructura se denomina HDU (encabezado / unidad de datos).

Un archivo FITS puede contener una o más HDU, la primera de las cuales se denomina "primaria" y el resto se denominan "extensiones". La HDU primaria generalmente contiene espectro 1D, imagen 2D o cubo de datos 3D, aunque es posible cualquier dimensión de 0 a 999. Los datos son números enteros de 1, 2 o 4 bytes o números reales de 4 u 8 bytes.

Las extensiones pueden contener o matrices como en la HDU primaria o tablas ascii o tablas binarias.
Si un archivo FITS contiene solo tablas, su HDU principal no contiene datos, sino solo encabezado.

Tanto los encabezados como los datos en un archivo FITS están organizados en bloques de 2880 bytes. El encabezado contiene líneas de 80 bytes, cada una de las cuales consta de una palabra clave de 8 bytes seguida en la mayoría de los casos por '=' en las posiciones 9 y 10 y luego el valor de la palabra clave. El resto de la línea es una cadena de comentarios que comienza con '/'. Cada encabezado comienza con las siguientes líneas

SIMPLE = T / archivo se ajusta al estándar FITS
BITPIX = 16 / número de bits por píxel de datos
NAXIS = 2 / número de ejes de datos
NAXIS1 = 440 / longitud del eje de datos 1
NAXIS2 = 300 / longitud del eje de datos 2

que define el formato del archivo como FITS estándar, el formato de los datos y las dimensiones de los datos almacenados.

Un bloque de 2880 bytes contiene 36 líneas de 80 caracteres por línea. El encabezado puede tener varios bloques de 36 líneas. El último bloque se identifica por la presencia de la palabra clave 'END'. El siguiente bloque de 2880 bytes contiene la primera parte de los datos. Las líneas vacías después de la palabra clave 'END' se rellenan con espacios en blanco y los bytes no utilizados desde el final de los datos hasta el final del bloque de 2880 bytes se rellenan con NULL.

La descripción completa del formato FITS se puede encontrar en http://fits.gsfc.nasa.gov/fits_primer.html

PyFITS

Como se puede ver, leer archivos FITS no es tan simple como leer columnas de datos. Afortunadamente, existe un paquete de Python llamado PyFITS que facilita mucho la tarea.

El paquete se puede descargar desde

La documentación se puede encontrar en la misma página web.

Aunque es posible descargar e instalar el paquete, es mucho más fácil instalarlo con

easy_install pyfits
o
pip pyfits

Información sobre easy_install: AQUÍ y en pip: AQUÍ.
Hice eso en máquinas Mac y Linux y funcionó muy bien.

Cómo leer un archivo FITS

Primero, como de costumbre, hay que importar el paquete pyfits

luego el archivo se lee con

donde utilicé uno de mis archivos FITS del espectrógrafo echelle de San Pedro Martir. El archivo se puede descargar desde AQUÍ.

El resultado hdulist es una lista de objetos HDU. En el caso de un archivo simple, solo hay una HDU principal, por lo que la lista contiene solo un elemento

La información sobre lo que contiene el archivo se puede obtener llamando al método info ():

hdulist.info ()
Nombre de archivo: n10017o.fits
No. Nombre Tipo Tarjetas Dimensiones Formato
0 PRIMARIO PrimaryHDU 62 (2154, 2048) int16

La tabla dice que solo hay una HDU primaria que contiene una imagen de 2154 X 2048 con datos almacenados en números enteros de 2 bytes (16 bits).

Como se describió anteriormente, la HDU (encabezado / unidad de datos) contiene encabezado y datos. El encabezado es un diccionario. Para ver qué palabras clave se usaron en el encabezado, se puede hacer:

hdulist [0] .header.keys ()
['SENCILLO',
'BITPIX',
'NAXIS',
'NAXIS1',
'NAXIS2',
'AMPLIAR',
'COMENTARIO',
'BZERO',
'BSCALE',
'EXPTIME',
'DETECTOR',
'ORIGEN',
'OBSERVAT',
'TELESCOPIO',
'LATITUD',
'LONGITUD',
'ALTITUD',
'SEGUNDO',
'ZONA HORARIA',
'OBSERVADOR',
'OBJETO',
'INSTRUME',
'GAINMODE',
'FILTRAR',
'IMGTYPE',
'EQUINOCCIO',
'S T',
'UTAH',
'JD',
'FECHA-OBS',
'CCDSUM',
'REAL ACADEMIA DE BELLAS ARTES',
'DIC',
'AH',
'MASA DE AIRE',
'TMMIRROR',
'TSMIRROR',
'TAIR',
'XTEMP',
'HUMEDAD',
'ATMOSBAR',
'VIENTO',
'WDATE',
'FECHA',
'NAMPS',
'CCDNAMPS',
'AMPNAME',
'CREADOR',
'VERSIÓN',
'HISTORIA']

y obtener el valor de una palabra clave determinada

hdulist [0] .header ['OBJECT']
"BD +59 363"

El encabezado se puede imprimir tal como aparece en el archivo mediante

imprimir hdulist [0] .header.ascardlist ()
SIMPLE = T / se ajusta al estándar FITS
BITPIX = 16 / tipo de datos de matriz
NAXIS = 2 / número de dimensiones de la matriz
NAXIS1 = 2154 / longitud del eje de datos 1
NAXIS2 = 2048 / longitud del eje de datos 2
EXTENDER = T
COMMENT FITS (Sistema de transporte de imágenes flexible) se define en 'Astronomía
COMENTARIO y Astrofísica ', volumen 376, página 359 código bibliográfico: 2001A & ampA. 376..359H
BZERO = 32768 / BZERO
BSCALE = 1 / BSCALE
EXPTIME = 0.0 / Tiempo de integración, seg.
DETECTOR = 'e2vm2 E2V-4240' / Tipo CCD
ORIGEN = 'UNAM' / OAN SPM, IA-UNAM
OBSERVAT = 'SPM' / Observatorio
TELESCOPIO = '2.12m' / telescopio
LATITUD = '+31: 02: 39' / Latitud
LONGITUD = '115: 27: 49' / Longitud
ALTITUD = 2800 / altitud
SECONDAR = -1 / F / Tipo secundario
TIMEZONE = 8 / Zona horaria
OBSERVER = 'Leonid' / Nombre del observador
OBJETO = 'BD +59 363' / Objeto
INSTRUME = 'Echelle' / Instrumento
GAINMODE = 1 / Factor de ganancia en el CCD
FILTER = 'Ninguno' / Filtro
IMGTYPE = 'cero' / Tipo de imagen
EQUINOCCIO = 2011.7 / Equinoccio
ST = '02: 19: 51.2 '/ Hora lateral
UT = '11: 28: 28 '/ Hora universal
JD = 2455803.5 / Fecha juliana
DATE-OBS = '2011-08-30' / Fecha de observación UTM
CCDSUM = '1 1' / Intervalos [Cols: Rows]
RA = '02: 13: 22.2' / Ascensión recta
DEC = '52''14''44.0' / ​​Declinación
AH = '00: 06: 28.0' / ​​Ángulo horario
MASA DE AIRE = 1.073 / Masa de aire
TMMIRROR = 0 / Temperatura del espejo primario (grados centígrados)
TSMIRROR = 0 / Temperatura del espejo secundario (grados centígrados)
TAIR = 0 / Temperatura del aire del telescopio interno (grados centígrados
XTEMP = 14,6 / Temperatura exterior (grados centígrados)
HUMEDAD = 44.0 /% humedad externa
ATMOSBAR = 731.7 / Presión atmosférica en mb
VIENTO = 'S a 24,1 km / h' / Dirección del viento
WDATE = '11: 28: 10, 30/08/11 '/ Fecha de adquisición del clima (hora local)
DATE = '2011-08-30T11: 28: 29' / fecha de creación del archivo (AAAA-MM-DDThh: mm: ss UT)
NAMPS = 1 / Número de amplificadores
CCDNAMPS = 1 / Número de amplificadores utilizados
AMPNAME = '1 canal' / nombre del amplificador
CREATOR = 'Python Oan ccds' / Nombre de la tarea de software que creó el archivo
VERSION = '4.12D' / Versión de software de aplicación
COMENTARIO Visite nuestro sitio meteorológico http://www.astrossp.unam.mx/weather15
COMENTARIO para los datos meteorológicos completos de su noche de observación
HISTORIA bin2fits V1.0
Programador HISTORIA: Enrique Colorado [[email protected]]
HISTORIA Observatorio Astronómico Nacional -UNAM
HISTORIA V1.00 Por Arturo Nunez y Colorado & gt Portado a Python usando pyfits
HISTORIA V0.50 Por E. Colorado & gt Se agregaron temperaturas en los espejos interiores
HISTORIA V0.49 Por E. Colorado & gt Parámetro BIASSEC agregado
HISTORIA V0.48 Por E. Colorado & GT Información adicional para cálculos de enfoque automático
HISTORIA V0.4 Por E. Colorado & gt Ahora incluimos la zona horaria y eliminamos la latitud. firmar
HISTORIA V0.3 Por E. Colorado & gt Ahora incluimos datos meteorológicos
HISTORIA V0.2 Por E. Colorado & gtGeneral OAN Working Release

Los datos del archivo son accesibles con

y se puede ver con [no te olvides de importar matplotlib.pyplot como plt antes de ejecutar esto]:

Una columna de los datos se puede trazar con

donde estoy trazando la columna número 1000. De la misma manera, una línea de los datos se traza con:

Los datos son objetos numerosos, por lo que todas las manipulaciones están disponibles.

Algo más sobre la visualización de imágenes.

La función principal de matplotlib para mostrar imágenes es imshow. Tiene varios parámetros de los cuales los más importantes son el que controla el esquema de color y los que controlan el rango dinámico.

plt.imshow (datos, cmap = cm.gray, vmin = 1000, vmax = 10000)

cmap controla el mapa de pseudocolor (igual que color = en IDL). Los mapas de colores predefinidos se pueden ver en http://matplotlib.sourceforge.net/examples/pylab_examples/show_colormaps.html

vmin y vmax controla el rango de valores que se asignan en el rango [0,1] donde 0 es negro (el color más oscuro) y 1 es blanco (el color más claro).

origen = 'superior' | 'más bajo', coloque el píxel con coordenadas 0,0 en la esquina superior o inferior del gráfico

extensión = (xmin, xmax, ymin, ymax) - Este parámetro define los números escritos en los ejes. Sin cambios en la imagen.

Usar tablas FITS

Para este ejemplo, usaré una obtención de espectro con la cámara de alta dispersión a bordo de IUE.
El archivo se abre como de costumbre:
hdulist = pyfits.open ('swp04345.mxhi')

pero ahora hdulist tiene 2 elementos (2 unidades de encabezado / datos):

Podemos ver que el encabezado principal tiene dimensión (), hijo no contiene ningún dato. Los datos están en la extensión.

hdulist.info ()
Nombre de archivo: swp04345.mxhi
No. Nombre Tipo Tarjetas Dimensiones Formato
0 PRIMARIO PrimaryHDU 421 () uint8
1 MEHI BinTableHDU 61 60R x 17C [1B, 1I, 1D, 1I, 1D, 1E, 1E, 768E, 768E, 768E, 768I, 768E, 768E, 1I, 1I, 1E, 7E]

El primer encabezado contiene la información mínima:

imprimir hdulist [0] .header.ascardlist () [: 5]
SIMPLE = T / Formato estándar FITS
BITPIX = 8 / Datos binarios
NAXIS = 0 / Imagen bidimensional
EXTEND = T / Extensiones presentes
TELESCOP = 'IUE' / Explorador ultravioleta internacional

El número de ejes es 0, lo que significa que no hay ningún bloque de datos en la HDU primaria. El encabezado de la segunda HDU comienza con la palabra clave XTENSION y con la especificación de los datos

imprimir hdulist [1] .header.ascardlist () [: 5]
XTENSION = 'BINTABLE' / Extensión de tabla binaria
BITPIX = 8 / Datos binarios
NAXIS = 2 / Matriz de tabla bidimensional
NAXIS1 = 16961 / Ancho de fila en bytes
NAXIS2 = 60 / Número de pedidos

Para seguir avanzando, necesitamos saber qué hay en la tabla. Como es habitual, las columnas tienen nombres y tipos de datos almacenados. Esta información se puede obtener utilizando el atributo de columna de hdulist:


SE ADAPTA A Bibliotecas De E / S

Se encuentra disponible una discusión completa de los formatos FITS con enlaces a la documentación definitiva. Dado que los diferentes paquetes admiten distintos subconjuntos de los formatos y convenciones FITS disponibles, los resumimos brevemente aquí.

  • Las imágenes FITS generalmente son compatibles y pueden incluir matrices dimensionales de 1 a 999 bytes sin firmar, enteros de 2 y 4 bytes con signo y números de punto flotante de 4 y 8 bytes utilizando representaciones IEEE. Algunos paquetes solo pueden leer imágenes en la primera HDU.
  • Las tablas binarias FITS almacenan información tabular en una representación binaria. Cada celda de la tabla puede ser una matriz, pero la dimensionalidad de la matriz debe ser constante dentro de una columna. Las tablas binarias pueden admitir los tipos de datos disponibles para imágenes, así como variables lógicas (almacenadas como T y F), matrices de bits, caracteres, cadenas (almacenadas como matrices de caracteres) y números complejos de 8 y 16 bytes.
  • Las tablas FITS ASCII almacenan información tabular con toda la información numérica almacenada en formatos ASCII. Si bien las tablas ASCII son generalmente menos eficientes que las tablas binarias, se pueden hacer relativamente legibles por humanos y pueden almacenar información numérica con un tamaño y precisión esencialmente arbitrarios (por ejemplo, reales de 16 bytes).
  • La extensión de grupos aleatorios está desaprobada pero, no obstante, se usa ampliamente en radioastronomía. Permite grupos de matrices donde cada elemento del grupo tiene exactamente la misma dimensionalidad.

Muchos lectores de FITS pueden leer información que ha sido almacenada usando algoritmos de compresión estándar, particularmente los archivos .Z y .gz creados por las utilidades Unix compress y gzip. FITS también admite la compresión internamente tanto para imágenes como para tablas binarias, lo que puede ser más eficiente para datos astronómicos y también permite el acceso a metadatos de imágenes sin comprimir.

  • La convención de cadenas largas permite que los encabezados FITS especifiquen valores de cadena de más de 68 caracteres.
  • La convención de agrupación jerárquica FITS define una especie de tabla FITS que describe una asociación de HDU que puede abarcar varios archivos.
  • La convención de herencia de encabezados permite que la información del encabezado FITS en la HDU principal se utilice para la información predeterminada en las HDU posteriores.
  • La convención de palabras clave de HIERARCH permite que las palabras clave FITS sean más largas que el valor estándar de 8 caracteres.

C y Fortran

Pitón

C # (plataforma Microsoft .Net)

Fortran

Pascal

JavaScript

Una biblioteca de JavaScript independiente para leer el formato de archivo astronómico FITS. Esta biblioteca está diseñada para navegadores modernos que admiten el objeto DataView. Estos incluyen al menos Chrome 9, Firefox 15 y Safari 6. Esta biblioteca puede usarse para leer varias formas del formato FITS. Esta implementación está en desarrollo activo. En su estado actual admite lo siguiente: lectura de múltiples unidades de datos de encabezado, lectura de imágenes FITS, lectura de cubos de datos, lectura de tablas binarias, lectura de tablas ASCII y descompresión de imágenes usando el algoritmo de Rice.

La biblioteca está disponible en GitHub.


Dado que el archivo es grande, lo abriré con memmap = True para evitar problemas de almacenamiento de RAM.

Estoy interesado en leer EVENTOS, que contiene información sobre cada fotón de rayos X que golpea el detector.

Para averiguar qué información contiene la tabla, imprimiré los nombres de las columnas.

Ahora, tomaremos estos datos y los convertiremos en una tabla de astropía. Si bien es posible acceder a las tablas FITS directamente desde el atributo .data, el uso de Table tiende a hacer más conveniente una variedad de tareas comunes.

Por ejemplo, una vista previa de la tabla se puede ver fácilmente simplemente ejecutando una celda con la tabla como última línea:

& ltTable length = 483964 & gt
horaccd_idid_nodoexpnochipxchipytdetxtdetydetxdetyXyphapha_roenergíaPifltgradecalificaciónestado [32]
float64int16int16int32int16int16int16int16float32float32float32float32int32int32float32int32int16int16bool
238623220.90933689208512439815095.644139.04168.075087.773548353413874.7951164Falso ... Falso
238623220.9093168437237489534984865.574621.183662.24915.936676292621.19180642Falso ... Falso
238623220.9093268719289484337804814.834340.253935.224832.553033287512119.083183Falso ... Falso
238623220.9093068103295483731644807.364954.383324.464897.288317733253.0422300Falso ... Falso
238623220.9093168498314481835594788.994560.333713.634832.733612343914214.4974642Falso ... Falso
238623220.9093368791469466338524635.454268.053985.854645.935004381952.7213400Falso ... Falso
238623220.9093368894839429339554266.644165.324044.554267.68357133267.5322400Falso ... Falso
238623220.9093368857941419139184164.814202.233995.944170.829758043817.0426200Falso ... Falso
238623220.9093368910959417339714146.994149.364046.344146.915764462252.7315500Falso ... Falso
238623220.9093368961962417040224144.134098.54096.524138.09157213546154.1142200Falso ... Falso
. . . . . . . . . . . . . . . . . . .
238672393.551315723933199493350404902.913082.55212.54766.23122211814819.8333100Falso ... Falso
238672393.551215723596412472047034691.513418.994853.514595.83142302012536.9859106Falso ... Falso
238672393.5513157231000608452451074494.713015.725230.894353.026585852599.5717900Falso ... Falso
238672393.551115723270917421543774188.333743.64472.074134.223861346315535.81024164Falso ... Falso
238672393.551015723232988414443394117.613781.884425.754068.49168014996653.0845600Falso ... Falso
238672393.5910115723366103316447663140.93356.324733.683048.573621360214362.598400Falso ... Falso
238672393.5910315723937646370741953681.213925.554231.843651.973717348614654.0100483Falso ... Falso
238672393.5910115723406687374847263723.43396.254762.423631.72167615366652.8345600Falso ... Falso
238672393.5910115723354870393147783906.073344.774834.993807.08243621659672.88663164Falso ... Falso
238672393.6326115723384821325925233230.925596.852519.223401.034913561875.9412900Falso ... Falso

Podemos extraer datos de la tabla haciendo referencia al nombre de la columna. Por ejemplo, haré un histograma para la energía de cada fotón, dándonos una idea del espectro (doblado con la eficiencia del detector).


Decodificador de imágenes PIL FITs

Estoy tratando de leer un archivo de imagen FIT para mi investigación y decidí
que escribir un decodificador de archivos para la biblioteca de imágenes de Python sería el
forma más fácil de lograr esto para mis necesidades. FIT es un formato de datos sin procesar
utilizado en astronomía.

De todos modos, seguí el ejemplo en la documentación de PIL en línea, y
También eché un vistazo al archivo de código auxiliar de imagen FIT incluido con PIL 1.1.5. I
cociné algo que debería funcionar (o casi funcionar), pero sigo
se encuentra con uno de los dos errores (a continuación). El quid del problema
parece ser que mi complemento no se está registrando correctamente y no
siendo leído en tiempo de ejecución cuando llamo a Image.open ().

1.) La biblioteca carga el archivo FitsStubImagePlugin.py desde el
directorio de paquetes de sitio (en lugar de mi complemento) y luego da el
siguiente error:

Archivo
& quot / System / Library / Frameworks / Python.framework / Versions / 2.3 / lib / python2.3 / site-packages / PIL / ImageFile.py & quot,
línea 255, en carga
subir IOError (& quot no se puede encontrar el cargador para este archivo% s & quot% self.format)
IOError: no se puede encontrar el cargador para este archivo FITS

2.) Elimino los archivos FitsStubImagePlugin.py, pyc y pego mi complemento
en el directorio en su lugar (mi complemento ya estaba en PYTHONPATH
antes de). Entonces me sale el siguiente error:

Rastreo (llamadas recientes más última):
Archivo & quotFitsImagePlugin.py & quot, línea 111, en?
image = Image.open (cabe_nombre) .save (jpg_name)
Archivo
& quot / System / Library / Frameworks / Python.framework / Versions / 2.3 / lib / python2.3 / site-packages / PIL / Image.py & quot,
línea 1745, en abierto
generar IOError (& quot no se puede identificar el archivo de imagen & quot)
IOError: no se puede identificar el archivo de imagen

Esto parece que estoy haciendo (o no estoy haciendo) algo realmente estúpido.
o los documentos están desactualizados. ¡Cualquier ayuda será muy apreciada!

##
# Instale el controlador de imágenes FITS específico de la aplicación.
#
# @param handler Objeto de controlador.

def register_handler (manejador):
_handler global
_handler = manipulador

def _accept (prefijo):
devolver prefijo [: 6] == & quotSIMPLE & quot

clase FitsImageFile (ImageFile.StubImageFile):
#class FitsImageFile (ImageFile.ImageFile):

formato = & quot se ajusta & quot
format_description = & quotFITs imagen sin procesar & quot

# byte offset para imágenes FIT
byte_offset = 2880

# Verifique el encabezado para ver una imagen FIT válida
header_data = self.fp.read (byte_offset)

# los encabezados se almacenan en cadenas de 80 caracteres, así que ordénelos
en un
# bonita lista
i = 0
encabezados = []
while header_data [i]! = & quot n & quot y i & lt len ​​(header_data):
headers.append (header_data [i: i + 80])
i + = 81

# analizar encabezados individuales
ok = falso
para encabezado en encabezados:
palabras = encabezado.split ()

intentar:
palabra clave = palabras [0]
valor = palabras [2]
excepto IndexError:
ok = falso
rotura

si la palabra clave == & quotNAXIS & quot y el valor == 2:
ok = Verdadero
palabra clave elif == & quotNAXIS1 & quot:
xsize = valor
palabra clave elif == & quotNAXIS2 & quot:
ysize = valor

si no esta bien:
aumentar ValueError (& quot el archivo no es una imagen FIT válida & quot)


Ver los datos de la imagen y obtener estadísticas básicas & # 182

Consigamos algunas estadísticas básicas sobre nuestra imagen.

Trazar un histograma & # 182

Para hacer un histograma con matplotlib.pyplot.hist (), necesito convertir los datos de un 2-D a una matriz en algo unidimensional.

En este caso, estoy usando ndarray.flatten () para devolver una matriz numpy 1-D.

Visualización de la imagen con una escala logarítmica & # 182

¿Quiere utilizar una escala de colores logarítmica? Para hacerlo, necesitamos cargar el objeto LogNorm desde matplotlib.


Ver los datos de la imagen y obtener estadísticas básicas¶

Obtengamos algunas estadísticas básicas sobre nuestra imagen:

Trazando un histograma¶

Para hacer un histograma con matplotlib.pyplot.hist (), necesitaremos convertir los datos de una matriz 2D a algo unidimensional.

En este caso, usemos ndarray.flatten () para devolver una matriz numérica 1D.

Visualización de la imagen con una escala logarítmica¶

¿Qué pasa si queremos utilizar una escala de color logarítmica? Para hacerlo, necesitaremos cargar el objeto LogNorm desde matplotlib.


Imcombina suma (o promedio) un conjunto de imágenes FITS

imcombina ahora se distribuye con v1.2 y posteriores del paquete CCDProc. Descargue e instale la última versión de ccdproc en lugar de instalar imcombina por separado. A partir del 23 de noviembre de 1998, imcombina ya no está disponible como un artículo separado.

Uso:

Opciones:

infile1 infile2. los nombres de los archivos FITS de entrada que se combinarán en el archivo de salida.

a Calcule el promedio de los archivos de entrada en lugar de la suma.

norte Normalice la imagen de salida para que tenga un valor de datos medio de 1,0

Bsc: ec, sr: er Calcule el valor medio de los datos para la opción -n dentro de la región de interés delimitada por sc: ec en columnas y sr: er en filas. El valor predeterminado es promediar la imagen completa.

s imagen de salida en formato de entero corto (BITPIX = 16), el valor predeterminado es punto flotante (BITPIX = -32).

l imagen de salida en formato de entero largo (BITPIX = 32), el valor predeterminado es punto flotante (BITPIX = -32).

h Imprime un mensaje de ayuda.

Ejemplos:

Ejemplo 1: Suma simple de imágenes

Una forma alternativa de hacer esto habría sido escribir: o Usando el rango numérico y las opciones de comodín del shell (respectivamente). En general, utilice los comodines con precaución.

Ejemplo 2: Media de imágenes

También se permite el uso de argumentos de rango numérico o comodines, como en el Ejemplo 1.

Ejemplo 3: Plano medio normalizado

Ejemplo 4: Utilizando imcombina con ccdproc

Dentro de cada imagen de campo plano reducido, la región de interés para calcular la normalización serán las columnas 10-500 ya lo largo de las filas 10-500, con la idea de evitar los bordes en este dispositivo.