Hola a todos
Me complace anunciar que ya está disponible una primera versión del nuevo proceso
StarAlignment para todos nuestros usuarios.
Esta primera versión todavía está en una etapa
beta de desarrollo, pero ya es plenamente funcional y puede ser utilizada con seguridad para trabajos de producción. Esperamos mejorar esta herramienta considerablemente con la ayuda de nuestros usuarios. Estamos deseando recibir vuestros informes de errores, informes de fallos, sugerencias y ejemplos de uso de todo tipo.
StarAlignment es una herramienta para el registro automático de imágenes que utiliza estrellas detectadas en las imágenes como referencias de alineación. Por lo tanto, esta herramienta es apropiada para registrar imágenes de cielo profundo de una forma totalmente automática. El usuario puede interactuar con la herramienta para evaluar la idoneidad de los parámetros utilizados, pero no se requiere intervención alguna por parte del usuario durante el proceso de registro.
StarAlignment es capaz de registrar dos imágenes afectadas por traslación, rotación y cambios de escala arbitrarios, así como distorsiones locales moderadas. También es capaz de trabajar con ligeras distorsiones globales (a gran escala), así como factores de escala ligeramente distintos en ambos ejes. StarAlignment requiere un mínimo de seis pares de estrellas coincidentes entre las dos imágenes, pero puede trabajar con un máximo de 65536 pares de estrellas (seleccionable por el usuario, pero limitado a 4000 pares de estrellas por defecto).
StarAlignment utiliza variaciones de los mismos algoritmos fundamentales (véanse las referencias [1] y [2] al final de este documento) implementados en
DeepSkyStacker, una magnífica aplicación para calibración de imágenes escrita por Luc Coiffier. Quiero expresar aquí mi gratitud hacia Luc Coiffier por orientarme en la dirección correcta, y por su inestimable ayuda y soporte.
Direcciones de DescargaPara Linux/X11 64 bits:
http://pixinsight.com/export/ImageRegistration-pxm.x11.x86_64.20081001.tar.gzPara MS Windows XP/Vista/2003 32 bits:
http://pixinsight.com/export/ImageRegistration-pxm.win.x86.20081001.zipPara MS Windows XP/Vista/2003 64 bits:
http://pixinsight.com/export/ImageRegistration-pxm.win.x86_64.20081001.zip* Nota: el módulo para X11/32-bit estará también disponible tan pronto como sea posible.
Cómo Instalar el Módulo1. Termine la ejecución de todas las instancias de la aplicación PixInsight Core, si tiene alguna(s) funcionando.
2. Extraiga el archivo del módulo a partir del archivo comprimido apropiado (vea la sección anterior). En Windows, el archivo del módulo es:
ImageRegistration-pxm.dlly en Linux:
ImageRegistration-pxm.so3. Copie el nuevo archivo del módulo en la carpeta
bin de su instalación. En Windows de 32 bits, PixInsight se instala por defecto en:
C:\PCLy en Windows de 64 bits, en:
C:\PCL64Si usted no cambió el directorio de instalación por defecto, debe copiar el nuevo archivo ImageRegistration-pxm.dll a C:\PCL\bin o C:\PCL64\bin.
En Linux, el directorio de instalación lo decide siempre el usuario, de manera que no hay un directorio de instalación por defecto. Asumiendo una instalación estándar en un directorio local, usted debe copiar el archivo ImageRegistration-pxm.so en:
/home/<su_directorio_personal>/PCL/bin
4. Ejecute PixInsight. Abra la ventana Process Explorer. Bajo la categoría ImageRegistration debería ver el proceso StarAlignment disponible con un icono por defecto. Por supuesto, también está disponible desde el menú principal, a través del elemento
Process > ImageRegistration.Uso de StarAlignmentStarAlignment es muy fácil de utilizar. La interfaz de StarAlignment incluye muchos mensajes
tool tip que aparecen cuando usted mueve el cursor sobre cada uno de sus controles. Puede leer estos mensajes para obtener ayuda rápida acerca de los diferentes parámetros.
El primer paso es obviamente abrir las dos imágenes que desea registrar. Una de ellas es la
imagen de referencia, que usted debe seleccionar como tal en la interfaz de StarAlignment. Ésta es la "imagen base", respecto de la cual la
imagen destino va a ser desplazada, girada, reescalada y distorsionada como sea necesario para hacer coincidir ambas imágenes por superposición.
StarAlignment se aplica como cualquier proceso en PixInsight: arrastre una instancia desde la interfaz a la imagen destino que quiere registrar sobre la imagen de referencia, y espere (para arrastrar una instancia haga clic en el pequeño botón triangular azul que se encuentra en la esquina inferior izquierda de la interfaz StarAlignment, y arrástrelo). Alternativamente, puede seleccionar la imagen destino y pulsar F5 (Apply) con la interfaz StarAlignment activa. Esto funciona de la manera que es habitual en PixInsight.
Los parámetros por defecto parecen funcionar bastante bien con la mayoría de imágenes
raw lineales. Los parámetros más importantes y críticos son los que controlan la detección de estrellas (Star Detection):
-
Detection scales (escalas de detección). Es el número de capas de wavelets utilizadas para detectar estrellas en ambas imágenes. Utilizar más capas implica detectar estrellas más grandes (o brillantes). Normalmente no deseará detectar estrellas demasiado grandes porque éstas pueden funcionar bastante mal como referencias de alineación. El valor por defecto de cinco escalas parece funcionar bien en la mayoría de los casos.
-
Noise scales (escalas de ruido). Es el número de capas de wavelets utilizado para reducción de ruido. La reducción de ruido se realiza para impedir la inclusión de estructuras de imagen muy pequeñas en la fase de detección, las cuales pueden conducir a la detección de falsas estrellas. Incremente el valor de este parámetro, si es necesario, para trabajar con imágenes ruidosas.
-
Minimum star peak value (valor de pico mínimo). Las estrellas cuyo píxel más brillante se encuentre por debajo de este valor no serán detectadas. Puede utilizar este parámetro para controlar la detección de estrellas débiles, si es necesario.
-
Maximum star distortion (máxima distorsión). La distorsión de una estrella se mide con respecto a un cuadrado, cuya distorsión es igual a la unidad. Un valor menor implica más distorsión. La distorsión de una estrella perfectamente circular es pi/4, o aproximadamente 0.75. Las estrellas que presentan una distorsión mayor que el valor de este parámetro no serán detectadas.
-
Inverted image (imagen invertida). Seleccione esta opción para registrar imágenes en negativo (estrellas oscuras sobre un fondo brillante).
También es interesante -y esperamos que útil- el parámetro
Working mode (modo de trabajo). hay dos modos de registro de imágenes:
match mode (modo de alineación, la opción por defecto) y
mosaic mode (modo mosaico). Pienso que estos modos se explican básicamente a sí mismos.
En modo
match (alineación), la imagen de salida (registrada) siempre tendrá la misma geometría que la imagen de referencia. La imagen destino será transformada (trasladada, girada, etc.) para hacerla coincidir con la imagen de referencia, pero entonces será recortada a las dimensiones de referencia. Éste es el modo "normal" de registro de imágenes. Por ejemplo, usted puede integrar (promediar) inmediatamente un conjunto de imágenes registradas de esta forma.
En
modo mosaico, ambas imágenes -referencia y destino-, son colocadas sobre un
canvas (fondo) más grande. La imagen de referencia nunca es interpolada: sus píxeles son simplemente copiados "en su lugar" con respecto a la imagen destino, la cual es transformada (trasladada, girada, ...) e interpolada para hacerla coincidir. El resultado es un mosaico de dos imágenes sobre un fondo negro.
Además de los modos de registro, StarAlignment ofrece cuatro
modos de control adicionales:
-
Structure Map (mapa de estructuras). En este modo usted obtendrá una imagen binarizada (sólo píxeles negros y blancos puros) cuyos píxeles blancos corresponden a píxeles de la imagen que han sido identificados como estructuras significativas por el algoritmo de detección de estrellas.
-
Structure Detection (detección de estructuras). Similar a Structure Map, pero en vez de una imagen binarizada se obtienen píxeles reales de la imagen sólo en las regiones detectadas como estructuras significativas.
-
Detected Stars (estrellas detectadas). En este modo, se dibujan pequeñas cruces sobre una copia de la imagen a la que se ha aplicado el proceso. Cada cruz está centrada en el
centroide calculado para una estrella detectada (en realidad, el algoritmo calcula los
baricentros de las estrellas, que son más significativos para el proceso de registro de imágenes).
-
Matched Stars (estrellas coincidentes). Similar a Detected Stars, pero sólo se dibuja sobre las estrellas que han sido identificadas como coincidentes en ambas imágenes. Las parejas de estrellas coincidentes son utilizadas para calcular la transformación necesaria para registrar las imágenes.
El resto de parámetros son bastante avanzados, y normalmente no debería necesitar modificarlos. Para cambiar sus valores, usted debería, de hecho, tener al menos un conocimiento básico sobre algunos de los algoritmos utilizados por StarAlignment -vea la descripción técnica al final de este documento si esto le interesa. La única excepción es el parámetro
Use brightness relations (usar relaciones de brillo). Cuando esta opción está seleccionada, StarAlignment no sólo utilizará relaciones geométricas entre estrellas, sino también relaciones entre sus brillos detectados. Como esta opción puede causar problemas con imágenes obtenidas en diferentes longitudes de onda (por ejemplo, canales RGB individuales), hemos preferido dejarla desactivada por defecto. Sin embargo, puede que quiera activarla para mejorar las prestaciones del algoritmo de concordancia de estrellas para tareas normales de registro de imágenes (esto es, cuando todas las imágenes han sido obtenidas centradas en la misma longitud de onda).
Proyectos en MarchaStarAlignment es la primera de una serie de herramientas para registro de imágenes en las que estoy trabajando en este momento. La carencia de herramientas de registro automático de imágenes ha sido un hueco muy importante en el conjunto de herramientas estándar de procesamiento disponibles en la plataforma PixInsight, y esta nueva serie pretende resolver esta situación de forma definitiva.
Éstas son las herramientas de registro que están planificadas:
- BatchStarAlignment. Una versión de StarAlignment diseñada para registrar una lista de imágenes en archivos de disco, en lugar de vistas.
- FFTAlignment. Una herramienta de registro automático de imágenes que trabaja en el dominio de la frecuencia (Fourier) y no utiliza referencias puntuales de alineación. Esta herramienta va a funcionar extremadamente bien para imágenes lunares, así como para imágenes no astronómicas, incluyendo la posibilidad de construir mosaicos. Este proceso es capaz de registrar en presencia de traslaciones y rotaciones arbitrarias, pero sólo tolera diferencias de escala mínimas. Estoy tratando de superar esta limitación, en cualquier caso.
- (Nombre del proceso aún no decidido). Un sistema de registro de propósito general, utilizando referencias puntuales basadas en detección de esquinas. Funcionará básicamente como StarAlignment, pero utilizando esquinas en vez de estrellas como referencias de alineación, y correlación de fase local en vez de semejanza de triángulos.
Por supuesto, DynamicAlignment permanecerá como un sistema de registro manual de alta precisión. Esta herramienta también se beneficiará del trabajo de investigación que está siendo realizado para desarrollar el resto de herramientas de registro automático.
Descripción Técnica e Información de ReferenciaStarAlignment implementa un buen puñado de algoritmos sofisticados para llevar a cabo la crítica tarea del registro de imágenes de una forma completamente automática. No es una tarea fácil, ni mucho menos; de hecho, en mi opinión éste es uno de los problemas más complejos y difíciles en procesamiento de imágenes, y ofrecer una contribución significativa en este campo es todo un desafío. Esto es precisamente lo que he intentado hacer con StarAlignment; ustedes dirán si he logrado alcanzar mi objetivo.
El proceso llevado a cabo por StarAlignment se puede dividir en varios bloques lógicos, los cuales describiré brevemente en el resto de este documento.
Detección de EstrellasËsta es una de las partes más críticas de toda la tarea de registro de imágenes. Si las estrellas no son detectadas eficientemente, todo el proceso fallará, o bien funcionará de forma deficiente. Necesitamos detectar el mayor número posible de estrellas, pero al mismo tiempo queremos ser inmunes a falsas estructuras que son muy similares a estrellas (por ejemplo, píxeles calientes) y a estructuras no estelares de pequeño tamaño. El ruido también puede ser un serio problema en esta fase, y por esta razón he implementado un algoritmo de detección basado en técnicas de análisis multiescala (mediante wavelets). No estoy satisfecho en absoluto con el detector de estrellas que he implementado hasta ahora, así que se puede esperar ver muchos cambios y mejoras en esta parte del proceso. Básicamente, el detector actual es rápido y funciona bastante bien para la mayoría de imágenes lineales que no tienen demasiado ruido, pero definitivamente necesitamos un algoritmo más robusto y fiable.
Correspondencia de EstrellasUna vez que tenemos una lista de estrellas para cada imagen, debemos encontrar pares de estrellas coincidentes. Se trata de un problema cásico -y extremadamente difícil de resolver:
el problema de la correspondencia de puntos. Afortunadamente, las estrellas son características casi ideales como referencias para el registro de imágenes, puesto que una estrella es muy fácil de identificar como una
característica significativa. Contrariamente, un sistema genérico de registro de imágenes, diseñado para trabajar con imágenes diurnas (no astronómicas), necesita encontrar y utilizar características significativas sometidas a niveles muy superiores de incertidumbre.
Por ejemplo, un sistema de registro de imágenes de propósito general típicamente emplea un
detector de esquinas para encontrar características significativas, pero las esquinas son muy difíciles de identificar como elementos coincidentes entre diferentes imágenes, debido a la elevada incertidumbre que es inherente a su detección. Para enfrentar este problema se han desarrollado algoritmos de reconocimiento de características muy sofisticados durante los últimos años. Probablemente el mejor ejemplo de un software que representa el estado del arte en generación de panoramas gracias a la implementación de una de estas técnicas es AutoStitch, cuya eficiencia se debe principalmente al algoritmo SIFT de reconocimiento creado por M. Brown y D. Lowe, de la University of British Columbia. Puede leer el trabajo original si lo desea en esta dirección:
http://www.cs.ubc.ca/~mbrown/papers/ijcv2007.pdfPero para astrofotografía de cielo profundo podemos vivir muy bien limitándonos a las estrellas como referencias de alineación, ¿no es cierto? Sí, por supuesto, y éste es uno de esos casos *extremadamente raros* en los que las imágenes astronómicas son mucho más fáciles de manejar que las imágenes diurnas. Así que definitivamente tenemos que sacar partido de este evento
He implementado una variación del algoritmo básico descrito por F. G. Valdés [1], refinado posteriormente por M. Marszalek and P. Rokita [2]. Estos elegantes algoritmos están basados en semejanza de triángulos. La idea básica es que las relaciones entre los lados de triángulos construidos con las mismas estrellas en ambas imágenes son invariantes a algunas transformaciones afines de particular interés: traslación, rotación, y cambio de escala (con la condición de que los factores de escala en ambos ejes sean iguales). De manera que identificando triángulos similares podemos encontrar correspondencias entre parejas de estrellas en ambas imágenes.
Mi implementación, sin embargo, difiere de los algoritmos originales que puede encontrar en las Referencias [1] y [2]. Los algoritmos originales no fueron diseñados para llevar a cabo tareas de registro de imágenes, sino para localizar estrellas detectadas sobre imágenes CCD en catálogos de estrellas, como parte de sistemas automatizados de exploración del cielo. Por esta razón los algoritmos originales construyen y comparan todos los triángulos existentes entre un conjunto muy reducido de estrellas utilizadas como referencias de alineación. Se puede definir N*(N-1)*(N-2)/6 triángulos con N estrellas, lo cual implica que la tarea de correspondencia de estrellas en conjunto es básicamente un proceso de complejidad O(N^3) cuando se utilizan todos los triángulos. En la práctica esto limita el número de estrellas utilizadas para el registro a no más de 40 ó 50, lo cual es claramente insuficiente para muchos propósitos prácticos de registro de imágenes. Por ejemplo, al construir mosaicos, la imagen de referencia y la imagen registrada comparten habitualmente sólo una pequeña fracción de las estrellas detectadas, de manera que limitar el proceso a las 50 estrellas más brillantes es sencillamente inaplicable. En mi implementación, contruyo todos los triángulos sólo cuando el número de estrellas detectadas es 20 o menos. Con más de 20 estrellas, se construye sólo un número limitado de triángulos para cada estrella detectada. Para una estrella cualquiera, se construyen n triángulos con las 2*n estrellas vecinas más cercanas, donde n es un parámetro definible por el usuario cuyo valor por defecto es de ocho triángulos por estrella. Esto genera un conjunto muy grande -pero manejable- de triángulos. Aparte de reducir la complejidad de todo el proceso, lo cual nos permite utilizar miles de estrellas en lugar de unas pocas decenas, construir un número limitado de triángulos basándose en proximidad de estrellas tiene una ventaja adicional: como estamos favoreciendo las comparaciones entre triángulos a pequeña escala, nuestra versión del algoritmo puede manejar mucho mejor cantidades moderadas de distorsión gobal. Al utilizar con preferencia triángulos a gran escala construidos con un número reducido de estrellas brillantes, el algoritmo original de correspondencia es mucho más intolerante con respecto a la distorsión.
Junto con una estrategia diferente para la construcción de triángulos, mi implementación utiliza un mecanismo completamente distinto para asegurar la
robustez del proceso de correspondencia de estrellas. Robustez significa aquí una resistencia extremadamente alta a las
falsas correspondencias. Tras la rutina inicial de correspondencia de estrellas basada en semejanza de triángulos, tenemos una lista de
correspondencias putativas de estrellas (
putative star matches). Sin embargo, no todas estas correspondencias son verdaderas concordancias entre las mismas estrellas en ambas imágenes -de ahí el adjetivo
putativas utilizado aquí. Es crucial para la precisión de todo el proceso de registro de imágenes detectar y eliminar todas las falsas conrrespondencias, o
outliers, y mantener sólo las verdaderas parejas de estrellas, que podemos llamar
inliers en este contexto. Diferentes estrategias han sido propuestas para llevar a cabo esta tarea. Los autores de los trabajos originales han utilizado métodos de rechazo basados en la mediana de la distribución [2] y en métodos de
sigma-clipping iterativos [1]. Personalmente, no me gustan estos métdos. Con el propósito de construir un sistema sólido y preciso de registro de imágenes, he implementado una adaptación del algoritmo RANSAC (RANdom SAmple Consensus). Se puede encontrar una buena descripción de RANSAC en la Wikipedia:
http://en.wikipedia.org/wiki/RANSAC. La descripción original del algoritmo por M. Fischler y R. Bolles (en 1981) está en la Referencia [3].
Estimación de los Parámetros de la TransformaciónMi implementación utiliza una
transformación proyectiva de coordenadas para realizar el registro de imágenes. Un modelo proyectivo es capaz de capturar completamente todas las transformaciones afines (traslación, rotación, cambio de escala y compresión (
shearing)), más los cambios de frecuencia espacial en función de la posición (
chirping) y la convergencia de líneas (
keystoning), conservando las líneas rectas. Una excelente discusión sobre este tema, se puede encontrar en la Referencia [4]. Una transformación proyectiva utiliza ocho parámetros en vez de los seis empleados por un modelo afín, de manera que necesitamos al menos cuatro pares de estrellas correspondientes entre ambas imágenes para calcularla. Por supuesto, cuando sólo hay disponibles tres pares de estrellas (el mínimo requerido por el proceso StarAlignment), se emplea una transformación afín de forma automática (en realidad, lo que se hace es simular un modelo proyectivo duplicando una de las tres parejas de estrellas).
Básicamente, RANSAC se utiliza para calcular los ocho parámetros de la transformación y hacer el rechazo robusto de
outliers (falsas correspondencias entre estrellas) al mismo tiempo. Mi implementación de RANSAC parece ser muy precisa y rápida, especialmente en sistemas multiprocesador/multinúcleo (puede utilizar todos los procesadores disponibles). Puede manejar fácilmente varios miles de parejas de estrellas y puede tolerar una fracción significativa de
outliers (más de un 40% en los tests que se han realizado).
La salida de la rutina RANSAC es la matriz 3x3 de transformación para el modelo proyectivo que ha sido ajustado para el mayor conjunto encontrado de parejas de estrellas confirmadas, más estimaciones del error RMS (
Root Mean Square) y los errores de pico en las transformaciones de coordenadas. Para obtener los parámetros de la transformación, podemos considerar la posibilidad de realizar un ajuste mediante un método de mínimos cuadrados no lineal. Por ejemplo, una opción es el algoritmo de Levenberg-Marquardt. Sin embargo, he preferido seguir un camino diferente para resolver este problema, basándome en la solución directa del sistema de N ecuaciones lineales (N = el número de parejas de estrellas) y en la descomposición en valores singulares (
Singular Value Decomposition, SVD). Se trata del método normalizado de ocho puntos (
normalized eight-point method) [5] y la transformación lineal directa (
direct linear transformation, DLT) [6].
InterpolaciónEl último paso del proceso de registro de imágenes es interpolar la imagen destino para registrarla sobre la imagen de referencia. StarAlignment utiliza el modelo proyectivo obtenido en el paso anterior para calcular coordenadas transformadas, y una implementación eficiente de interpolación por splines bicúbicos [7] para generar los píxeles de la imagen registrada. Esta parte del proceso ha sido paralelizada y puede usar todos los procesadores disponibles.
Una característica importante de nuestra implementación de la interpolación por splines bicúbicos [7] es un mecanismo especial de
clamping que evita problemas de oscilación causados por variaciones muy grandes de brillo entre píxeles adyacentes de imágenes
raw de CCD. Básicamente, cuando dos píxeles adyacentes difieren en más de un umbral previamente determinado, el mecanismo de
clamping actúa forzando una interpolación de menor orden (cuadrática o lineal), en vez de tratar de ajustar una función cúbica. Por ejemplo, supongamos que dos píxeles contíguos tienen valores 0.10 y 0.95 (en el rango [0,1]), lo cual ocurre con bastante frecuencia en imágenes raw lineales (e.g., en las proximidades de una estrella). Intentar realizar una interpolación bicúbica entre esos valores es un error, y conducirá a un valor negativo que será representado como negro puro después de truncar los valores al rango [0,1]. Esto nunca ocurre con nuestra implementación (sí ocurre con otros paquetes de software).
Referencias[1] F.G. Valdés et al. (1995)
FOCAS Automatic Catalog Matching Algorithms. Publications of the Astronomical Society of the Pacific, 107:1119-1128.
http://articles.adsabs.harvard.edu/cgi-bin/nph-iarticle_query?1995PASP..107.1119V&data_type=PDF_HIGH&whole_paper=YES&type=PRINTER&filetype=.pdf[2] M. Marszalek, P. Rokita (2004)
Pattern Matching with Differential Voting and Median Transformation Derivation. Computer Vision and Graphics (Computational Imaging and Vision Series), 32:1002-1007.
http://lear.inrialpes.fr/pubs/2004/MR04/MarszalekRokita-ICCVG04-DifferentialVoting.pdf[3] Martin A. Fischler and Robert C. Bolles (1981).
Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography. Communications of the ACM 24:381-395.
[4] Steve Mann, Rosalind W. Picard (1997)
Video Orbits of the Projective Group: A Simple Approach to Featureless Estimation of Parameters. IEEE Transactions on Image Processing, 6:1281-1295.
[5] Richard I. Hartley (1995)
In defence of the 8-point algorithm. Proceedings of the Fifth International Conference on Computer Vision, 1064-1070.
[6] A. Agarwal, C. V. Jawahar, P. J. Narayanan (2005)
A survey of planar homography estimation techniques. Tech. Rep. IIIT/TR/2005/12, International Institute of Information Technology, Hyderabad, 2005.
[7] R. G. Keys (1981)
Cubic Convolution Interpolation for Digital Image Processing. IEEE Transactions on Acoustics, Speech & Signal Processing, 29:1153-1160.