⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sky.pro

📁 basic median filter simulation
💻 PRO
字号:
pro sky,image,skymode,skysig, SILENT=silent, CIRCLERAD = circlerad, $      _EXTRA = _EXTRA, NAN = nan, MEANBACK = meanback;+; NAME:;       SKY; PURPOSE:;       Determine the sky level in an image ; EXPLANATION:;       Approximately 10000 uniformly spaced pixels are selected for the;       computation.  Adapted from the DAOPHOT routine of the same name.;;       The sky is computed either by using the procedure mmm.pro (defualt) ;       or by sigma clipping (if /MEANBACK is set) ;; CALLING SEQUENCE:;       SKY, image, [ skymode, skysig ,/SILENT, /MEANBACK, /NAN, CIRCLERAD= ];     ;         Keywords available  when MEANBACK is not set (passed to mmm.pro): ;                   HIGHBAD=, /INTEGER,  READNOISE=;         Keywords available when /MEANBACK is set: ;                   CLIPSIG=, /DOUBLE, CONVERGE_NUM=, MAXITER= ; INPUTS:;       IMAGE - One or two dimensional array;; OPTIONAL OUTPUT ARRAYS:;       SKYMODE - Scalar, giving the mode of the sky pixel values of the ;               array IMAGE, as determined by the procedure MMM.;       SKYSIG -  Scalar, giving standard deviation of sky brightness;; INPUT KEYWORD PARAMETERS:;	CIRCLERAD - Use this keyword to have SKY only select pixels within;		specified pixel radius of the center of the image.  If ;		CIRCLERAD =1, then the radius is set equal to half the image;		width.   Can only be used with square images.;       /MEANBACK - if set, then the background is computed using the 3 sigma ;             clipped mean (using meanclip.pro) rather than using the mode ;             computed with mmm.pro.    This keyword is useful for the Poisson ;             count regime or where contamination is known  to be minimal.;       /NAN - This keyword must be set to  ignore NaN values when computing ;              the sky.;       /SILENT - If this keyword is supplied and non-zero, then SKY will not;               display the sky value and sigma at the terminal;;      The _EXTRA facility can is used to pass optional keywords to the programs;             that actually perform the sky computation: either mmm.pro ;             (default) or meanclip.pro (if /MEANBACK) is set.    The following;             keywords are available with the mmm.pro (default) setting ;       HIGHBAD - scalar value of the (lowest) "bad" pixel level (e.g. cosmic ;                rays or saturated pixels) If not supplied, then there is ;                assumed to be no high bad pixels.;       READNOISE - Scalar giving the read noise (or minimum noise for any ;                pixel).     Normally, MMM determines the (robust) median by ;                averaging the central 20% of the sky values.     In some cases;                where the noise is low, and pixel values are quantized a;                larger fraction may be needed.    By supplying the optional;                read noise parameter, MMM is better able to adjust the;                fraction of pixels used to determine the median. ;       /INTEGER - Set this keyword if the  input SKY image only contains;                discrete integer values.    This keyword is only needed if the;                SKY image is of type float or double precision, but contains ;                only discrete integer values.     ;;     If the /MEANBACK keyword is set then the following keywords are available;;       CLIPSIG:  Number of sigma at which to clip.  Default=3;	MAXITER:  Ceiling on number of clipping iterations.  Default=5;       CONVERGE_NUM:  If the proportion of rejected pixels is less;           than this fraction, the iterations stop.  Default=0.02, i.e.,;           iteration stops if fewer than 2% of pixels excluded.;       /DOUBLE - if set then perform all computations in double precision.;                 Otherwise double precision is used only if the input;                 data is double;; PROCEDURE:;       A grid of points, not exceeding 10000 in number, is extracted;       from the image array.  The mode of these pixel values is determined;       by the procedure mmm.pro or meanclip.pro.   In a 2-d array the grid is ;       staggered in each row to avoid emphasizing possible bad columns;; PROCEDURE CALLS:;       MEANCLIP, MMM, DIST_CIRCLE; REVISION HISTORY:;       Written, W. Landsman   STX Co.            September, 1987     ;       Changed INDGEN to LINDGEN                 January, 1994;       Fixed display of # of points used         March, 1994;       Stagger beginning pixel in each row, added NSKY, READNOISE, HIGHBAD;          W. Landsman        June 2004;      Adjustments for unbiased sampling  W. Landsman June 2004;      Added /NAN keyword, put back CIRCLERAD keyword W. Landsman July 2004;      Added MEANBACK keyword, _EXTRA kewyord ,preserve data type in ;             calculations       W. Landsman November 2005;      Fix problem for very large images by requiring at least 2 pixels to;       be sampled per row.    March 2007    W. Landsman;      Avoid possible out of bounds if /NAN set   W. Landsman   Jan 2008;-  On_error,2              ;Return to caller  compile_opt idl2 if N_params() eq 0 then begin        print,'Syntax - sky, image, [ skymode, skysig , HIGHBAD= '        print, '                    READNOISE = , /NAN, CIRCLERAD = , /SILENT ]'        return endif checkbad = (N_elements(highbad) GT 0) or keyword_set(circlerad) or $              keyword_set(nan)                           s = size(image)       nrow = s[1] if s[0] EQ 1 then ncol = 1 else begin                          if s[0] NE 2 then message, $          'ERROR - Input array (first parameter) must be 1 or 2 dimensional'    ncol = s[2] endelse if keyword_set(circlerad) then if ncol ne nrow then message, $       'ERROR - The CIRCLERAD keyword only applies to a 2-d square array'         if checkbad then begin           mask = replicate(1b, nrow, ncol)          if N_elements(highbad) GT 0 then mask = mask and (image LT highbad)          if keyword_set(nan) then mask = mask and finite(image)          if keyword_set(circlerad) then begin                  if circlerad EQ 1 then rad = nrow/2 else rad = long(circlerad)                  dist_circle,drad, nrow                  mask = mask and (temporary(drad) LT rad)           endif          if !VERSION.RELEASE GE '6.1' then npts = total(mask,/integer)  $	                         else npts = long(total(mask)) endif else  npts = N_elements(image) ;  Use 10000 data points or  at least 2 points per row maxsky = 2*npts/(nrow-1) > 10000          ;Maximum # of pixels to be used in sky calculation; Maintain the same data type as the input image Nov 2005    istep = npts/maxsky +1 skyvec = make_array(maxsky+100,type=size(image,/type))     nstep = (nrow/istep)     jj = 0    index0 = istep*lindgen(nstep)     if nstep GT 1 then begin           i0 = (nrow-1 - max(index0)  - istep)/2 > 0  ;Adjust margin for symmetry          index0  = index0 + i0    endif; The beginning index in each row is staggered to avoid emphasizing possible; bad columns    for i=0, Ncol-1 do begin        index  = index0 + (i mod istep)          row = image[*,i]        if checkbad then begin                     g = where(mask[*,i],ng)            case ng of             0: goto, Done            Nrow:             else: row = row[g]            endcase          endif else ng = nrow   	      imax = value_locate( index, ng-1) > 0	       ix = index[0:imax] < (ng-1)	       skyvec[jj] = row[ix]          jj = jj + imax + 1 DONE:  endfor      skyvec = skyvec[0:jj-1]    if keyword_set(meanback) then begin    meanclip, skyvec, skymode, skysig,sub=sub, _EXTRA = _extra   nsky = N_elements(sub) endif else $  MMM, skyvec, skymode, skysig, _EXTRA = _extra, nsky = nsky skymode = float(skymode)  &  skysig = float(skysig) if not keyword_set(SILENT) then begin        print,'Number of points used to find sky = ',nsky        print,'Approximate sky value for this frame = ',skymode        print,'Standard deviation of sky brightness = ',skysig endif return end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -