EIT Software Listings

 

anal
obsolete
response
util

 

Previous Routine
Next Routine

 

Listing of $SSW/soho/eit/idl/util/eit_degrid_smooth.pro

 


function    eit_degrid_smooth, image, residue=residue, grid=grid
;+
;
; NAME:
;    eit_degrid_smooth
; PURPOSE:
;    Smoothing algorithm for degridding EIT images.  Adaptation of 
;    A. Maucherat's early routines.
; CALLING SEQUENCE:
;    clean_image = eit_degrid_smooth(dirty_image [,residue=residue, 
;                   grid=grid])
; INPUTS:
;    dirty_image = dark-subtracted image.
; OUTPUT:
;    clean_image = alog10(degridded image)
;
; OPTIONAL OUTPUTS:
;    residue     = residue of degridding algorithm 
;    grid        = Calculated grid
; 
; RESTRICTIONS:
;    Can't handle images smaller than 42x42 pixels.  
;
; TO DO:
;  * This routine doesn't conserve counts.  Maybe it never will.
;
;  * I wonder how well this code deals with small images.
;
;  * Need to keep a history of this in the FITS header.  EIT_DEGRID
;    also suffers from this.
;
; MODifICATION HISTORY:
;    15-Mar-1996 - (AM)  - Written 
;     9-Apr-1996 - (BNH) - Cleaned up to make slightly more readable, 
;                          turned into a function call,  Added some
;                          comments and streamlined some code.
;    10-Apr-1996 - (BNH) - Added support for sub_images.
;			 - Image is converted to a FLOAT on entry.
;    10-Oct-1996 - (BNH) - Corrected an entry in the median array.
;                          Thanks to RAS for noticing this.
;-

; 	/EDGE_TRUNCATE didn't exist in SMOOTH() before IDL 4.0.1. 
IF (!version.release GE '4.0.1') THEN $
    smooth_flags = {edge_truncate: 1} $
ELSE BEGIN 
    smooth_flags =  {edge_truncate: 0}
    message, /info, '/EDGE TRUNCATE turned off.'
END

sz = size(image)
xsize = sz(1) 
ysize = sz(2)

if (xsize lt 42 or ysize lt 42) then begin
    message, /info, "Image too small to degrid."
    return, 0
endif

image=alog10(float(image)>.1)

eitmoy=smooth(image,23,_EXTRA=smooth_flags)   ; Boxcar smooth
maximage = max(eitmoy) * 0.875		; Maucherat Constant

subs = where(eitmoy gt maximage)	; Find the high points
eitmoy(subs) = image(subs)		; Replace them with the 
					; unsmoothed values

eitmoy=smooth(eitmoy,13,_EXTRA=smooth_flags)	; Smooth 'em again
;************************************************************
                                        ; eitmoy is the twice-smoothed
					; original image
grid  = image-eitmoy			; diff = original - smoothed
eitp9 = fltarr(9)			; Magic Array

;
;  EXPANDED_IMG:  This is just the grid image with an expanded border
;  around each side.  Speeds up computing time (due to gymnatics that 
;  take place around the edges) significantly.
;
expanded_img = fltarr(xsize+42*2 ,ysize+42*2)
expanded_img(42:xsize+41, 42:ysize+41) = grid			   ; Center
expanded_img(0:41,42:ysize+41) = reverse(grid(0:41,*),1)	   ; Left
expanded_img(xsize+42:*,42:ysize+41)=reverse(grid(xsize-42:*,*))   ; Right
expanded_img(42:xsize+41,ysize+42:*)=reverse(grid(*,ysize-42:*),2) ; Top
expanded_img(42:xsize+41,0:41)=reverse(grid(*,0:41),2)		   ; bottom

for j = 42,ysize+41 do begin
    for i = 42,xsize+41 do begin
        eitp9(0) = expanded_img(i-42,j)
        eitp9(5) = expanded_img(i,j-42)

        eitp9(1) = expanded_img(i-21,j)
        eitp9(6) = expanded_img(i,j-21)

        eitp9(2) = expanded_img(i,j)

        eitp9(3) = expanded_img(i+21,j)
        eitp9(4) = expanded_img(i,j+21)
        
        eitp9(7) = expanded_img(i+42,j)
        eitp9(8) = expanded_img(i,j+42)

        grid(i-42,j-42) = median(eitp9)
    endfor
endfor

edija = image-grid

;
; Generate residue to see possible defects
;
eitmoy = smooth(edija,23)
residue = edija-eitmoy 

return, edija

end



Web curator: Frédéric Auchère
Responsible NASA official: Joseph B. Gurman, Facility Scientist, Solar Data Analysis Center
joseph.b.gurman@gsfc.nasa.gov
+1 301 286-4767
NASA Goddard Space Flight Center
Solar Physics Branch / Code 682

Last revised: - Wed May 9 21:45:15 2007- F. Auchère