Author Topic: Alineación de Canales  (Read 40260 times)

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Alineación de Canales
« on: 2008 December 13 02:17:21 »
Hola a todos:

En primer lugar lamento que mi nivel de inglés escrito no me permita traducir esta nota de una forma digna, por lo que solo queda escrita en español.

Uno de los problemas con los que nos encontramos los que practicamos la astrofotografia de muy amplios campos, con objetivos de focal muy corta, son las aberraciones radiales de los colores que hacen que según las estrellas se alejan del centro de la imagen los canales de sus colores se desplazan entre si, llegando a originar en la periferia de los encuadres tres imagenes que dejan de estar superpuestas.
Hay programas como el DSS que permiten, dentro del proceso del calibrado y registro de las imágenes, alinear estos canales.
Pero cuando se quiere hacer esta alineación en una imagen es un proceso de una cierta laboriosidad y que requiere bastante tiempo.
En PixInsight, con la implementación del proceso de StartAlignment, el procedimiento a seguir se ha simplificado, pues resulta mucho más sencillo que al alineamiento manual a que obligaba DynamicAlignment.
Yo he conseguido, partiendo de una imagen RAW de una exposición realizada con una Canon 400d modificada y con un objetivo de 20 mm, una alineación bastante aceptable siguiendo el siguiente procedimiento.
Extracción de los tres canales, obteniendo tres imagenes en gris, mediante ChannelExtraction.
Alineación de las imagenes de los canales rojo y azul, respecto al verde mediante StartAlignment.
Combinación de los canales rojo y azul alineados, con el verde que se usó como referencia, mediante ChannelCombination.
El resultado se puede ver en esta imagen donde se muestra la diferencia entre dos recortes de la imagen, antes y después del proceso indicado.



Ciertamente este proceso se complica cuando en el encuadre hay zonas sin estrellas por interponerse árboles, montañas, nubes, etc, o sencillamente es una imagen de trazas como una circumpolar, por lo que el proceso no cuenta con puntos de referencia en esas zonas.
Ahora bien y por ello viene mi petición, mientras se este utilizando la misma óptica y no haya cambios que modifiquen las circunstancias que generan la desalineación de los canales, yo creo que es posible aplicar la trasformación que genera el proceso de alineación que se ha conseguido con los canales de una imagen, en otras.
Seria cuestión de que aparte de generarse la alineación se pudiera almacenar de alguna manera la formula resultante para realizarlo y luego poder aplicarlo en otras imagenes.
Esto aparte de utilizarlo en imagenes que carezcan de estrellas que permitan la alineación podría ser muy util, para cuando se han obtenido muchas tomas, obtenida la "formula" en una de ellas, aplicarselo a las demás de una forma rápida.
¿Puede llegar a ser posible?.

Saludos.

Manolo L.
Saludos.

Manolo L.

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
Re: Alineación de Canales
« Reply #1 on: 2008 December 13 09:38:54 »
Quote from: "ManoloL"
Ahora bien y por ello viene mi petición, mientras se este utilizando la misma óptica y no haya cambios que modifiquen las circunstancias que generan la desalineación de los canales, yo creo que es posible aplicar la trasformación que genera el proceso de alineación que se ha conseguido con los canales de una imagen, en otras.
Seria cuestión de que aparte de generarse la alineación se pudiera almacenar de alguna manera la formula resultante para realizarlo y luego poder aplicarlo en otras imagenes.


Yo creo que ya es posible.

Si lo estoy entendiendo bien, tú actualmente para arreglar la imagen estás lanzando una serie de procesos sobre la imagen. Esos procesos los puedes guardar en un ProcessContainer y, cuando los tengas todos, metes el Container en el escritorio y lo almacenas en un archivo .psm. A este archivo le pones el nombre que te dé la gana, por ejemplo "450D modificada + filtro quitamanchas + taka 320 f/1.4.psm" (1).

Otro día, llegas con una foto chunga y el proceso para arreglarla es cargar el .psm y arrastrarle el único icono (el Container) sobre la imagen.

--

1.- O les pones nombres más crípticos/normalitos y paralelamente creas un archivo de texto "Alineaciones de canales.txt" en el que relacionas cada .psm con las notas que creas conveniente, sin las limitaciones de los nombres de archivo:
Code: [Select]
001.psm: 450D modificada + filtro quitamanchas + taka 320 f/1.4.
002.psm: el mismo que arriba pero con barlow de plástico.
003.psm: a pelo, sólo cámara con un 11mm.
[/size]

Odio el phpbb, ¿no se puede poner el "code" en pequeño? xD
--
 David Serrano

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Re: Alineación de Canales
« Reply #2 on: 2008 December 13 10:52:45 »
Quote from: "David Serrano"

Yo creo que ya es posible.

Si lo estoy entendiendo bien, tú actualmente para arreglar la imagen estás lanzando una serie de procesos sobre la imagen. Esos procesos los puedes guardar en un ProcessContainer y, cuando los tengas todos, metes el Container en el escritorio y lo almacenas en un archivo .psm. A este archivo le pones el nombre que te dé la gana, por ejemplo "450D modificada + filtro quitamanchas + taka 320 f/1.4.psm" (1).

Otro día, llegas con una foto chunga y el proceso para arreglarla es cargar el .psm y arrastrarle el único icono (el Container) sobre la imagen.

--



Hola a todos

Gracias por tus indicaciones David.

Es posible que pueda hacerse, pero yo no tengo claro que sea tan sencillo.
El problema es que la alineación de imagenes se hace con dos imagenes y genera, asumiendo que la primera es la de referencia, una tercera que es la registrada de la segunda con respecto a la primera. El proceso lo hace partiendo de las estrellas que encuentra en ambas.
Si yo lanzo ese proceso sobre dos imágenes (canal verde y canal rojo o azul) donde el programa no encuentra estrellas alineables, sospecho que dará error. Creo entender que el programa ejecuta la alineación con lo que hay en las imagenes que se estan intentando alinear y no con los parametros obtenidos de otra alineación anterior.
Otra cosa seria si lo que intentara alinear fuera otra foto parecida con estrellas. En este caso si creo que funcionaria. Pero no es eso lo que pretendo hacer.

Saludos.
Saludos.

Manolo L.

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
Alineación de Canales
« Reply #3 on: 2008 December 13 13:04:32 »
Un vistazo rápido a los parámetros de StarAlignment me indica que probablemente tengas razón. Siento no poder decirte mucho más.
--
 David Serrano

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
Alineación de Canales
« Reply #4 on: 2008 December 14 10:41:52 »
Hola Manolo y David

Es perfectamente posible hacerlo, pero es necesario escribir un pequeño script.

Si os fijáis StarAlignment escribe la matriz de transformación en la consola. Por ejemplo:

Code: [Select]
Transformation matrix:
     +1.0275     -0.3920   -102.2984
     +0.3912     +1.0279    -76.1698
     -0.0000     +0.0000     +1.0000


Estas matrices se pueden aplicar para transformar una imagen mediante una proyección homográfica.

Sea H la matriz de transformación (producida por StarAlignment):

Code: [Select]
   / h11 h12 h13 \
H = ( h21 h22 h23 )
    \ h31 h32 h33 /


Definimos:

Code: [Select]
w = h31 + h32 + h33

Sean A, A' las imágenes original y transformada, respectivamente. Para cada píxel p' = {x', y'} de A', las coordenadas del píxel correspondiente p = {x, y} en A (por proyección inversa) vienen dadas por:

Code: [Select]
x = (h11*x' + h12*y' + h13)/w
y = (h21*x' + h22*y' + h23)/w


Naturalmente, conviene asegurarse de que w no es insignificante o cero, aunque si usáis las matrices que produce StarAlignment, siempre se cumple que:

Code: [Select]
w >= 1

De esta forma, cada píxel p' de A' se puede calcular por interpolación sobre A en las coordenadas de p. Esto es lo que hace StarAlignment internamente.

Esto se puede hacer con un script. David, ¿te animas? :)
Juan Conejero
PixInsight Development Team
http://pixinsight.com/

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
Alineación de Canales
« Reply #5 on: 2008 December 14 11:06:27 »
Quote from: "Juan Conejero"
Esto se puede hacer con un script. David, ¿te animas? :)


Sí, pero como no lo haga desde la ofi... en casa simplemente no puede ser.
--
 David Serrano

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Alineación de Canales
« Reply #6 on: 2008 December 14 14:04:07 »
Quote from: "Juan Conejero"
Hola Manolo y David

Es perfectamente posible hacerlo, pero es necesario escribir un pequeño script.

Si os fijáis StarAlignment escribe la matriz de transformación en la consola. Por ejemplo:

Code: [Select]
Transformation matrix:
     +1.0275     -0.3920   -102.2984
     +0.3912     +1.0279    -76.1698
     -0.0000     +0.0000     +1.0000

..........................



Hola Juan:

Yo ya me había fijado en la existencia de esa matriz y en que hay una cierta similitud entre los valores que aparecen, al alinear los canales en distintas exposiciones. Lógicamente esta aberración es constante si no hay cambios en la óptica. No se si los cambios de temperatura también tendrán una cierta influencia.
Ciertamente gran parte de tu explicación se escapa a mi compresión, pues mi formación matemática, incluida la geometría, no es muy elevada.
No obstante aplicando la lógica me parecía posible, como indicas que es, aplicar la matriz obtenida con una exposición, a otra distinta.
Curiosamente podemos, partiendo de nuestras imágenes astronómicas, llegar a corregir esta aberración de una foto "normal".
Curiosamente he oído que Photoshop tiene una utilidad para corregir este problema en las fotos cotidianas. No se si será cierto, pero creo que en ellas debe ser más dificil, al no contar con puntitos localizables que se desalinean en los distintos canales, como nos ocurre con las imágenes de las estrellas.

Quedo a la espera, a ver si David o algún otro "valiente" se anima.

Saludos.

Editado:

Después de una lectura mas reposada de la nota veo que la trasformación utilizada no es matemáticamente complicada.
De hecho voy a probar en Excel a hacer simulaciones para ver si las formulas aplicadas partiendo de los valores de las matrices que obtengo al alinear los canales dan resultados coherentes con lo que se puede estimar que ocurra que supongo que son desplazamientos radiales.

Saludos de nuevo.
Saludos.

Manolo L.

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
Alineación de Canales
« Reply #7 on: 2008 December 15 00:30:29 »
Quote from: "Juan Conejero"
Code: [Select]
x = (h11*x' + h12*y' + h13)/w
y = (h21*x' + h22*y' + h23)/w


(Ya en la ofi :^P) A mí lo que me ralla es que cuando x' es 0 (o sea, en el borde izquierdo), los valores de x e y dependen exclusivamente de y'. Y, análogamente, cuando y' es 0 (o sea, en el borde superior), los valores de x e y dependen exclusivamente de x'. No le veo mucho sentido, pero tampoco le he dedicado tiempo extra de brain-power.
--
 David Serrano

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
Alineación de Canales
« Reply #8 on: 2008 December 15 02:15:30 »
Buenos días David

Pues es asín :) Ten en cuenta que x' e y' son las coordenadas en la imagen transformada, o sea que lo que estamos haciendo aquí es una proyección inversa (para cada píxel de la imagen final hallar las coordenadas para interpolar sobre la imagen original).

Ten en cuenta que w depende de transformaciones en ambas coordenadas, o sea que nunca vas a tener coordenadas x, y que sólo dependan de x' o y' (salvo que la transformación sea precisamente esa, p.e. un simple desplazamiento en X o en Y).

HomographicProjection ... ¡suena bien como nombre de un algo (algo en {script, módulo})! :o)
Juan Conejero
PixInsight Development Team
http://pixinsight.com/

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
Alineación de Canales
« Reply #9 on: 2008 December 15 02:59:38 »
Quote from: "Juan Conejero"
(para cada píxel de la imagen final hallar las coordenadas para interpolar sobre la imagen original).


Tengo algo pero cuando las coordenadas de la imagen original, resultantes de las ecuacioncitas, se salen de los límites, ¿qué hacemos? De momento le puse un setSample (1.0, x', y') y aparecen un montón de píxels blancos.
--
 David Serrano

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
Alineación de Canales
« Reply #10 on: 2008 December 15 03:05:00 »
Quote
cuando las coordenadas de la imagen original, resultantes de las ecuacioncitas, se salen de los límites, ¿qué hacemos?


Mejor rellenar con negro. Es más eficiente rellenar primero toda la imagen final con negro. Después, cuando las coordenadas interpoladas se salen de la imagen original, simplemente no hagas nada y pasa al siguiente píxel. Esto rompe menos el pipelining de los procesadores.
Juan Conejero
PixInsight Development Team
http://pixinsight.com/

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
Alineación de Canales
« Reply #11 on: 2008 December 15 03:08:11 »
<no-vale>
O bien, deja que el runtime de JavaScript haga todo el trabajo por ti. Haz como si la imagen original fuera "infinita" y aplica siempre el valor interpolado a la imagen final.

Image.interpolate() te devolverá cero si las coordenadas están fuera de rango.
</no-vale>

¡Ooops! No, ignora esto que acabo de decir - en las últimas versiones eliminé esto para mejorar las prestaciones. Tienes que verificar la validez de las coordenadas explícitamente. Si no son válidas, Image.interpolate() te devolverá garbage, y eventualmente puedes causar un segfault. No me acordaba  :oops:
Juan Conejero
PixInsight Development Team
http://pixinsight.com/

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Alineación de Canales
« Reply #12 on: 2008 December 15 03:30:33 »
Quote from: "David Serrano"
Quote from: "Juan Conejero"
Code: [Select]
x = (h11*x' + h12*y' + h13)/w
y = (h21*x' + h22*y' + h23)/w


(Ya en la ofi :^P) A mí lo que me ralla es que cuando x' es 0 (o sea, en el borde izquierdo), los valores de x e y dependen exclusivamente de y'. Y, análogamente, cuando y' es 0 (o sea, en el borde superior), los valores de x e y dependen exclusivamente de x'. No le veo mucho sentido, pero tampoco le he dedicado tiempo extra de brain-power.


Hola David:
He elaborado una hoja de Excel con los datos de la matriz que me salió para alinear rojo sobre verde y he calculado los resultados del origen de un píxel rojo situado, en la trasformada, en las esquinas, en un punto cercano a una esquina, y en el centro de la imagen.



Los resultados son bastante coherentes:
En las esquinas de la trasformada el píxel rojo debería provenir de fuera del encuadre, por lo que no existe. En un punto de la trasformada cercano a una esquina (X'=3; Y'=2) ya coloca el pixel proveniente de dentro del encuadre original (0,52; 0,28 ). Y en el centro, como era de suponer apenas si lo mueve, solo hay una diferencia de centésimas de píxel.
Por lo que veo para afinar la imagen habría, en este caso, que posteriormente y con el resultado de la alineación obtenido, recortar 2 píxeles de los bordes horizontales y 3 de los bordes verticales de la imagen resultante, para eliminar las estrellas que han "perdido" su componente roja.
Me doy cuenta que todas las estrellas de los bordes son azules. :roll:  :roll:

Saludos.
Saludos.

Manolo L.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Alineación de Canales
« Reply #13 on: 2008 December 15 04:26:59 »
Hola a todos,

que rápido liáis una buena! :D

Quote from: "Juan Conejero"
HomographicProjection ... ¡suena bien como nombre de un algo (algo en {script, módulo})! :o)


oye David, si vas muy liado para "modulolizar" este scriptillo ya lo hago yo ;) no hay problema!

Oriol

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
Alineación de Canales
« Reply #14 on: 2008 December 15 04:29:11 »
Quote
A mí lo que me ralla es que cuando x' es 0 (o sea, en el borde izquierdo), los valores de x e y dependen exclusivamente de y'. Y, análogamente, cuando y' es 0 (o sea, en el borde superior), los valores de x e y dependen exclusivamente de x'.


David, antes no te respondí a esto correctamente (Lunes por la mañana, ya sabes... hmmm...)

En el punto x'=y'=0 estas transformaciones siempre equivalen a una traslación pura, de manera que sólo los elementos h13 y h23 (desplazamiento en X y en Y, respectivamente) y la última fila de la matriz (w) intervienen para calcular las coordenadas del punto sobre la imagen original. Esto lo que demuestra es que tanto la rotación como el cambio de escala son invariantes a la traslación. Vaya, si no fuera así StarAlignment no funcionaría ni de coña :)
Juan Conejero
PixInsight Development Team
http://pixinsight.com/