• Publicidad

PDL con imágenes FITS

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

PDL con imágenes FITS

Notapor gazuniga » 2007-12-01 11:19 @513

¡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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
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 (!<>) {};
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


¡Gracias!
gazuniga
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2007-12-01 10:49 @492

Publicidad

Notapor explorer » 2007-12-01 12:18 @554

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor gazuniga » 2007-12-02 19:33 @856

¡Muchísimas gracias !
gazuniga
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2007-12-01 10:49 @492


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron