Bienvenidos - Abierto registro y Login a usuarios

de Java y javascript

Dedicado al software y los recursos astronómicos existentes en la red.
Cuelga aquí el enlace de tu página web.
Post Reply
Caliu
de Java y javascript

Post by Caliu » Sun Mar 18, 2007 12:51 pm

¿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:



User avatar
David Serrano
Colaborador
Colaborador
Posts: 414
Joined: Sun Dec 31, 2006 12:19 am
Location: Newbury, West Berkshire, UK
Re: de Java y javascript

Post by David Serrano » Sun Mar 18, 2007 1:39 pm

Last edited by David Serrano on Mon Nov 12, 2007 2:54 am, edited 1 time in total.
--
David Serrano

Caliu

Post by Caliu » Sun Mar 18, 2007 2:20 pm

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?

User avatar
David Serrano
Colaborador
Colaborador
Posts: 414
Joined: Sun Dec 31, 2006 12:19 am
Location: Newbury, West Berkshire, UK

Post by David Serrano » Sun Mar 18, 2007 4:35 pm

Last edited by David Serrano on Mon Nov 12, 2007 2:55 am, edited 1 time in total.
--
David Serrano

Caliu

Post by Caliu » Sun Mar 18, 2007 8:10 pm

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

Carlos Milovic

Post by Carlos Milovic » Sun Mar 18, 2007 10:13 pm

En PixInsight, los scripts pueden contener codigo puro JavaScript, asi como comandos propios de la consola, administrar archivos, etc. además, cualquier proceso instalado es automaticamente escriptable, es decir, internamente el programa se encarga de definir como llamarlo, y definir sus parametros. Asi, por ejemplo, se puede definir en una lineas del script una instancia de CurvesTransform, con todos los puntos de control, para los canales que queramos. Ojo, que este proceso no tiene interfaz por la consola de comandos, estas son cosas distintas. Para averiguar la sintaxis de cada proceso se puede utilizar el contenedor, y gracias a 'el mirar como se definen los parametros.

Ahora, respecto a JavaScript, es un lenguaje interpretado muy similar a C. Es altamente intuitivo, y no se requiere mucho para empezar. Eso si, ya que esta altamente "influenciado" por la PCL, hay varias cosas que hay que aplicar de manera especial, como por ejemplo, escribir en la consola. Para aprender todo esto lo mejor es simplemente ir mirando los ejemplos que se adjuntan, y usar el viejo método de "copiar y pegar" para ir construyendo nuestros codigos.


Salu2

Carlos Milovic F.

juan_conejero
Asiduo
Asiduo
Posts: 103
Joined: Sun Jun 18, 2006 12:07 am
Location: Valencia
Re: de Java y javascript

Post by juan_conejero » Mon Mar 19, 2007 7:20 pm

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):

Code: Select all

#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:

juan_conejero
Asiduo
Asiduo
Posts: 103
Joined: Sun Jun 18, 2006 12:07 am
Location: Valencia

Post by juan_conejero » Mon Mar 19, 2007 7:34 pm

Hola Caliu
Caliu wrote: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... :-)

juan_conejero
Asiduo
Asiduo
Posts: 103
Joined: Sun Jun 18, 2006 12:07 am
Location: Valencia

Post by juan_conejero » Mon Mar 19, 2007 7:46 pm

David Serrano wrote:(*) 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 :-)

User avatar
David Serrano
Colaborador
Colaborador
Posts: 414
Joined: Sun Dec 31, 2006 12:19 am
Location: Newbury, West Berkshire, UK

Post by David Serrano » Mon Mar 19, 2007 9:29 pm

--
David Serrano


Post Reply