PRO GR95,log ; ;procedure para corregir una serie de imagenes tomadas en La Palma, de ;la rotacion y shift de la imagen producidos por el movimiento diurno (ver ;apuntes adjuntos), y de posibles shifts por defectos de tracking. La ;correcion de rotacion se hace segun estimacion teorica que hace la ;procedure LPANGLES. ; ; Input: array LOG (produced by READLOG1.PRO) containing the time information. ; ;ATENCION: cuando una serie de imagenes es muy larga (mas de 135 imagenes), ;se corregira por subseries de unas 135 imagenes teniendo buen cuidado ;al fijar los indices nprim,nnn,nsub,ninit,nfin. La rotacion en cualquier ;caso se corrige respecto de la imagen central de la serie completa. Mientras ;que el shift se corrige respecto de la primera imagen de la serie completa. ;La 2a,3a,4a,... subseries tendran como primera imagen la ultima de la ;subserie anterior (original=sin corregir), y el numero de esta imagen ;(nfin de la subserie anterior) sera el nuevo ninit. ; ;Las entradas se dan mediante editor: year, month, day, numero de la ;primera imagen de la serie completa, numero total de imagenes de la serie ;completa, numero de orden de la sub-serie que se procesa (=1 para la ;primera), numero de la imagen inicial de la subserie que se procesa, ;numero de la imagen final de la subserie que se procesa, intervalo de ;muestreo temporal, time de comienzo de la serie entera, dimension de ;las imagenes, delimitacion de la caja para correlar y paths para lectura ;y deposito de imagenes. ; ; ;Este programa mejora al rota_despla. ; ;Editado el 5 de Enero de 1994. Introducida la correccion opcional de trend ;en la caja de correlacion el 22 de Febrero de 1994. ;definicion de parametros de entrada -------------------------------------- ;SERIES 25 OF 30 JUN 95 frame 378 - 409 camera A ;Date and series/subseries selection year = 95 month = 6 ;June day = 30 nprim=378 ;no. de la primera imagen de la serie completa. nnn=32 ;no. total de imagenes de la serie completa. nsub=1 ;no. de orden de la subserie que se procesa. ninit=378 ;numero de la imagen inicial de la subserie. nfin=409 ;numero de la imagen final de la subserie. ;Size and rotation parameters n=1310 ;dimension x m=1032 ;dimension y xo=208 ;definition of the center of rotation yo=642 refima=393-378 ;reference image for rotation ;Stabilization parameters ;delimitacion de la caja para correlar con ALIGN_CROSS. Dimensiones ;de la caja = mejor potencias de 2 itrend=0 ;correccion opcional de trend en caja de correlacion= 0 , 1 n1=50 ;coordenada x menor de la caja (left) n2=337 ;coordenada x mayor de la caja (right) m1=540 ;coordenada y menor de la caja (bottom) m2=827 ;coordenada y mayor de la caja (top) nn=224 ;dimension x de la subcaja a desplazar en la correlacion mm=224 ;dimension y de la subcaja a desplazar en la correlacion ;Definicion de los paths st1a=string('/scratch/sob/lap95/ima/a_im30Jun95.') ;prefijo imagenes entrada st1b=string('/scratch/sob/lap95/ima/a_rs30Jun95.') ;prefijo imagenes salida ;--------------------------------------------------------------------------- ;calculo de los angulos teoricos para des-rotar las imagenes time=reform(log(1,nprim-1:nprim+nnn-2))*3600. angles = LPANGLES(year,month,day,time) * !radeg ;Esta rutina da el ;angulo en radianes con el signo adecuado para des-rotar la ;imagen de La Palma respecto de la primera de la serie, es ;decir, el angulo opuesto al de rotacion de la imagen ;producida por el movimiento diurno. El convenio de signos ;es: clockwise = + , y counterclockwise = -. ;Para mas detalles ver mi descripcion de lpangles en mi ;archivo. ; "angles" are in degrees. a0=angles(refima) ;prepara arrays para depositar los angulos (a) y shifts acumulativos (x,y), ;asi como las matrices imagen. x = fltarr(nnn) y = fltarr(nnn) a = fltarr(nnn) iimage = intarr(n,m,/nozero) ;procesa la primera imagen de la subserie dcn=strtrim(ninit,2) print,'Leyendo la primera imagen:' print,st1a+dcn openr,unit,st1a+dcn,/get_lun readu,unit,iimage free_lun,unit image=float(iimage) if (nsub eq 1) then begin ;caso para la primera subserie x(0)=0.;define = 0 el desplazamiento de la primera imagen y(0)=0.;de la serie completa. a(0)=-a0 image = ROT(image,a(0),1.,xo,yo,/cubic,/pivot, $ missing=mean(image)) ;deposita la primera imagen de la serie completa. print,' Escribiendo la primera imagen de la serie completa' print,st1b+dcn openw,unit,st1b+dcn,/get_lun writeu,unit,nint(image) free_lun,unit endif else begin ;caso para la 2a, 3a, ... subseries RESTORE,'gr_data' ii=ninit-nprim image = ROT(image,a(ii),1.,xo,yo,/cubic,/pivot, $ missing=mean(image)) ; a(ii) es conocido del proce- ;sado de la subserie anterior. endelse ima=image(n1:n2,m1:m2) if itrend eq 1 then ima=ima-sfit(ima,2);corrige de trend ref=ima ;ciclo de lectura de imagenes sucesivas, correccion por rotacion y shift ;y deposito de la imagen resultante FOR i = ninit+1,nfin DO BEGIN ; if i eq 317 then begin ; ii=i-nprim ; x(ii)=x(ii-1) ; y(ii)=y(ii-1) ; print,'image',i,' skipped' ; goto,skip ; endif dcn=strtrim(i,1) print,'Leyendo nueva imagen:' print,st1a+dcn openr,unit,st1a+dcn,/get_lun readu,unit,iimage free_lun,unit image=float(iimage) ii=i-nprim ;corrige de rotacion a(ii)=angles(ii)-a0 image = ROT(image,a(ii),1.,xo,yo,/cubic,/pivot, $ missing=mean(image)) ima=image(n1:n2,m1:m2) if itrend eq 1 then ima=ima-sfit(ima,2);corrige de trend dxy = ALIGN_CROSS(ref,ima,nn,mm) ;proced.lib.OSLO. Uti- ;liza correlacion por Fourier. Da como resultado ;el desplazamiento que hay que darle a 'image' ;para que se superponga a 'ref'. ref=ima ;referencia para shift entre imagenes consecutivas. x(ii) = x(ii-1)+dxy(0) ;shift acumulativo en x y(ii) = y(ii-1)+dxy(1) ;shift acumulativo en y ;corrige de shift acumulativo image = SHIFT(image,nint(x(ii)),nint(y(ii)));rutina IDL. Solo ;trabaja con shifts = numero entero de pixels (o sea ;que no interpola). Convenio de signos: ;desplaz.dcha = +, desplaz.izq. = -. ;deposita el resultado print,' Escribiendo la imagen resultante' print,st1b+dcn openw,unit,st1b+dcn,/get_lun writeu,unit,nint(image) free_lun,unit skip: ENDFOR SAVE,x,y,a,filename='gr_dataa' END