FORUM

de Java y javascrip...
 
Compartir:
Avisos
Vaciar todo

de Java y javascript

6 Respuestas
2 Usuarios
0 Me gustas
2,157 Visitas
Caliu
(@caliu)
Respuestas: 3244
Famed Member
Topic starter
 

¿alguna alma caritativa podira explicarme que ventajas tiene esto? ¿necesito aprender a escribir en ese lenguaje? ¿que ventajas ofrece en PI? ¿como se usa en PI? ¿podriais ponerme ejemplos? y sobre todo ¿podrias explicarlo en un lenguaje mas o menos sencillito? :wink:

"¡Hay tantas cosas en la vida más importantes que el dinero!... ¡Pero cuestan tanto!"

http://astrosurf.com/space_colors
----------------------------------------------------
Tak FS 102N, Tak FS 60C,Luna 6.0 C SBIG STV, Gemini G41, Nandofocus V 3.0.
----------------------------------------------------

 
Respondido : 18/03/2007 12:51 pm
Caliu
(@caliu)
Respuestas: 3244
Famed Member
Topic starter
 

O sea, que por ejemplo puedo automatizar mis porcesos de costumbre?, es decir, yo siempre utilizo los valores de la mediana para normalizar la imagen, ¿podria automatizar un proceso como este?

"¡Hay tantas cosas en la vida más importantes que el dinero!... ¡Pero cuestan tanto!"

http://astrosurf.com/space_colors
----------------------------------------------------
Tak FS 102N, Tak FS 60C,Luna 6.0 C SBIG STV, Gemini G41, Nandofocus V 3.0.
----------------------------------------------------

 
Respondido : 18/03/2007 2:20 pm
Caliu
(@caliu)
Respuestas: 3244
Famed Member
Topic starter
 

Entonces tendré que aprender a escribir en este lenguaje, ¿alguna web donde hacerlo?, por lo pronto voy a investigar en el google :D

"¡Hay tantas cosas en la vida más importantes que el dinero!... ¡Pero cuestan tanto!"

http://astrosurf.com/space_colors
----------------------------------------------------
Tak FS 102N, Tak FS 60C,Luna 6.0 C SBIG STV, Gemini G41, Nandofocus V 3.0.
----------------------------------------------------

 
Respondido : 18/03/2007 8:10 pm
(@juan_conejero)
Respuestas: 91
Estimable Member
 

Un compañero de foro preguntó hace unas horas cómo obtener todas las capas sobre las que ATrousWaveletTransform va a funcionar según los parámetros que le demos. No se me ocurre ninguna forma de automatizar eso excepto con JS. Se crearían varias instancias del proceso, cada una de las cuales aislaría una sola capa y crearía una nueva imagen con ella.

Sí que se podría hacer así, aunque el proceso ATrousWaveletTransform dispone de un modo de previsualización de capas para hacer esto de forma cómoda (Layer Preview).

Sin embargo, ya que estamos hablando de cómo JavaScript nos puede ayudar a automatizar tareas, esto se puede hacer directamente con JavaScript sin acudir al proceso ATrousWaveletTransform, porque las transformaciones por wavelets son parte de la implementación de JS en PixInsight (entre muchas otras cosas). Prueba este script (copia y pega en Script Editor):

#include <pjsr/UndoFlag.jsh>

/*
 * Funciones de escala
 */
var _3x3LinearInterpolation = [ 1/16, 1/8, 1/16,
                                1/8,  1/4, 1/8,
                                1/16, 1/8, 1/16 ];

var _5x5B3Spline = [ 1/256, 1/64, 3/128, 1/64, 1/256,
                     1/64,  1/16, 3/32,  1/16, 1/64,
                     3/128, 3/32, 9/64,  3/32, 3/128,
                     1/64,  1/16, 3/32,  1/16, 1/64,
                     1/256, 1/64, 3/128, 1/64, 1/256 ];

/*
 * Realiza la transformación por wavelets de una imagen y extrae las capas de
 * wavelets como un conjunto de imágenes independientes.
 *
 * image             La imagen que queremos transformar.
 *
 * scalingFunction   Función de escala para la transformación. Puede ser
 *                   cualquier función positiva como un kernel cuadrado.
 *
 * n                 Número de capas de wavelets (n >= 1). Se generarán n+1
 *                   imágenes para las n capas de detalle más la capa residual.
 */
function ExtractWaveletLayers( image, scalingFunction, n )
{
   // Hacemos la transformación por wavelets con la función de escala
   // y el número de capas especificados. W contendrá una serie de imágenes
   // (en pto. flotante de 32 bits) que corresponderán a las capas de
   // wavelets.
   var W = image.aTrousWaveletTransform( scalingFunction, n );

   // Para cada capa de wavelets. La capa j = n es la capa residual de la
   // transformación. Para j < n tenemos capas de detalle.
   for ( var j = 0; j <= n; ++j )
   {
      // Identificador de la imagen para esta capa
      var id = (j < n) ? format( "layer%02d", j ) : "residual";

      // Nueva ventana para esta capa
      // Se crea una imagen de un píxel en escala de grises (1x1x1),
      // 32 bits en punto flotante. 
      var window = new ImageWindow( 1, 1, 1, 32, true, false, id );

      // Vista principal de la ventana
      var view = window.mainView;

      // Informamos a PI de que vamos a cambiar la imagen en la vista
      // UndoFlag_NoSwapFile hace que PI no genere un archivo de intercambio
      // para la imagen (puesto que es una imagen nueva, no hace falta un
      // archivo de intercambio porque no vamos a querer deshacer (undo) nada).
      view.beginProcess( UndoFlag_NoSwapFile );

      // Transferimos la imagen de la capa j de wavelets a la vista ppal. de
      // la ventana.
      view.image.transfer( W[j] );

      // Reescalamos al rango estándar de 0 a 1.
      view.image.rescale()

      // Informamos a PI que hemos terminado de trabajar con la vista.
      view.endProcess();

      // Hacemos que la ventana sea visible.
      window.show();

      // Aplicamos el zoom necesario para que quepa toda la ventana en el
      // espacio de trabajo.
      window.zoomToFit();
   }
}

function main()
{
   // Obtenemos la ventana de imagen activa en el espacio de trabajo.
   var window = ImageWindow.activeWindow;

   // ¿No hay ninguna ventana de imagen activa?
   if ( window.isNull )
      throw new Error( "No active image window!" );

   // Llamamos a la función que extrae capas. Para extraer un número
   // diferente de capas y/o usar otra función de escala, basta con
   // cambiar los argumentos de la función.
   ExtractWaveletLayers( window.mainView.image, _5x5B3Spline, 5 );
}

main();

Como ves es bastante sencillo en realidad. Por supuesto, hace falta un montón de documentación para todo esto. La va a haber, naturalmente, aparte de montones de ejemplos :wink:

 
Respondido : 19/03/2007 7:20 pm
(@juan_conejero)
Respuestas: 91
Estimable Member
 

Hola Caliu

Entonces tendré que aprender a escribir en este lenguaje, ¿alguna web donde hacerlo?, por lo pronto voy a investigar en el google :D

Hombre, no es que sea necesario, aunque en mi opinión es recomendable, y además es muy divertido y tremendamente adictivo :lol:

Bromas aparte, con los scripts tu forma de entender el procesamiento puede cambiar completamente. El poder y la flexibilidad que tienen te pueden permitir hacer cosas que ahora sólo puedes imaginar, y mucho más.

Para empezar a enterarse de JavaScript, no hay nada como la documentación de referencia en el sitio de Mozilla:

http://developer.mozilla.org/en/docs/Co ... _Reference

Se refiere a la versión 1.5 de JavaScript. PI implementa la versión 1.7, aunque no hay diferencias importantes. Está en Inglés, me temo. No sé si hay algo equivalente en español, aunque me temo que no (que me corrija alguien si estoy equivocado). Es una documentación técnica; hay que tomársela con calma y despacio, y estar siempre probando cosas, mirando ejemplos, y preguntando. Para eso estamos ;-)

Hay que tener en cuenta que la implementación de JavaScript en PI no está orientada a generar y controlar documentos para la web, como ocurre en cualquier navegador. En PI, JavaScript es un lenguaje especializado en procesamiento de imágenes. PI no sabe nada de urls, etiquetas html y cosas por el estilo. Por ejemplo, no existe algo como "document", pero sí Image, ImageWindow, etc.

Como decía en un mensaje anterior, falta documentación para todo esto, aunque con los ejemplos que hemos incluido se puede empezar a jugar. Poco a poco... :-)

 
Respondido : 19/03/2007 7:34 pm
(@juan_conejero)
Respuestas: 91
Estimable Member
 

(*) Supongo que existirán las típicas restricciones de seguridad, en plan de que no se podrán abrir archivos ni conectores de red, pero para lo que nos importa, esto no supone ninguna limitación.

De hecho, en PI hemos transgredido todas estas limitaciones completamente :-) Suponemos que el usuario es mayorcito como para saber que abrir un archivo desde un script implica ciertos riesgos y por lo tanto una responsabilidad. Personalmente, odio la tendencia actual de sobreproteger a los usuarios hasta el extremo de impedirles funcionar libremente, la paranoia absurda por la seguridad (véase el insoportable windows vista), etc.

Así que en PI se puede trabajar libremente con archivos desde JavaScript. De hecho, un script muy bonito sería uno para generar una galería de imágenes automáticamente, escribiendo páginas html, generando miniaturas, y todo eso :-)

 
Respondido : 19/03/2007 7:46 pm
Compartir: