Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

PDL con imágenes FITS

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Sab Dic 01, 2007 10:19 am
gazuniga
Perlero Nuevo
Perlero Nuevo
Registrado: 01 Dic 2007
Mensajes: 4
PDL con imágenes FITS Responder citando

¡Hola!

La verdad es que sé bien poco de Perl, pero necesito entender un programa de forma urgente.

Estoy trabajando con fotografías en formato fits tomadas por un telescopio. La idea es mezclar 3 fotos en distintos filtros para crear una imagen a color. El programa funciona pero necesito entender cómo lo hace.

Si alguien me puede ayudar estaré eternamente agradecida.

Perl:
use PDL;
use PDL::NiceSlice;
use Vtools;
use strict;
use PDL::Graphics::PGPLOT::Window;
#use PDL::ImageRGB;

use PDL;
use PDL::NiceSlice;
use Vtools;
use strict;
use PDL::Graphics::PGPLOT::Window;
#use PDL::ImageRGB;



 
my $im_B = rfits('testB.fits');
$im_B -= 250.;
$im_B /= 250.;
$im_B->where($im_B < 0) .= 0 ;
$im_B->where($im_B > 1) .= 1 ;
use PDL;
use PDL::NiceSlice;
use Vtools;
use strict;
use PDL::Graphics::PGPLOT::Window;
#use PDL::ImageRGB;



 
my $im_B = rfits('testB.fits');
$im_B -= 250.;
$im_B /= 250.;
$im_B->where($im_B < 0) .= 0 ;
$im_B->where($im_B > 1) .= 1 ;

my $im_R = rfits('testR.fits');
$im_R -= 180.;$im_R /= 180.;
$im_R->where($im_R < 0) .= 0 ;
$im_R->where($im_R > 1) .= 1 ;

my $im_G = rfits('testG.fits');
$im_G -= 230.;
$im_G /= 230.;
$im_G->where($im_G < 0) .= 0 ;
$im_G->where($im_G > 1) .= 1 ;

my $B = $im_B(724:1059,557:783);
my $R = $im_R(724:1059,557:783);
my $G = $im_G(724:1059,557:783);

&Vtools::view($R);
&Vtools::view($G);
&Vtools::view($B);

 
my $cube = zeroes($R->dims,3);
 
$cube(:,:, (0)).= $R;
$cube(:,:, (1)).= $B;
$cube(:,:, (2)).= $G;
 
my $win = pgwin(Dev => '/xw');
$win ->rgbi($cube);

while (!<>) {};

 
my $im_B = rfits('testB.fits');
$im_B -= 250.;
$im_B /= 250.;
$im_B->where($im_B < 0) .= 0 ;
$im_B->where($im_B > 1) .= 1 ;
use PDL;
use PDL::NiceSlice;
use Vtools;
use strict;
use PDL::Graphics::PGPLOT::Window;
#use PDL::ImageRGB;



 
my $im_B = rfits('testB.fits');
$im_B -= 250.;
$im_B /= 250.;
$im_B->where($im_B < 0) .= 0 ;
$im_B->where($im_B > 1) .= 1 ;

my $im_R = rfits('testR.fits');
$im_R -= 180.;$im_R /= 180.;
$im_R->where($im_R < 0) .= 0 ;
$im_R->where($im_R > 1) .= 1 ;

my $im_G = rfits('testG.fits');
$im_G -= 230.;
$im_G /= 230.;
$im_G->where($im_G < 0) .= 0 ;
$im_G->where($im_G > 1) .= 1 ;

my $B = $im_B(724:1059,557:783);
my $R = $im_R(724:1059,557:783);
my $G = $im_G(724:1059,557:783);

&Vtools::view($R);
&Vtools::view($G);
&Vtools::view($B);

 
my $cube = zeroes($R->dims,3);
 
$cube(:,:, (0)).= $R;
$cube(:,:, (1)).= $B;
$cube(:,:, (2)).= $G;
 
my $win = pgwin(Dev => '/xw');
$win ->rgbi($cube);

while (!<>) {};


¡Gracias!
Mensaje Sab Dic 01, 2007 11:18 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Bienvenida a los foros de Perl en Español, gazuniga.

Esto no es un programa... parece más bien que son la mezcla de 3 o 4 programas, a la vez... ¿Es posible, quizás, que te hayas liado con el copy/paste?

Voy a dejarlo en lo mínimo, quitando líneas repetidas:

Perl:
#!/usr/bin/perl

use PDL;                                # Carga las librerías. Primero la general del PDL
use PDL::NiceSlice;                     # Módulo que facilita la descripción de extractos
use Vtools;                             # Ni idea. Parece un módulo privado
use strict;                             # Modo de programación estricto a partir de aquí
use PDL::Graphics::PGPLOT::Window;      # Rutinas para presentar gráficos PGPlot
#use PDL::ImageRGB;

my $im_B = rfits('testB.fits');         # Lee el fichero testB.fits en el piddle $im_B (capa azul)
                                        # Curiosamente, no se ha cargado el módulo PDL::IO::FITS
$im_B -= 250.;                          # A toda la capa, le restamos 250.0 a cada pixel
$im_B /= 250.;                          # A toda la capa, le dividimos por 250.0 cada pixel
$im_B->where($im_B < 0) .= 0 ;          # Aquellos píxeles de la capa que ahora sean negativos, los ponemos a 0
$im_B->where($im_B > 1) .= 1 ;          # Aquellos que superen el valor 1, les ponemos a 1

my $im_R = rfits('testR.fits');         # Leemos otra capa (parte roja)
$im_R -= 180.;$im_R /= 180.;            # Igual que antes, a la capa le restamos 180.0 y la dividimos por 180.0
$im_R->where($im_R < 0) .= 0 ;          # Igual que antes, ajustamos los valores de los píxeles entre 0
$im_R->where($im_R > 1) .= 1 ;          # y 1

my $im_G = rfits('testG.fits');         # Mismo trabajo para la capa verde
$im_G -= 230.;                          # Ajustando la imagen por 230.0
$im_G /= 230.;                          # ...
$im_G->where($im_G < 0) .= 0 ;          # y reajustando los límites entre 0 y 1
$im_G->where($im_G > 1) .= 1 ;

my $B = $im_B(724:1059,557:783);        # Ahora, creamos unos piddles que serán unos extractos de las capas anteriores
my $R = $im_R(724:1059,557:783);        # pero solo del interior: desde la columna 724 a la 1059 en la primera dimensión,
my $G = $im_G(724:1059,557:783);        # y desde la 557 a la 783 en la segunda dimensión

&Vtools::view($R);                      # Ni idea de qué es lo que hace esto. Habría que saber qué es el módulo Vtools
&Vtools::view($G);
&Vtools::view($B);

my $cube = zeroes($R->dims,3);          # Creamos un cubo, lleno de ceros, de 'ancho' y 'alto' igual al de la nueva capa roja,
                                        # y con una profundidad de 3 ( ancho * alto * 3 )

$cube(:,:, (0)).= $R;                   # Guardamos la nueva capa roja en el primer nivel del cubo
$cube(:,:, (1)).= $B;                   # La nueva capa azul, en el segundo
$cube(:,:, (2)).= $G;                   # La nueva capa verde, en el tercero

my $win = pgwin(Dev => '/xw');          # Creamos una conexión con el servidor de ventanas PGPlot
$win ->rgbi($cube);                     # y presentamos el cubo como si fuera una imagen rgb (porque de hecho, lo es)

while (!<>) {};                         # Esperamos la pulsación de una tecla
Mensaje Dom Dic 02, 2007 6:33 pm
gazuniga
Perlero Nuevo
Perlero Nuevo
Registrado: 01 Dic 2007
Mensajes: 4
Responder citando

¡Muchísimas gracias !
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group