Astronomía

Matriz 3D en datos FITS

Matriz 3D en datos FITS


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.

Soy un astrónomo aficionado que actualmente trabaja en el conjunto de datos del telescopio Spitzer con python (astropy y aplpy). De los ejemplos en el sitio web de astropy, entendí que los datos FITS son una forma de representar datos de imágenes con encabezados legibles por humanos. Sin embargo, ahora tengo una imagen de ajuste (SPITZER_I2_46469632_0000_0000_2_bcd.fits) que es una matriz 3D de dimensiones (64, 32, 32). Creo que la segunda y tercera coordenadas son la longitud y la altura de la imagen en píxeles. ¿Qué pasa con la primera dimensión? ¿Cómo interpreto esas imágenes yYayas en los datos?


Me parece que el cuadro completo de Spizter debería ser normalmente de 256x256 pero, si se observa una fuente muy brillante o cuando se requiere una alta resolución temporal, se realiza un modo de observación diferente en el que solo se leen 32x32 píxeles del CCD. Sin embargo, lo que ocurre es que los tiempos de exposición son cortos y se observan un total de 64 fotogramas en total, creando un cubo de datos de 64x32x32. Si lo desea, puede tratar cada fotograma individual de 32x32 como su propia imagen, o bien apilarlos todos juntos para obtener la imagen completa.

Los detalles completos se pueden encontrar aquí.


Sklearn.preprocessing .Normalizer¶

Cada muestra (es decir, cada fila de la matriz de datos) con al menos un componente distinto de cero se reescala independientemente de otras muestras para que su norma (l1, l2 o inf) sea igual a uno.

Este transformador es capaz de trabajar tanto con matrices numpy densas como con matrices scipy.sparse (use el formato CSR si desea evitar la carga de una copia / conversión).

Escalar las entradas a las normas de la unidad es una operación común para la clasificación de texto o el agrupamiento, por ejemplo. Por ejemplo, el producto escalar de dos vectores TF-IDF normalizados a 12 es la similitud de coseno de los vectores y es la métrica de similitud base para el modelo de espacio vectorial comúnmente utilizado por la comunidad de recuperación de información.

Parámetros norma <‘L1’, ‘l2’, ‘max’>, default = ’l2’

La norma a utilizar para normalizar cada muestra distinta de cero. Si se usa norm = "max", los valores se reescalarán por el máximo de los valores absolutos.

Copiar bool, predeterminado = Verdadero

establézcalo en False para realizar la normalización de filas en el lugar y evitar una copia (si la entrada ya es una matriz numpy o una matriz CSR scipy.sparse).

Función equivalente sin la API de estimador.

Este estimador no tiene estado (además de los parámetros del constructor), el método de ajuste no hace nada, pero es útil cuando se usa en una canalización.

Para una comparación de los diferentes escaladores, transformadores y normalizadores, consulte examples / preprocessing / plot_all_scaling.py.

No hacer nada y devolver el estimador sin cambios

Ajústelos a los datos y luego transfórmelos.

Obtenga parámetros para este estimador.

Establezca los parámetros de este estimador.

Escale cada fila distinta de cero de X a la norma de la unidad

No hacer nada y devolver el estimador sin cambios

Este método solo está ahí para implementar la API habitual y, por lo tanto, trabajar en canalizaciones.

Parámetros X de forma (n_muestras, n_features)

Los datos para estimar los parámetros de normalización.

Devoluciones uno mismo objeto

Ajústelos a los datos y luego transfórmelos.

Ajusta el transformador a X e y con parámetros opcionales fit_params y devuelve una versión transformada de X.

Parámetros X forma de matriz (n_samples, n_features)

y tipo matriz de forma (n_samples,) o (n_samples, n_outputs), predeterminado = Ninguno

Valores objetivo (Ninguno para transformaciones no supervisadas).

** fit_params dictar

Parámetros de ajuste adicionales.

Devoluciones X_new matriz de forma ndarray (n_samples, n_features_new)

Obtenga parámetros para este estimador.

Parámetros profundo bool, predeterminado = Verdadero

Si es True, devolverá los parámetros para este estimador y los subobjetos contenidos que son estimadores.

Devoluciones params dictar

Nombres de parámetros asignados a sus valores.

Establezca los parámetros de este estimador.

El método funciona tanto en estimadores simples como en objetos anidados (como Pipeline). Estos últimos tienen parámetros de la forma & ltcomponent & gt __ & ltparameter & gt para que sea posible actualizar cada componente de un objeto anidado.

Parámetros ** params dictar

Devoluciones uno mismo instancia de estimador

Escale cada fila distinta de cero de X a la norma de la unidad

Parámetros X de forma (n_muestras, n_features)

Los datos a normalizar, fila por fila. Las matrices scipy.sparse deben estar en formato CSR para evitar una copia innecesaria.

Copiar bool, predeterminado = Ninguno

Devoluciones X_tr de forma (n_samples, n_features)


Esquema de la solución:

Para muestrear en dos ejes: X e Y, debe muestrear todo el eje Y para cada muestra sobre el eje X.

El muestreo completo sobre ambos ejes producirá rangos, uno sobre el eje X y otro sobre el eje Y.

Cuando termine, debe generar un dominio sobre el eje Z, esto se puede hacer calculando las distancias de las muestras (X, Y).

Luego, el dominio Z se puede ejecutar a través de la función gaussiana para producir el rango gaussiano sobre el eje Z.

Luego, se puede construir un trazador 3D para utilizar los tres rangos para producir una superficie 3D.


Scipy.optimize.leastsq ¶

Scipy proporciona un método llamado leastsq como parte de su paquete de optimización. Sin embargo, existen problemas de remolque:

  • Este método no está bien documentado (no hay ejemplos fáciles).
  • Las estimaciones de error / covarianza en los parámetros de ajuste no son fáciles de obtener.

Internamente, leastsq usa el método de gradiente de Levenburg-Marquardt (algoritmo codicioso) para minimizar la función de puntuación.

El primer paso es declarar la función objetivo que debe minimizarse:

Los datos del juguete ahora deben proporcionarse de una manera más compleja:

Ahora, podemos usar el método de mínimos cuadrados:

Tenga en cuenta el argumento args, que es necesario para pasar los datos a la función.

Esto solo proporciona las estimaciones de los parámetros (a = 0.02857143, b = 0.98857143).


Matriz 3D en datos FITS - Astronomía

Autor: Samuel Farrens
Año: 2018
Versión: 5.0
Correo electrónico: [email protected]
Sitio web: sfarrens.github.io
Documento de referencia: arXiv: 1703.02305

Este repositorio contiene un código Python diseñado para la deconvolución y el análisis de PSF.

El directorio lib contiene varias funciones y clases primarias, pero la mayoría de las herramientas de optimización y análisis se proporcionan en sf_tools.

Después de descargar o clonar el repositorio, simplemente ejecute:

Para ejecutar sf_deconvolve, se deben instalar los siguientes paquetes:

Pitón [Probado con v 2.7.11 y 3.6.3]

La implementación actual de las transformaciones wavelet requiere además el script mr_transform.cc C ++ de la biblioteca Sparse2D (https://github.com/CosmoStat/Sparse2D). Estos scripts de C ++ deberán compilarse para poder ejecutarse. Nota: El método de aproximación de rango bajo se puede ejecutar únicamente en Python sin los binarios de Sparse2D.

El código principal es un script ejecutable llamado sf_deconvolve.py que está diseñado para tomar un (es decir. con efectos PSF y ruido) pila de imágenes de galaxias y un PSF conocido, e intenta reconstruir las imágenes originales. El formato de entrada son archivos binarios Numpy (.npy) o archivos de imagen FITS (.fits).

Los archivos de entrada deben tener el siguiente formato:

Imágenes de entrada: debe ser un archivo binario Numpy o FITS que contenga una matriz 3D de imágenes de galaxias. p.ej. para una muestra de 10 imágenes, cada una con un tamaño de 41x41, la forma de la matriz debe ser [10, 41, 41].

PSF de entrada: debe ser un archivo binario Numpy o FITS que contenga una matriz 2D (para una PSF fija) o una matriz 3D (para una PSF que varíe espacialmente) de imágenes de PSF. Para el caso de variación espacial, el número de imágenes de PSF debe coincidir con el número de imágenes de galaxias correspondientes. p.ej. Para una muestra de 10 imágenes, los códigos esperan 10 PSF.

Consulte los archivos proporcionados en el directorio de ejemplos como referencia.

Ejecutando el script ejecutable

El código se puede ejecutar en una terminal (no en una sesión de Python) de la siguiente manera:

Donde INPUT_IMAGES.npy denota el archivo binario Numpy que contiene la pila de imágenes de galaxias observadas, PSF.npy denota el PSF correspondiente a cada imagen de galaxia y OUTPUT_NAME especifica la ruta de salida y el nombre del archivo.

Alternativamente, los argumentos del código se pueden almacenar en un archivo de configuración (con cualquier nombre) y el código se puede ejecutar proporcionando el nombre del archivo precedido por una @.

Se proporciona un archivo de configuración de ejemplo en el directorio de ejemplos.

Ejecutando el código en una sesión de Python

El código se puede ejecutar en una sesión activa de Python de dos formas. Para cualquier enfoque, primero importe sf_deconvolve:

El primer enfoque simplemente ejecuta el script completo donde los argumentos de la línea de comando se pueden pasar como una lista de cadenas:

El segundo enfoque supone que el usuario ya ha leído las imágenes y los archivos PSF en la memoria y desea devolver los resultados de la deconvolución a la memoria:

Donde INPUT_IMAGES e INPUT_PSFS son matrices Numpy. Las imágenes desconvolucionadas resultantes se guardarán en la variable primal_res.

En ambos casos es posible leer un archivo de configuración predefinido.

El siguiente ejemplo se puede ejecutar en los datos de muestra proporcionados en el directorio de ejemplo.

Este ejemplo toma una muestra de 100 imágenes de galaxias (con efectos PSF y ruido añadido) y las PSF correspondientes, y recupera las imágenes originales utilizando una aproximación de rango bajo a través de la optimización Condat-Vu.

El ejemplo también se puede ejecutar utilizando el archivo de configuración proporcionado.

El resultado serán dos archivos binarios Numpy llamados example_output_primal.npy y example_output_dual.npy correspondientes a las variables primal y dual en el algoritmo de división. Las imágenes reconstruidas estarán en el archivo example_output_primal.npy.

El ejemplo también se puede ejecutar con los archivos FITS proporcionados.

-i ENTRADA, --entrada ENTRADA: Ingrese el nombre del archivo de datos. El archivo debe ser un binario Numpy que contenga una pila de imágenes de galaxias ruidosas con efectos PSF (es decir. una matriz 3D).

-p PSF, --psf PSF: Nombre de archivo PSF. El archivo debe ser un binario Numpy que contenga: (a) un solo PSF (es decir. una matriz 2D para reparado formato) o (b) una pila de PSF correspondientes a cada una de las imágenes de galaxias (es decir. una matriz 3D para obj_var formato).

-h, --ayuda: Muestre el mensaje de ayuda y salga.

-v, --versión: Muestre el número de versión del programa y salga.

-q, - silencioso: Suprima detallado para cada iteración.

-o, - salida: Nombre del archivo de salida. Si no se especifica, los archivos de salida se colocarán en la ruta del archivo de entrada.

--formato de salida Formato de archivo de salida [npy o se adapta].

-k, --current_res: Nombre del archivo de resultados de desconvolución actual (es decir. el archivo que contiene los resultados primarios de una ejecución anterior).

--noise_est: Estimación inicial de la desviación estándar del ruido en las imágenes de galaxias observadas. Si no se especifica, esta cantidad se calcula automáticamente utilizando la desviación absoluta media de las imágenes de entrada.

-m, --modo : Opción para especificar el modo de optimización [all, sparse, lowr o grad]. todas realiza la optimización utilizando tanto la aproximación de rango bajo como la escasez, escaso usando solo escasez, más bajo utiliza solo de rango bajo y graduado usa solo descenso de gradiente. (predeterminado: lowr)

--opt_type : Opción para especificar el método de optimización a implementar [condat, fwbw o gfwbw]. condat implementa el método de división proximal Condat-Vu, fwbw implementa la división Adelante-Atrás con aceleración FISTA y gfwbw implementa el método de división hacia adelante-hacia atrás generalizado. (predeterminado: condat)

--nitro: Número de iteraciones. (predeterminado: 150)

--cost_window: Ventana para medir la función de costo (es decir. intervalo de iteraciones para el cual se debe calcular el costo). (predeterminado: 1)

--convergencia: Tolerancia de convergencia. (predeterminado: 0.0001)

--no_pos: Opción para desactivar la restricción de positividad.

--grad_type: Opción para especificar el tipo de degradado [psf_known, psf_unknown, none]. psf_known implementa la desconvolución con las PSF proporcionadas, psf_unknown simultáneamente mejora el PSF mientras se realiza la deconvolución, ninguno implementa la deconvolución sin descenso de gradiente (solo con fines de prueba). (predeterminado: psf_known)

--lowr_thresh_factor: Factor de umbral de rango bajo. (predeterminado: 1)

--lowr_type: Tipo de regularización de rango bajo [estándar o ngole]. (predeterminado: estándar)

--lowr_thresh_type: Tipo de umbral de rango bajo [suave o duro]. (predeterminado: difícil)

--wavelet_type: Tipo de Wavelet que se utilizará (consulte la documentación de iSap). (predeterminado: 1)

--wave_thresh_factor: Factor de umbral de ondícula. (predeterminado: [3.0, 3.0, 4.0])

--n_repesos: Número de reponderaciones. (predeterminado: 1)

  • --lambda_psf: Parámetro de control de regularización para la estimación de PSF. (predeterminado: 1.0)
  • --beta_psf: Paso de gradiente para la estimación de PSF. (predeterminado: 1.0)

--relajarse: Parámetro de relajación (rho_n en el método Condat-Vu). (predeterminado: 0,8)

--condat_sigma: Parámetro dual proximal Condat. Si la opción se proporciona sin ningún valor, se calcula automáticamente un valor apropiado. (predeterminado: 0,5)

--condat_tau: Condat parámetro primario proximal. Si la opción se proporciona sin ningún valor, se calcula automáticamente un valor apropiado. (predeterminado: 0,5)

-c, --clean_data: Limpiar el nombre del archivo de datos.

-r, - semilla_aleatoria: Semilla aleatoria. Utilice esta opción si los datos de entrada son un subconjunto seleccionado al azar (con semilla conocida) de la muestra completa de datos limpios.

--true_psf: Nombre de archivo verdadero de PSF.

--núcleo: Desviación estándar de píxeles para kernel gaussiano. Esta opción multiplicará los resultados de la deconvolución por un kernel gaussiano.

--métrico: Métrica a errores promedio [mediana o media]. (predeterminado: mediana)

ERROR: svd () obtuvo un argumento de palabra clave inesperado 'lapack_driver'

Actualice sus instalaciones de Numpy y Scipy


0. Descripción de datos de muestra¶

Usaremos un dato de muestra a lo largo de esta publicación. Los datos de muestra son relevantes para la industria del petróleo y el gas. Es originalmente del Dr. Michael Pyrcz, profesor de ingeniería petrolera en la Universidad de Texas en Austin. Los datos originales se pueden encontrar en su repositorio de github. También puede usar la descarga directa o acceder directamente usando la URL de pandas como se muestra a continuación:

Bien Por Permanente AI Frágil TOC VR Pinchar
0 1 12.08 2.92 2.80 81.40 1.16 2.31 4165.196191
1 2 12.38 3.53 3.22 46.17 0.89 1.88 3561.146205
2 3 14.02 2.59 4.01 72.80 0.89 2.72 4284.348574
3 4 17.67 6.75 2.63 39.81 1.08 1.88 5098.680869
4 5 17.52 4.57 3.18 10.94 1.51 1.90 3406.132832
5 6 14.53 4.81 2.69 53.60 0.94 1.67 4395.763259
6 7 13.49 3.60 2.93 63.71 0.80 1.85 4104.400989
7 8 11.58 3.03 3.25 53.00 0.69 1.93 3496.742701
8 9 12.52 2.72 2.43 65.77 0.95 1.98 4025.851153
9 10 13.25 3.94 3.71 66.20 1.14 2.65 4285.026122

Descripción de encabezados

  1. Bien : índice de pozo
  2. Por : porosidad bien media (%)
  3. Permanente : permeabilidad (mD)
  4. AI : impedancia acústica (kg / m2s * 10 ^ 6)
  5. Frágil : índice de fragilidad (%)
  6. TOC : carbono organico total (%)
  7. VR : reflectancia de vitrinita (%)
  8. Pinchar : producción de gas por día (MCFD) - Variable de respuesta

Tenemos seis funciones (Por, Permanente, AI, Quebradizo, TOC, VR) para predecir la variable de respuesta (Pinchar). Basado en la importancia de la característica de permutación que se muestra en la figura (1), Por es la característica más importante, y Frágil es la segunda característica más importante.

La clasificación de las características de permutación está fuera del alcance de esta publicación y no se discutirá en detalle. La importancia de las características se obtiene con la biblioteca rfpimp python. Para obtener más información sobre la clasificación de las características de permutación, consulte este artículo: Tenga cuidado con la importancia predeterminada del bosque aleatorio

Figura 1: Clasificación de características de permutación


Administración Nacional de Aeronáutica y Espacio

El formato de archivo FITS (Flexible Image Transport System) se usa ampliamente en la comunidad astronómica. Pero su complejidad hace que sea muy difícil para los usuarios generales interactuar con los datos en formato FITS.

Las interfaces FORTRAN y C actuales para FITS - FITSIO / CFITSIO, desarrolladas por HEASARC (High Energy Astrophysics Science Archive Research Center) en el Goddard Space Flight Center de la NASA - proporcionan funciones muy potentes y robustas para interactuar con archivos FITS. Sin embargo, la utilización de FITSIO / CFITSIO requiere algunas habilidades básicas de programación de FORTRAN / C, y esta biblioteca de bajo nivel a menudo es más poderosa y, por lo tanto, más compleja que las necesidades del usuario general.

Para proporcionar a los usuarios en general una interfaz simple para leer / escribir archivos FITS, desarrollamos fitTcl, una extensión del lenguaje de script simple pero poderoso TCL / TK, que usa la biblioteca CFITSIO. fitTcl fue desarrollado para el fv proyecto y se distribuye como parte de fv, que se puede obtener visitando el fv sitio web. fitTcl también se puede descargar por separado desde la página web de fitTcl. fitTcl se ejecuta en Unix, Windows y Mac OS.

fitTcl se compila como una biblioteca dinámica que se puede cargar como una extensión TCL. Para cargar fitTcl, escriba el siguiente comando en un shell Tcl (es decir, tclsh): Si no se encuentra la biblioteca, es posible que deba configurar la variable de entorno LD_LIBRARY_PATH (Solo Unix) al directorio que contiene libfitstcl.so o incluya una ruta explícita al archivo.

En fitTcl, cada archivo FITS se trata como un FitsFile objeto. Las siguientes secciones describen cómo crear FitsFile objetos y todos los métodos en un FitsFile objeto.

Manejo FitsFile objetos

encaja abierto modo fileName? objName? Crear un FitsFile objeto, abra el archivo y lea el encabezado de la HDU actual. (Lea las páginas web o la documentación de CFITSIO para conocer su "Sintaxis de nombre de archivo extendido"). modo puede ser 0 (solo lectura) o 1 (lectura y escritura). Si no objName se da, se asignará automáticamente un nombre. Se puede crear un nuevo archivo FITS vacío configurando modo a 2. En este caso, si el archivo mencionado existe, se sobrescribirá. Devoluciones objName que se utilizará en la mayoría de los métodos como el identificador del objeto. se adapta a la información ? objName. Devuelve una lista de todos los objetos existentes, o los objetos nombrados (admite expresiones regulares), con la siguiente información:

dónde CHDU es la HDU actual (1-matriz principal, 2-la primera extensión) y hduType es el tipo de HDU (imagen 0, tabla 1-ASCII, tabla 2-binaria). objName moverse ?+/-?norte Si norte tiene el signo `` +/- '', luego mueva norte unidades relativas a la CHDU; de lo contrario, muévase a la norteth HDU. Devuelve el tipo de extensión de la nueva HDU: imagen 0, tabla 1-ASCII, tabla 2-binaria. objName cerca Eliminar objeto objName. encaja cerca Elimina todos los objetos existentes.

Obtener información sobre la CHDU

objName info chdu Devuelva el CHDU. 1 = principal, 2 = primera extensión, etc. objName info Devuelve el tamaño del archivo (en unidades de 2880 bytes). objName info hdutype Devuelve `` Matriz principal '', `` Extensión de imagen '', `` Tabla binaria '' o `` Tabla ASCII ''. objName info imgType Devuelve el tipo de imagen si CHDU es una extensión de imagen. -> objName info imgdim Devuelve las dimensiones de la imagen si CHDU es una extensión de imagen. objName ncols de información Devuelve el número de columnas de la tabla si el CHDU es una extensión de la tabla. objName nrows de información Devuelve el número de filas de la tabla si el CHDU es una extensión de la tabla. objName información nkwds Devuelve el número de palabras clave en el encabezado del CHDU. objName columna de información ?-exacto? ? colList? Sin argumentos, devuelve una lista de todos los nombres de columna de la tabla si CHDU es una extensión de tabla. Si colList está presente, la información detallada sobre las columnas enumeradas, utilizando comparaciones de nombres de expresiones regulares, se devuelve en la forma de:

dónde

Nombre nombre de la columna (palabra clave TTYPE)
Tipo tipo de la columna (palabra clave TFORM)
Unidad unidad de la columna (palabra clave TUNIT)
Desplegar formato formato de visualización (palabra clave TDISP)
DefaultFormat formato predeterminado para la visualización (si la palabra clave TDISP está ausente)
Ancho de columna el ancho de la columna (en unidades de caracteres).
isOffset 0 = sin compensación (sin palabra clave TZERO), 1 = compensación.
isScaled 0 = sin escala (sin palabra clave TSCALE), 1 = escalado.
defaultNull valor NULL predeterminado (palabra clave TNULL)
La -exacto La opción desactiva la coincidencia de expresiones regulares.

Leer datos de un archivo FITS

objName vertedero ?-s / -e / -l? Devuelve todos los registros de palabras clave en el encabezado actual. Las siguientes opciones controlan cómo se formatea la información:

ninguno devolver lista de todas las tarjetas en el encabezado
-s devuelve tres listas: <palabras clave> <valores> <comentarios>
-mi devuelve una sola cadena que contiene una lista separada por saltos de línea de todos los registros de encabezado
-l devolver todos los nombres de palabras clave
objName obtener palabra clave ? keyList? Devuelve una lista de <comentario de valor de palabra clave> para todas las palabras clave en keyList (admite expresiones regulares). Si no keyList se proporciona, devuelve una lista de entradas para todas las palabras clave en el CHDU. El orden en el que se enumeran las palabras clave no está definido. (Las palabras clave HISTORIA y COMENTARIO son Nunca devuelto.) objName obtener la palabra clave -num norte Devuelve una lista de <comentario de valor de palabra clave> de la norteth palabra clave. objName conseguir wcs ? RAcol DecCol? Devuelve una lista de los parámetros de WCS - <xrval yrval xrpix yrpix xinc yinc rot ctype> - para el CHDU. Si la HDU actual es una tabla, proporcione la RAcol y DecCol parámetros que especifican las dos columnas (como nombres o números de columna) que contienen datos WCS. Utilice valores predeterminados para las palabras clave WCS faltantes: 1.0 para xinc / yinc `` ninguno '' para ctype y 0.0 o todos los demás. Si no se conoce la identidad RA / Dec de las columnas (o ejes de la imagen), un parámetro WCS adicional: wcsSwap - se puede obtener que, cuando está activado, indica que los parámetros X son para Dec en lugar de RA. Active esta opción con la opción de ajustes wcsSwap 1. objName obtener wcs -m ? Col1. Similar a lo anterior, pero la información se devuelve en un formato de nuevo estilo, lo que permite transformaciones matriciales arbitrarias. El valor devuelto es donde cada elemento (excepto la matriz) contiene una lista de la información proporcionada para cada dimensión de la imagen o columna de la tabla matriz es la rotación, escala, sesgo, matriz de transformación NxN dada como <cd11 .. cd1N cd21 .. cd2N .. cdNN>. La opción wcsSwap no tiene ningún efecto en este comando, uno debe marcar el tipos valores para ver si las transformadas RA y Dec están asociadas con el primer y segundo eje, respectivamente, de la imagen (como suele ser el caso) o están invertidas. objName obtener la imagen ? firstElem? ? numElem? Leer elementos de datos de la extensión IMAGE actual y devolverlos en una lista. Sin ningún parámetro, se devolverá la imagen completa. si solo firstElem se proporciona, devuelve solo un elemento. objName conseguir mesa ?-C? ?-noformato? ? colList? ? filas? Leer un bloque de una tabla y devolver listas de datos. El rango de bloque se establece en
colList una lista de todas las columnas que uno quiere leer. Lea todas las columnas si faltan o son `` * ''.
filas una lista separada por comas de rangos de filas del formulario inicio fin (p. ej., `` 3-5,7,9- '')
-C devolver datos de cada columna como una lista separada
-noformato no formatee los resultados de acuerdo con un formato TDISPn o predeterminado
objName obtener vtable ? -noformato? colName n? filas? Devuelve una lista de datos en el norteel elemento del vector en la columna colName de lo dado filas. La opción -noformat desactiva cualquier formato TDISPn.

Carga de datos en la memoria o en una matriz TCL

Al cargar datos en la memoria, fitTcl normalmente regresará dirección dataType numElements donde estos son:

habla a Dirección de memoria de los datos. Se puede recuperar en C por
sscanfhabla a, "% p", & databuff)
con void * databuff
tipo de datos
0 - BYTE_DATA 1 byte de datos
1 - SHORTINT_DATA Entero de 2 bytes
2 - INT_DATA Entero de 4 bytes
3 - FLOAT_DATA Coma flotante de 4 bytes
4 - DOBLE_DATOS Coma flotante de 8 bytes
numElement Número de elementos de datos en la matriz

objName cargar imagen ?¿rodaja? ?¿girar? Cargue una imagen 2D completa en la CHDU en la memoria y devuelva la dirección habla a (véase más arriba). rodaja indica qué fotograma usar si la imagen es 3D. girar indica cuántas rotaciones de 90 grados en sentido antihorario se deben realizar en la imagen (0-3). objName cargar iblock arrayName firstRow numRows firstCol numCols? slice? Cargar un bloque (empezar desde firstCol, primera fila con tamaño numCols X numRows) de datos de imagen a una matriz TCL 2-D arrayName o a la memoria si arrayName es `` - ''. Los índices de la variable de matriz son (firstCol-1 . firstCol + numCols-1, firstRow-1. firstRow + numRows-1). Una imagen 1D se tratará como una sola fila o columna, según los parámetros de fila / columna proporcionados. Para una imagen 3D, rodaja indica qué marco usar. Si arrayName es `` - '', lee el bloque de datos en la memoria y devuelve la información del puntero: dirección dataType numElements. objName cargar irows firstRow lastRow? slice? objName cargar icols firstCol lastCol? slice? Leer y promediar juntos un rango de filas o columnas de una imagen. Devoluciones dirección dataType numElements. tipo de datos será 3 para todos los tipos de datos de imagen excepto para el doble para el cual tipo de datos es 4. objName columna de carga colName? defaultNull? ? firstElement? Cargue una columna de una tabla en la memoria y vuelva dirección dataType numElements. Usa el valor de defaultNull para valores NULL o valores predeterminados internos (normalmente el valor máximo del tipo de datos) si es `` NULL '' o está ausente. Si colName es una columna de vectores, lea el firstElement-th elemento. Solo se pueden cargar columnas numéricas. objName load arrayRow colName rowNumber numberElement? defaultNull? ? firstElement? Cargue una fila de una tabla en la memoria y regrese dirección dataType numElements. Usa el valor de defaultNull para valores NULL o valores predeterminados internos (normalmente el valor máximo del tipo de datos) si es `` NULL '' o está ausente. Si colName es una columna de vectores, lea el firstElement-th elemento. numero de fila es el número de fila previsto. numberElement es el número de elementos en una fila para extraer (use la longitud de una fila como valor predeterminado). Solo se pueden cargar columnas numéricas. -> objName cargar vtable colName Cargar todos los elementos de la columna de vectores colName y volver dirección dataType numElements. objName cargar tblock? -noformat? arrayName colList firstRow numRows colIndex? firstElem? Cargue un bloque de datos de la tabla en una matriz TCL 2-D arrayName. colIndex es (casi) el índice de columna de la matriz que se utilizará para la primera lectura de la columna. El primer índice de datos es en realidad (en cuanto a imágenes) (colIndex-1,primera fila-1). Para columnas escaladoras, firstElem = 1. Sin el indicador -noformat, los valores se devolverán como cadenas formateadas de acuerdo con una palabra clave TDISP o un formato predeterminado basado en el tipo de datos. objName cargar expr ?-fileras filas? expresión? defaultNull? Evaluar la aritmética expresión en cada fila (o un subconjunto de filas dado por filas) de la mesa del CHDU y volver dirección dataType numElements, utilizando defaultNull como el valor nulo de cualquier resultado NULL. objName cargar palabra clave Cargue palabras clave en la tabla hash interna de fitTcl. Por lo general, no será necesario llamar a esta rutina. objName cargar chdu Vuelva a cargar la información sobre la HDU actual. Por lo general, no será necesario llamar a esta rutina.

objName insertar imagen bitpix naxis naxesList objName insertar imagen -p ? bitpix naxis naxesList? Inserte una imagen HDU vacía (encabezado principal con -pag) después de la HDU actual (o al inicio del archivo para la matriz primaria). Los parámetros de la imagen - bitpix naxis naxesList - se puede dejar fuera si se crea una matriz primaria de longitud cero. objName insertar mesa numRows ? extensionName? objName insertar tabla -ascii numRows ? extensionName rowWidth? Inserte una tabla HDU BINARY (predeterminada) o ASCII (con el indicador -ascii) vacía después de la HDU actual. La colNames y colFormats las listas deben tener la misma longitud (posiblemente ambas vacías). Cada uno de los parámetros opcionales puede estar vacío si se desea utilizar valores predeterminados / vacíos. objName insertar palabra clave registro de índice? formatFlag? Insertar un nuevo registro en el índice-ésima palabra clave. Si formatFlag es 0, escriba el registro exactamente como se pasó, de lo contrario analícelo como una forma libre comentario de valor de nombre clave y reformatearlo en un estandarizado NOMBRE CLAVE = VALOR / COMENTARIO (defecto). objName poner palabra clave ?-num ¿índice? grabar? formatFlag? Escriba un registro de palabras clave en la posición índice la posición de una palabra clave preexistente con el mismo nombre o añádala si no existe dicha palabra clave. Consulte más arriba el formato / significado de registro y formatFlag. objName poner historia historyStr Escribe una palabra clave HISTORIA con contenido historyStr objName insertar columna índice colName colFormat Insertar una columna vacía con formato colFormat antes de índice-ésima columna. colFormat especifica el formato de la columna como, por ejemplo:
Tabla ASCII: A15, I10, E12.5, D20.10, F14.6.
Tabla BINARIA: 15A, 1I, 1J, 1E, 1D, 1L, 1X, 1B, 1C, 1M objName añadir columna colName colFormat? expresión? Sin un expresión, agregue una columna vacía a la tabla CHDU y no devuelva nada. Dada una aritmética expresión, sin embargo, la columna indicada (nueva o antigua) se completará con los resultados de la expresión evaluada para cada fila de la tabla. Si colName no existe en la extensión de la tabla actual, se creará una nueva con formato colFormat (véase más arriba). Si colFormat es `` predeterminado '', la columna se creará en función del tipo de datos del resultado. Devuelve 1 o 0 para indicar si se creó una nueva columna (1) o no (0). expresión puede estar en formato C o Fortran con columnas de tabla y palabras clave referenciadas por sus nombres. Aquí están algunas expresión muestras:

Expresión Resultado
17.2 17.2 por cada fila
17 + 4 * (PHI y GT 32) 17 o 21, dependiendo de si esa fila de la columna PHI es mayor que 32
raíz cuadrada ((X-X0) ^ 2 + (Y-Y0) ^ 2) Distancia de las coordenadas de la columna (X, Y) de los valores de la palabra clave (X0, Y0)
Consulte las páginas web y la documentación de CFITSIO para obtener más detalles. objName insertar fila índice numRows Inserte el número de numRows filas después de la índice-lanzar. objName añadir fila numRows Agregar numRows filas al final de la tabla CHDU. objName poner imagen firstElem listOfData Escribe un bloque de datos en la imagen CHDU. El primer píxel de una imagen tiene firstElem = 1, no cero. objName poner mesa colName firstElem rowSpan listOfData Escriba una lista de datos en el firstElem-th elemento de la columna colName en la tabla CHDU. (Para columnas escalares firstElem es 1.) rowSpan es un rango de forma de una sola fila inicio fin con `` - '' indicando todas las filas.

Eliminar datos de un archivo FITS

objName eliminar palabra clave keyList Elimine las palabras clave enumeradas, donde el keyList puede ser la combinación de nombres de palabras clave y números de índice. Las palabras clave se eliminan individualmente en secuencia, lo que hace que las posiciones de las palabras clave cambien después de cada eliminación, así que tenga cuidado al eliminar varias palabras clave por índice. objName eliminar columnas colList Elimina las columnas enumeradas en una extensión de tabla. objName eliminar filas firstRow numRows Elimina un bloque de filas. objName eliminar filas -expr expresión Eliminar filas usando expresión que debe evaluarse a un valor booleano. Filas para las cuales expresión se evalúa como VERDADERO se elimina. objName eliminar chdu Elimina la HDU actual. La HDU inmediatamente siguiente a la eliminada (o la anterior si la HDU actual es la última del archivo) se convertirá en la nueva HDU actual. Devuelve el tipo de extensión de la nueva HDU: imagen 0, tabla 1-ASCII, tabla 2-binaria.

objName clasificar ?-unir? colList? ascendFlags? Ordene las filas de la tabla usando columnas en colList. Cuándo -unir está presente, si varias filas tienen claves de clasificación idénticas, se eliminarán todas las filas menos una. Si está presente, ascendFlags contiene una lista de 1 y 0 que indica si esa columna se ordenará en orden ascendente (1, el predeterminado) o descendente (0). objName columna -stat colName? firstElem? ? filas? Devolver estadísticas sobre el firstElem-th elemento (1 para columnas escalares) de columna colName en el orden min firstMinRow max firstMaxRow mean stdDev numData. objName columna -minmax colName? firstElem? ? filas? Devuelve valores mínimos y máximos de la firstElem-th elemento (1 para columnas escalares) de columna colName. objName histograma ?-peso colName | valor? ?-inverso? ?-fileras filas? Nombre del archivo ? . Cree un histograma 1D - 4D a partir de columnas de la tabla actual. Los parámetros de agrupamiento están dados por el binAxisN parámetros que son listas del formulario colName min max binSize donde los últimos 3 elementos pueden ser cada uno `` - '', lo que indica valores predeterminados. Si existen TLMINn, TLMAXn y / o TDBINn, esos valores se utilizarán como valores predeterminados. De lo contrario, para min y max los valores predeterminados son los valores mínimos / máximos reales de los datos para binSize se seleccionará el menor de una décima parte del intervalo de datos o 1.0. Un valor de ponderación se puede indicar con el -peso opción. Puede ser otra columna o una constante numérica. La -inverso La opción indica que el peso debe ser 1.0 / peso en lugar del valor de ponderación en sí. El histograma se puede restringir a ciertos rangos de filas usando el -fileras opción. objName crear 1dhisto Nombre del archivo ? rowSpan? objName crear 2dhisto Nombre del archivo ? rowSpan? Cree un histograma 1D o 2D a partir de datos en columnas colList. Una segunda o tercera columna opcional, respectivamente, en colList se puede utilizar como pesa. Los límites y el tamaño de la agrupación están dados por la lista de 3 elementos binParams que contiene el min max binSize parámetros. Si min o max es `` - '', se utilizarán los verdaderos valores mínimo / máximo de la (s) columna (s). Se puede indicar un solo rango de filas a través de la opción rowSpan parámetro. El histograma resultante se escribirá en la matriz principal de un nuevo archivo Nombre del archivo. Las palabras clave de WCS se escribirán en el archivo de salida para registrar las escalas y compensaciones de agrupamiento. -> objName liso outfile? inPrimary? Suaviza la extensión de la imagen actual con una función de dimensiones del vagón ancho por altura píxeles. Las dimensiones deben ser números enteros impares. La imagen resultante se colocará en una nueva extensión adjunta al archivo. archivar. Si archivar no existe, la imagen se colocará en la extensión primaria o en la primera, dependiendo del valor de la en primaria flag el valor predeterminado es colocarlo en una extensión.

See the CFITSIO web pages and documentation for details on expression syntax. One can also read the fv online help file on expression syntax, noting that vexpr can only handle numerical input and output.

fits free addressList Free the memory occupied by the data generated by one of the load, lst2ptr, y vexpr commands.

objName copy filename Copy the CHDU to a new FITS file. If the CHDU is not an image array, then an empty primary array is inserted. objName sascii table filename fileMode firstRow numRows colList widthList Write the listed columns into an ASCII file. In the output file, each column has the width listed in widthList. fileMode indicates how to write the data to filename: 0-create new file and write column headings 1-append to old file and write column headings 2-append to old file, but don't write any headings. objName sascii image filename fileMode firstRow numRows firstCol numCols cellSize ?slice? Write a block of the image data to an ASCII file. In the output file, the data has width of cellSize. Use frame rodaja for 3D image data. objName flush ?clear? Flush any dirty buffers to the disk. Con clear, free the buffers, too. objName append filename Append current HDU to another FITS file. objName checksum update|verify Update or Verify the checksum keywords in the current HDU. If none exist, update will create them. For verify, the return values are 1 for valid values, 0 if either keyword (CHECKSUM or DATASUM) is missing, and -1 for invalid values. objName info expr expression Get information on the result of the supplied arithmetic expression. Return value is cDataType numElements where cDataType is the CFITSIO datatype (not fitsTcl's): TDOUBLE, TSTRING, etc numElements is the number of elements in the result and naxesList contains the vector dimensions of the result ( <1>for scalar result). An expression which evaluates to a constant (no dependency on the contents of the table) will be indicated by a negative number of elements. range count rangeStr maxElem Count the number of elements (esp. rows) contained within the comma-separated list of ranges in rangeStr (eg, 1-4,5,7-). To support ranges of the form "7-" which specifies a range from element 7 through the final element, maxElem is passed with the maximum element number. fits option ?option? ?value? Modify fitsTcl's default behavior. With no options, this returns a list of all the current fitsTcl options and their values. With the option parameter, return the value of that parameter. When both option y value are supplied, set the parameter to the given value. Current options: wcsSwap (0). fits version Get version numbers for fitsTcl and underlying cfitsio. Pages maintained by Bryan Irby Send bug reports or feature requests via the FTOOLS help desk. HEASARC Home | Observatories | Archive | Calibration | Software | Tools | Students/Teachers/Public

The HEASARC is hiring! - Applications are now being accepted for a scientist with significant experience and interest in the technical aspects of astrophysics research, to work in the HEASARC at NASA Goddard Space Flight Center (GSFC) in Greenbelt, MD. Refer to the AAS Job register for full details.


3D array in FITS data - Astronomy

This section lists and describes the clump identification algorithms which are implemented within the CUPID FINDCLUMPS command.

Note, it is assumed that any background extended emission has been removed from the data before using FINDCLUMPS. This can be done using the FINDBACK command.

2.1 FellWalker

This algorithm was developed specifically for CUPID to address some of the problems associated with ClumpFind. It is fully described in Berry (2015, Astronomy & Computing, vol. 10,p22-31).

It is most simply described assuming the data array is 2-dimensional, although it applies in a similar manner to 3-dimensional data. Its name was chosen to suggest a parallel between a contour map of a 2D astronomical data array, and the height contours seen in a geographical map of a hilly area, such as used by most fell-walkers. The algorithm used to assign a data pixel to a clump of emission can be compared to that of a fell-walker ascending a hill by following the line of steepest ascent (not perhaps the most sensible way to ascend a hill in practise but one which lends some verisimilitude to the present algorithm!).

The algorithm considers every data pixel in the supplied array in turn as a potential start for a “walk” to a neighbouring peak. Pixels which are below a nominated background level (specified by configuration parameter FellWalker.Noise ) are ignored and are flagged as not belonging to any emission clump. These are skipped over, as are pixels which have already been assigned to a clump. Once a pixel is found that has not yet been assigned to a clump and is above the background level, the algorithm proceeds to trace out a route from this pixel to a neighbouring peak. It does this in a series of steps (comparable to the steps of a fell-walker). At each step the algorithm looks at the 3 × 3 square of neighbouring pixels (a 3 × 3 × 3 cube for 3D data), and selects the neighbour which would produce the highest gradient for the next step. The algorithm then moves to that pixel and proceeds with the next step.

Eventually, this algorithm will reach a local maximum a point from which all routes go down-hill. But this may be merely a noise spike, rather than a significant peak, and so a check is made over a more extended neighbourhood to see if a pixel with a higher data value than the current pixel can be found (the extent of this extended neighbourhood is specified by the configuration parameter FellWalker.MaxJump ). If so, the algorithm “jumps” to the pixel with the highest value in the extended neighbourhood, and then proceeds as before to walk up-hill. If no pixel with a higher value is found within the extended neighbourhood, the pixel is designated as a significant peak, and is assigned a unique integer identifier. This integer is used to identify all pixels which are within the clump of emission containing the peak, and all pixels which were visited along the walk are assigned this identifier.

If, in the process of walking up-hill, a pixel is visited which has already been assigned to a clump, then the walk is terminated at that point and all the pixels so far visited are assigned to the same clump.

In some cases, the initial part of a walk may be over very flat “terrain”. The significant part of a walk is considered to start when the average gradient (taken over a 4 step length) first reaches the value of configuration parameter FlatSlope . Any pixels visited prior to this point are deemed not to be in any clump. However, this only applies if the walk starts at or close to “sea level”. For walks which start from a higher level (es decir. from a pixel which has a data value greater than the selected background level plus twice the RMS noise level), the entire length of the walk is used, including any initial flat section.

Once all pixels in the data array have been considered as potential starts for such a walk, an array will have been created which holds an integer clump identifier for every data pixel. To reduce the effect of noise on the boundaries between clumps, a cellular automata can be used to smooth the boundaries. This replaces each clump identifier by the most commonly occurring value within a 3 × 3 square (or 3 × 3 × 3 cube for 3D data) of neighbours. The number of times which this cleaning process should be applied is specified by configuration parameter CleanIter .

If the high data values in a clump form a plateau with slight undulations, then the above algorithm may create a separate clump for each undulation. This is probably inappropriate, especially if the dips between the undulations are less than or are comparable to the noise level in the data. This situation can arise for instance if the pixel-to-pixel noise is correlated on a scale equal to or larger than the value of the MaxJump configuration parameter. To avoid this, adjoining clumps are merged together if the dip between them is less than a specified value. Specifically, if two clumps with peak values PEAK1 y PEAK2, where PEAK1 is less than PEAK2, are adjacent to each other, and if the pixels along the interface between the two clumps all have data values which are larger than “PEAK1 - MinDip” (where MinDip is the value of the MinDip configuration parameter), then the two clumps are merged together.

The results of this merging process are the final clump allocations for every data pixel, from which the catalogue of clump parameters is produced.

2.2 GaussClumps

This is based on the algorithm described by Stutzki & Gusten (1990, ApJ 356, 513). This algorithm proceeds by fitting a Gaussian profile to the brightest peak in the data. It then subtracts the fit from the data and iterates, fitting a new ellipse to the brightest peak in the residuals. This continues until any one of the “termination criteria” described below is satisfied. Each fitted ellipse is taken to be a single clump and is added to the output catalogue. In this algorithm, clumps may overlap, and for this reason each input pixel cannot simply be assigned to a single clump (as can be done for algorithms such as FellWalker or ClumpFind). Therefore, when using GassClumps, the primary output NDF from FINDCLUMPS does not hold the clump index at each input pixel. Instead it holds the sum of all the fitted Gaussian that contribute to each input pixel position.

Any input variance component is used to scale the weight associated with each pixel value when performing the Gaussian fit. The most significant configuration parameters for this algorithm are: GaussClumps.FwhmBeam and GaussClumps.VeloRes which determine the minimum clump size, and GaussClumps.Thresh which (together with the ADAM parameter RMS) determine the third of the termination criteria listed below.

  • The Gaussian fitting is based on the SUMSL module (algorithm 611) from the TOMS library available from http://www.netlib.org/.
  • Any available variance information is used to weight the pixels when doing the Gaussian fit. This is in addition to the Gaussian weighting function implied by configuration parameters GaussClumps.Wwidth and GaussClumps.Wmin .
  • The termination criteria are different. FINDCLUMPS stops finding further clumps if any one of the following criteria is met. (1) the total data sum in the fitted Gaussians is equal to or exceeds the total data sum in the supplied input data (this is the original termination criterion used by Stutzki & Gusten). (2) The number of clumps already found equals the value of configuration parameter GaussClumps.MaxClumps . (3) The number of consecutive fitted peaks with peak value below the value of configuration parameter GaussClumps.Thresh reaches the value of configuration parameter GaussClumps.NPad (the final group of NPad clumps are not included in the returned list of usable clumps). (4) The number of failed attempts to fit consecutive clumps reaches the value of configuration parameter GaussClumps.MaxSkip .
  • A clump will be ignored if its fitted peak value is a long way above or below the peak value of the previously fitted clump. The definition of 𠇊 long way” is more than GaussClumps.NSigma times the standard deviation of the previous GaussClumps.NPeak fitted peaks. This restriction is only imposed once GaussClumps.NPeak peaks have been fitted.
  • In certain situations the chi-squared value that is minimised when fitting a Gaussian clump to a peak in the data array may be dominated by pixels that are largely unaffected by changes in the parameters of the Gaussian clumps 1 . This can result in a very poor fit to the clump. To avoid this, an attempt is made to identify such pixels and to lower the weight associated with them.

2.3 ClumpFind

This algorithm was developed by Jonathan Williams and had been described fully in Williams, de Geus & Blitz (1994, ApJ 428, 693).

Briefly, it contours the data array at many different levels, starting at a value close to the peak value in the array and working down to a specified minimum contour level. At each contour level, all contiguous areas of pixels that are above the contour level are found and considered in turn. If such a set of pixels includes no pixels that have already been assigned to a clump (es decir. have already been identified at a higher contour level), then the set is marked as a new clump. If the set includes some pixels that have already been assigned to a clump, then, if all such pixels belong to the same clump, that clump is extended to include all the pixels in the set. If the set includes pixels that have already been assigned to two or more clumps, then the new pixels in the set are shared out between the two or more existing clumps. This sharing is done by assigning each new pixel to the closest clump. Note, this is based on the distance to the nearest pixel already assigned to the clump, not the distance to the central or peak pixel in the clump. The above paper refers to this as a 𠇏riends-of-friends” algorithm.

This process continues down to the lowest specified contour level, except that new clumps found at the lowest contour level are ignored. However, clumps found at higher contour levels are followed down to the lowest specified contour level.

2.3.1 Comparing CUPID ClumpFind with other Implementations

The CUPID implementation of ClumpFind is a completely independent and total re-write, based on the description of the algorithm in the 1994 Williams, de Geus & Blitz paper. Consequently, it differs slightly from other implementations such as the IDL implementation available from Williams own web page at http://www.ifa.hawaii.edu/

  • ClumpFind.FwhmBeam = 0
  • ClumpFind.MaxBad = 1.0
  • ClumpFind.MinPix = 6 (for 3D data - use 20 for 2D data)
  • ClumpFind.VeloRes = 0
  • ClumpFind.IDLAlg = 1
  • ClumpFind.AllowEdge = 1

You should also note that the pixel co-ordinate system used by the two implementations differ, and consequently the positions reported for the clump peaks will also differ. The IDL implementation of ClumpFind uses a pixel coordinate system in which the first pixel (i.e the bottom left pixel of a 2D image displayed “normally”) is centred at (0,0). This differs from both the FITS and NDF definition of pixel co-ordinates. In FITS, the centre of the first pixel in the array has a value of 1.0 on every pixel axis. In NDF, the centre of the first pixel has a value of L B N D ( I ) − 0 . 5 on axis I , where L B N D ( I ) is an attribute of the NDF known as the “pixel origin”. For an NDF which has been derived from a FITS file and which has been subjected to no geometric transformations, the pixel origin will be 1.0 on every pixel axis, resulting in the centre of the first pixel having a value of 0.5 on every pixel axis.

Some implementations of ClumpFind do not conform exactly to the description in the published paper. Specifically: (1) the way in which areas containing merged clumps are divided up between individual clumps can differ slightly (2) the restriction that all peaks must extend at least as far as the second contour level is sometimes omitted (3) the restriction on the minimum number of pixels contained within a clump is sometimes varied in value

CUPID provides an option to use either the published algorithm, or the algorithm implemented by the IDL package available from Jonathan Williams WWW site (as available at 28th April 2006). Setting the configuration parameter ClumpFind.IDLAlg to a non-zero value will cause the IDL implementation to be used. The default value of zero causes the published algorithm to be used.

2.4 Reinhold

This algorithm was developed by Kim Reinhold whilst working at the Joint Astronomy Centre in Hilo, Hawaii. Its overall strategy is first to identify pixels within the data array which mark the edges of clumps of emission. This typically produces a set of rings (in 2D), or shells (in 3D), outlining the clumps. However, these structures can be badly affected by noise in the data and so need to be cleaned up. This is done using a sequence of cellular automata which first dilate the rings or shells, and then erodes them. After cleaning, all pixels within each ring or shell are assumed to belong to a single clump.

2.4.1 Identifying the Clump Edges

The initial identification of the edges is done by considering a set of 1-dimensional profiles through the data array. Each such profile can be represented by a plot of data value against distance (in pixels) along the profile. For each such profile, the algorithm proceeds as follows. (1) Find the highest remaining (es decir. unused) data value in the profile. (2) If this value is less than a specified background level (given by the configuration parameter Reinhold.Noise ), then there are no remaining significant peaks in the profile so continue with the next profile. (3) Work out away from the peak position along the profile in both directions to find the edges of the peak. A peak ends when it either i) meets a pixel which has already been included within another peak, or ii) two adjacent pixels are both below the background level, or iii) the average gradient of the profile over three adjacent pixel drops below a minimum value specified by the configuration parameter Reinhold.FlatSlope , or iv) the end of the profile is reached. (4) If the peak was not truncated by reaching either end of the profile, and if the peak spans sufficient pixels, the positions of the two edges of the peak are marked in a mask array which is the same shape and size as the 2D or 3D data array. The minimum number of pixels spanned by a peak in order for the peak to be usable is given by the configuration parameter Reinhold.MinPix . (5) The position of the peak itself is also marked so long as its peak value is above a specified minimum value (given by configuration parameter Reinhold.Thresh ). (6) The pixels within the 1D profile which fall between the upper and lower edges of the peak are marked as “used”, and the algorithm loops back to the start (es decir. step 1 above).

This algorithm is applied to each 1D profile in turn. These profiles are divided into groups of parallel profiles the first group contains profiles which are parallel to the first pixel axis, the second group contains profiles which are parallel to the second pixel axis, etc. There are also groups which contain parallel profiles which proceed diagonally through the data array. Thus there is a group of parallel profiles for every pixel axis and for every possible diagonal direction. Within each group, there are sufficient profiles to ensure that every element in the data array is included in a profile within the group.

Once all profiles have been processed, a 2 or 3D array is available that identifies both the edges of the peaks and also the peak positions themselves. Pixels which are flagged as peaks are only retained if the pixel was found to be a peak in every profile group. That is, pixels which appear as a peak when profiled in one direction but not when profiled in another are discarded.

2.4.2 Cleaning the Clump Edges

The initial identification of clumps edges results in a mask array in which each data pixel is marked as either an edge pixel or a peak pixel or neither. Usually, the edge pixels can be seen to follow the outline of the visible clumps, but will often be badly affected by noise in the data. For instance, there may be holes in the edges surrounding a peak, or spurious pixels may have been marked as edge pixels. Before continuing, it is necessary to reduce the effect of this noise. This is done in two steps described below. (1) The edge regions are 𠇍ilated” (es decir. thickened) using a cellular automata algorithm which proceeds as follows: if a pixel is marked as an edge pixel, then all immediate neighbours of the pixel are also marked as edge pixels. Each pixel is considered to be the central pixel in a square of 3 × 3 neighbouring pixels for 2D data, or the central pixel in a cube of 3 × 3 × 3 neighbouring pixels for 3D data. (2) The thickened edge regions are then 𠇎roded” (es decir. made thinner) using another cellular automata algorithm which proceeds as follows. If the number of neighbouring edge pixels surrounding a central pixel is greater than a specified threshold value (given by the configuration parameter Reinhold.CAThresh ), the central pixel is marked as an edge pixel. If the number of neighbouring edge pixels is equal to or below this threshold, the central pixel is not marked as an edge pixel. This transformation can be applied repeatedly to increase the amount of erosion by setting a value greater than one for the configuration parameter Reinhold.CAIterations .

2.4.3 Filling the Clump Edges

Once the edges have been cleaned up, the volume contained within the edges can be filled with an integer which identifies the associated peak. This algorithm proceeds as follows. (1) The mask array is scanned for pixels which are marked as peaks. Recall that only those pixels which are seen to be peaks when profiled in all directions have been retained. Each of these pixels thus represents a local maximum in the data value, and has a significantly higher data value than any of the surrounding pixels. Each such peak is given a unique integer identifier. This identifier is used within the following steps to label all pixels in the clump of emission surrounding the peak. (2) A line of pixels parallel to the first pixel axis, and which passes through the peak, is then considered. The line is followed away from the peak, in both directions, until pixels are encountered which are flagged as edge pixels. All the pixels along this line between the two edge pixels are assigned the clump identifier associated with the central peak. (3) For each such pixel, another line of pixels parallel to the second pixel axis and passing through the pixel is considered. The line is followed away from the pixel, in both directions, until edge pixels are encountered. All the pixels along this line between the two edge pixels are also assigned the clump identifier associated with the central peak. (4) For each such pixel, another line of pixels parallel to the third pixel axis and passing through the pixel is considered. The line is followed away from the pixel, in both directions, until edge pixels are encountered. All the pixels along this line between the two edge pixels are also assigned the clump identifier associated with the central peak.

The above process will fill the volume between the edges, but may miss some pixels (e.g. if the initial line parallel to the first pixel axis spans the clump at an unusually narrow point). In order to alleviate this effect, the above process is repeated, but scanning the pixels axes in a different order (2,3,1 instead of 1,2,3). For 3D data, it is repeated a third time using the axis order (3,1,2).

Even so, it should be recognised that this filling algorithm will fail to fill certain shapes entirely. For instance, “S”-shaped clumps could not be filled completely using this algorithm.

2.4.4 Cleaning up the Filled Clumps

The use of cellular automata to clean up the edges reduces the likelihood of “holes” within the clump edges, but does not eliminate this risk entirely. When the clump-filling algorithm described above encounters a hole in the edges surrounding a peak, the clump identifier value will “leak out” through the hole into the surrounding areas. This is where the limitations of the filling algorithm have a positive benefit, in that they prevent the leak from spreading round corners without limit. Instead, such leaks will tend to produce straight features radiating out from a clump parallel to a pixel axis, which will terminate as soon as they meet another edge.

It is thus possible for the two or more clumps to 𠇌laim” a given pixel. This will happen if there are holes in the edges surrounding the peaks which allow the filling process to leak out. In this case, each pixel is assigned to the clump associated with the nearest peak.

Another cellular automata is used once the filling process has been completed to reduce the artifacts created by these leaks. This cellular automata replaces each clump identifier by the most commonly occurring clump identifier within a 3 × 3 × 3 cube (or 3 × 3 square for 2D data) of neighbours. This process can be repeated to increase the degree of cleaning, by assigning a value greater than one to the configuration parameter Reinhold.FixClumpsIterations .

The results of this cleaning process are the final clump allocations for every data pixel, from which the catalogue of clump parameters is produced.

1 This can happen for instance when neighbouring peaks are present within the area of pixels used to fit a central peak.


3D array in FITS data - Astronomy

MeerKAT in South Africa (Meer = More Karoo Array Telescope) will require software to help visualize, interpret and interact with multidimensional data. While visualization of multi-dimensional data is a well explored topic, little work has been published on the design of intuitive interfaces to such systems. More specifically, the use of non-traditional interfaces (such as motion tracking and multi-touch) has not been widely investigated within the context of visualizing astronomy data. We hypothesize that a natural user interface would allow for easier data exploration which would in turn lead to certain kinds of visualizations (volumetric, multidimensional). To this end, we have developed a multi-platform scientific visualization system for FITS spectral data cubes using VTK (Visualization Toolkit) and a natural user interface to explore the interaction between a gesture input device and multidimensional data space. Our system supports visual transformations (translation, rotation and scaling) as well as sub-volume extraction and arbitrary slicing of 3D volumetric data. These tasks were implemented across three prototypes aimed at exploring different interaction strategies: standard (mouse/keyboard) interaction, volumetric gesture tracking (Leap Motion controller) and multi-touch interaction (multi-touch monitor). A Heuristic Evaluation revealed that the volumetric gesture tracking prototype shows great promise for interfacing with the depth component (z-axis) of 3D volumetric space across multiple transformations. However, this is limited by users needing to remember the required gestures. In comparison, the touch-based gesture navigation is typically more familiar to users as these gestures were engineered from standard multi-touch actions. Future work will address a complete usability test to evaluate and compare the different interaction modalities against the different visualization tasks.


3.3.1. Introduction and concepts¶

Images are NumPy’s arrays np.ndarray

image: np.ndarray
pixels:array values: a[2, 3]
channels:array dimensions
image encoding: dtype ( np.uint8 , np.uint16 , np.float )
filters:functions ( numpy , skimage , scipy )

3.3.1.1. scikit-image and the SciPy ecosystem¶

Recent versions of scikit-image is packaged in most Scientific Python distributions, such as Anaconda or Enthought Canopy. It is also packaged for Ubuntu/Debian.

Most scikit-image functions take NumPy ndarrays as arguments

Other Python packages are available for image processing and work with NumPy arrays:

Also, powerful image processing libraries have Python bindings:

(but they are less Pythonic and NumPy friendly, to a variable extent).

3.3.1.2. What’s to be found in scikit-image¶

Different kinds of functions, from boilerplate utility functions to high-level recent algorithms.

  • Filters: functions transforming images into other images.

Data reduction functions: computation of image histogram, position of local maxima, of corners, etc.