edit · print · PDF

Please note that all the SIEpedia's articles address specific issues or questions raised by IAC users, so they do not attempt to be rigorous or exhaustive, and may or may not be useful or applicable in different or more general contexts.

IDL



Película a partir de una lista de imágenes

Queremos crear una película (formato .mpeg) a partit de una lista de imágenes (.fits). EL programa creará una película con todas la imágenes .fits dadas en IMLIST

pro pelicula,imlist

Img =read_ascii(imlist,template=ascii_template(imlist))
Img = Img.field1+'.fit'
n = n_elements (Img)

READ, NumImg, PROMPT = 'HAY '+STRCOMPRESS (n,/R)+' IMAGENES. NUMERO IMAGENES: '
READ, Paso, PROMPT = 'PASO: '
a = readfits(Img[NumImg/2],h,/NO_U)
Dim = SIZE (a)
DimX = Dim[1]
DimY = Dim[2]
PRINT, STRCOMPRESS (DimX,/R),' x '+STRCOMPRESS (DimY,/R)
READ, PROMPT = 'REBIN Dim/f; f: ',f
READ, PROMPT = 'ESCALAR CADA IMAGEN (1) O NO (0): ',bEscalar

IF bEscalar EQ 0 THEN M = MEDIAN (a)

; Initialize XINTERANIMATE:
nn = 0
FOR i = 0,NumImg,Paso DO nn = nn+1
XINTERANIMATE, SET=[DimX/f, DimY/f, nn], /SHOWLOAD

; Load the images into XINTERANIMATE:

j = 0
FOR i=0,NumImg,Paso DO begin
PRINT, '... LEYENDO IMAGEN '+STRCOMPRESS (i+1,/R)+' '+Img[i]+' ...'
a=readfits(Img[i],h,/NO_U)
a=rebin(a,DimX/f, DimY/f)
IF bEscalar THEN M = MEDIAN (a)
a=bytscl(a,min = M*0.9, max = M*1.1)
XINTERANIMATE, FRAME = j, IMAGE = a
j = j+1
endfor

; Play the animation:
XINTERANIMATE, /KEEP_PIXMAPS


return
end

Héctor Vázquez


Obtener un .gif sin perdida de resolución

1. idl
2. pstogif
3. Poner lo que se pide.

Pasar de .ps/.eps a .gif

A continuación detallaremos un programa que nos permitirá pasar de formato .ps a formato .gif

FUNCTION NumStr, Numero
IF Numero EQ 0 THEN BEGIN
SNumero = '0'
ENDIF ELSE BEGIN
Log10 = ROUND (ALOG10 (Numero))+ $
(ALOG10 (Numero) GE ROUND (ALOG10 (Numero)))
IF Log10 GT 1 THEN BEGIN
SLog10 = NumStr (Log10)
SNumero = STRING (Numero,'(i'+SLog10+')')
ENDIF ELSE BEGIN
SLog10 = STRING (Log10,'(i1)')
SNumero = STRING (Numero,'(i'+SLog10+')')
ENDELSE; <Log10>
ENDELSE; <Numero>
RETURN, SNumero
END; <NumStr>

PRO PStoGIF

RutaGIF = ''
READ, RutaGIF, PROMPT = 'RUTA ARCHIVO PS (p.e. ''/home/benito/latex/''): '

bOtra = 1
WHILE bOtra DO BEGIN
SPAWN, 'ls '+RutaGIF+'*.*ps'
NomArchivo = ''
READ, NomArchivo, PROMPT = 'NOMBRE DEL ARCHIVO PS o EPS (p.e. ''Grafica.ps''): '
IF STRUPCASE (STRMID (NomArchivo,STRLEN (NomArchivo)-3,3)) EQ 'EPS' THEN BEGIN
SPAWN, 'cp '+ RutaGIF+NomArchivo+' '+ $
RutaGIF+STRMID (NomArchivo,0,STRLEN (NomArchivo)-4)+'.ps'
NomArchivoPS = STRMID (NomArchivo,0,STRLEN (NomArchivo)-4)+'.ps'
ENDIF ELSE BEGIN
NomArchivoPS = NomArchivo
ENDELSE; <EPS o PS>

READ, YSize, PROMPT = 'INTRODUCE ALTURA EN PIXELES (p.e. 300): '
IF YSize EQ 0 THEN sYSize = '' ELSE sYSize = '-ysize '+NumStr (YSize)

sNom = STRMID (NomArchivoPS,0,STRLEN (NomArchivoPS)-3)
PRINT, '... TRANSFORMANDO A .gif ....'
spre = 'pstopnm '+RutaGIF+NomArchivoPS+' -port '+sYSize
SPAWN, spre
spre = 'ppmtogif ./'+sNom+'001.ppm > '+RutaGIF+sNom+'.gif'
SPAWN, spre
SPAWN, 'rm ./'+sNom+'001.ppm'
IF STRUPCASE (NomArchivo) NE STRUPCASE (NomArchivoPS) THEN SPAWN, 'rm '+RutaGIF+NomArchivoPS
PRINT, '... TERMINADO ....'
sMas= ''
READ, sMas, PROMPT = 'QUIERES CONVERTIR MAS (s/n)? '
sMas = STRUPCASE (sMas)
IF sMas EQ 'N' THEN bOtra = 0
ENDWHILE; <bOtra>

END; <PStoGIF>

Héctor Vázquez


Ventanas en IDL

Tareas sencillas para visualizar ventanas en IDL

1. Para crear una ventana haces WINDOW, N donde N es un numero del 0 al N, que indica la ventana. Una vez creadas, para situarte en una ventana es WSET, N y lo que pongas a partir de entonces se hace en la ventana N-esima.

2. Uno de los parametros de WINDOWS es XSIZE y otro es YSIZE para el tamanyo de la ventana pero en PIXELS. Asi que lo unico que puedes hacer es encontrar la correspondencia en pixels del tamanyo DIN A-4.


Algo útil

Encontrar archivos, leerlos y en definitva "hacer lo que uno quiera".

ListaNomArchivos = FINDFILE ('/home/vmelo/.../Datos/perf_c*', COUNT =
NumArchivos)
PRINT, ListaNomArchivos
FOR i = 0,NumArchivos-1 DO BEGIN
LeeArchivo ListaNomArchivos[i]
HazLoQueQuierasCon ..[i]
END

"ListaNomArchivos" es una matriz que contiene todos los nombres que cumplen el filtro "'/home/vmelo/.../Datos/perf_c*'".


Copiar una cabecera

Para cogerla de una imagen haces:

b=readfits(imagen, h) h=cabecera que el toma de la imagen

para ponerla en una imagen:

writefits, 'nombre', array, h

y te copia la cabecera que has tomado, tb puedes crearla y asignarle la variable h.

Ismael Delgado


Paleta de colores

VERSION 1.03 (27-FEB-98)

Repite la tabla de colores definida con R,G,B de tal modo que el último color sea siempre blanco. Para definir una nueva tabla hay que añadir valores a R,G y B.

Por alguna razón, el máximo número de colores que permite definir IDL no es 256, parece depender de alguna inicialización. Por ello, se hace necesario averiguar previamente ese máximo.

PRO PALETA,pa=pa

x1=255
x2=255
x3=255
tvlct,x1,x2,x3
tvlct,x1,x2,x3,/get
;
maxcol= n_elements(x1)
white= 255B
;
red= bytarr(maxcol)
green= bytarr(maxcol)
blue= bytarr(maxcol)
;
R=[0,255,234,0,0,255,0,255,255,0,175,126,187,156,168,108,251,167,34,186]
R=[R,100,100,200,50,200,0]

G=[0,255,0,140,216,235,235,0,148,126,0,138,0,0,0,156,195,115,56,165]
G=[G,200,170,100,210,0,0]

B=[0,255,0,234,0,0,228,200,0,0,201,0,185,255,241,0,0,255,141,218]
B=[B,200,100,100,120,100,0]

ix=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,21,23,16,17,19,20,22,24,18,25]

R=R(ix)
G=G(ix)
B=B(ix)
;
ncol= n_elements(r)
nrep= (maxcol-1)/ncol
nrep= fix(nrep)
for i= 0, nrep do begin
k1= i*ncol
k2= min([(i+1)*ncol-1,maxcol])
k3= k2-k1-1
red(k1:k2-1)= byte(R(0:k3))
green(k1:k2-1)= byte(G(0:k3))
blue(k1:k2-1)= byte(B(0:k3))
endfor
red(maxcol-1)= white
green(maxcol-1)= white
blue(maxcol-1)= white
;
;TVLCT, R, G, B
TVLCT, red, green, blue


print,''
print,'Cargada la paleta de '+strmid(string(ncol),2)+' colores'
print,''
!x.style=1
!y.style=1
if(keyword_set(pa)) then begin
window,15,xsize=450,ysize=400
plot,[0.,100.],[1,1],yrange=[0,ncol+1],background=0,color=1
for k=2,ncol-1 do begin
oplot,[0.,100.],[k,k],color=k,thick=2
endfor
wset,0
window,0,xsize=1100,ysize=600
endif
seq=[18,3,13,17,11,19,15,16,8,2]
print,'Secuencia de colores/Teff ',seq
print,''


END

Escala de colores

Tenemos un mapa en color y queremos que al lado de la imagen aparezca la escala de colores utilizada: El comando es "put_color_scale· este programa esta en

/usr/pkg/rsi/idl_local/lib/varios/wue_lib/put_color_scale.pro

Hay que decirle el rango utilizado en la imagen (RANGE), el paso al que quieres que te lo divida (INC), origen de la esquina inferior izquierda (x0,y0), se le puede decir el tamaño en Y, y el tamaño de las letras.

range=[420.,850.]
inc=25.
put_color_scale,x0,y0,range,inc,ysize=450

Verónica Melo


Cabeceras

Pasar la cabecera: con fits_header, el problema es que hay que pasarle los numero, en principio vale con ponerle el nombre que les da en la cabecera, pero a mi me fallo con el angulo de rotacion y como solo era una copie los valores,

my_header=fits_header(NAXIS1,NAXIS2,CRPIX1,CRPIX2,CRVAL1,CRVAL2,CROTA2,CDELT1,CDELT2,equinox=my_equinox,cd=cd)
my_header=fits_header(58,36,29.5000,18.5000,190.52472,32.539469,71.429900,0.000833333,-0.000833333)
writefits,'ngc4631_cam.fits',im,my_header

Verónica Melo

Section: Users' Tips

edit · print · PDF
Page last modified on December 12, 2006, at 10:27 AM