Re: EXPAND.PRO - needed by CONTTW.PRO [message #503 is a reply to message #502] |
Fri, 11 September 1992 10:56   |
landsman
Messages: 93 Registered: August 1991
|
Member |
|
|
The EXPAND function given by Joe Zawadony will run faster and with less
virtual memory problems if it uses the intrinsic INTERPOLATE function
(introduced in V2.2.1). I include below a modified version (but without
the keywords) that seems to give the same results. The keywords to account
for missing data can be implemented in a straightforward way but I have
not done so in this demo version.
-Wayne Landsman landsman@stars.gsfc.nasa.gov
pro EXPAND,a,nx,ny,result
;+
; NAME:
; EXPAND
; PURPOSE:
; Array magnification (CONGRIDI like except that this really works!)
; CATEGORY:
; Z4 - IMAGE PROCESSING
; CALLING SEQUENCE:
; EXPAND,A,NX,NY,RESULT
; INPUTS:
; A Array to be magnified
; NX Desired size of X Dimension
; NY Desired size of Y Dimension
; OUTPUTS:
; RESULT Magnified Floating point image of A array (NX by NY)
; RESTRICTIONS:
; A must be two Dimensional
; PROCEDURE:
; Bilinear interpolation.
; Not really fast if you have to swap memory (eg. NX*NY is a big number).
; OK Postscript users don't forget that postscript pixels are scaleable!
; MODIFICATION HISTORY:
; Aug 15, 1989 J. M. Zawodny, NASA/LaRC, MS 475, Hampton VA, 23665.
; Aug 26, 1992 JMZ, Added maxval and fillval keywords.
; Demo version to show use of intrinsic INTERPOLATE function
; W. Landsman Hughes/STX
; Please send suggestions and bugreports to zawodny@arbd0.larc.nasa.gov
;-
s=size(a)
if(s(0) ne 2) then begin
print,'EXPAND: *** array must be 2-Dimensional ***'
retall ; This will completely terminate the MAIN program!!!
endif
; Get dimensions of the input array
ix = s(1)
iy = s(2)
; Calculate the new grid in terms of the old grid
ux = (ix-1.) * findgen(nx) / (nx-1.)
uy = (iy-1.) * findgen(ny) / (ny-1.)
dtype = s( s(0) + 2)
if dtype LE 3 then $
result = interpolate( float(a), ux, uy, /GRID) $
else result = interpolate( a, ux, uy, /GRID)
return
end
|
|
|