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

📄 sigrange.pro

📁 basic median filter simulation
💻 PRO
字号:
	FUNCTION SIGRANGE,ARRAY,FRACTION=FRACTION,MISSING=MISSING,RANGE=RANGE;+; NAME: ;	SIGRANGE(); PURPOSE: ;	Selects the most significant data range in an image.; EXPLANATION: ;	Selects out the most significant range in the data to be used in ;	displaying images.  The histogram of ARRAY is used to select the most;	significant range.      Useful for scaling an image display.; CALLING SEQUENCE: ;	OUTPUT = SIGRANGE( ARRAY ); INPUTS: ;	ARRAY	 = Array to take most significant range of.; OPTIONAL INPUTS: ;	None.; OUTPUTS: ;	The function returns an array where values above and below the;	selected range are set equal to the maximum and minimum of the;	range respectively.; OPTIONAL INPUT KEYWORDS: ;	FRACTION = Fraction of data to consider most significant.;		   Defaults to 0.99;	MISSING	 = Value used to flag missing points.  Data points with this;		   value are not considered or changed.; OPTIONAL OUTPUT KEYWORD;	RANGE    = 2 element vector, giving the range (minimum and maxmimum) ;		used;; NOTES:;       If the image array contains more than 10,000 points then SIGRANGE() ;       uses random indexing of a subset of the points to determine the range;       (for speed).    Thus identical calls to SIGRANGE() might not yield;       identical results (although they should be very close).     ; RESTRICTIONS: ;	ARRAY must have more than two points.  Fraction must be greater than 0 ;	and less than 1.;;	SIGRANGE was originally part of the SERTS image display package.   ;	Other routines from this package are available at ;;	http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/image/;;	Note that this version of SIGRANGE does not include the non-standard ;	system variables used in the SERTS package.; REVISION HISTORY: ;	Version 1, William Thompson, GSFC, 12 May 1993.;		Incorporated into CDS library.;	Version 2, William Thompson, GSFC, 25 May 1993.;		Changed call to HISTOGRAM to be compatible with OpenVMS/ALPHA;       Version 3, CDP, RAL, Add RANGE keyword.  16-Apr-96;	Version 4, William Thompson, GSFC, 17 April 1996;		Corrected some problems when range is too high.;	Version 5, 13-Jan-1998, William Thompson, GSFC;		Use random numbers to improve statistics when only using a;		fraction of the array.;	Version 6, 06-Mar-1998, William Thompson, GSFC;		Change default to 0.99;-;	IF N_ELEMENTS(FRACTION) NE 1 THEN FRACTION = 0.99	IF N_ELEMENTS(ARRAY) LE 2 THEN BEGIN	    MESSAGE, /CONTINUE, 'Not enough points to form histogram'	    RETURN, ARRAY	END ELSE IF (FRACTION LE 0) OR (FRACTION GE 1) THEN BEGIN	    MESSAGE, /CONTINUE, 'Fraction must be GT 0 and LT 1'	    RETURN, ARRAY	ENDIF;;  To speed up the process, work on a reduced version of ARRAY.;	IF N_ELEMENTS(ARRAY) LT 10000 THEN ATEMP0 = ARRAY ELSE BEGIN	    NN = 1000 > (N_ELEMENTS(ARRAY) / 25) < 100000	    ATEMP0 = ARRAY[N_ELEMENTS(ARRAY)*RANDOMU(SEED,NN)]	ENDELSE;;  Get the total range of the data, excluding any missing points.;        IF N_ELEMENTS(MISSING) EQ 1 THEN BEGIN                W = WHERE(ATEMP0 NE MISSING, COUNT)                IF COUNT GT 0 THEN ATEMP0 = ATEMP0(W)	ENDIF 	N_TOTAL = N_ELEMENTS(ATEMP0)	AMAX = 1.*MAX(ATEMP0)	AMIN = 1.*MIN(ATEMP0)	IF AMIN EQ AMAX THEN GOTO, EXIT_POINT;;  Set up some initial parameters for the reiteration.;	ATEMP = ATEMP0	DELTA = 0;;  Form the histogram, and calculate an array expressing the fraction of points;  that fall within or below the given bin.;FIND_RANGE:	LAST_DELTA = DELTA	X = AMIN  +  FINDGEN(1001) * (AMAX - AMIN) / 1000.	H = HISTOGRAM(LONG((ATEMP-AMIN)*1000./(AMAX - AMIN)))	FOR I = 1,N_ELEMENTS(H)-1 DO H[I] = H[I] + H[I-1]	H = H / FLOAT(N_TOTAL);;  Estimate the endpoints corresponding to the specified range, and calculate;  the values at these endpoints.  Limit the array to be within these values.;	IMIN = (MIN( WHERE( H GT ((1. - FRACTION) / 2.) )) - 1) > 0	IMAX =  MIN( WHERE( H GT ((1. + FRACTION) / 2.) ))	IF IMAX LT 0 THEN IMAX = 1000	AMIN = X[IMIN]	AMAX = X[IMAX];;  If the calculated range is zero, then use 2% of the full range of the data.;	IF AMAX EQ AMIN THEN BEGIN		BMAX = MAX(ATEMP0, MIN=BMIN)		AMAX = MAX(ATEMP0(WHERE(ATEMP0 LE (AMAX + 0.01*(BMAX-BMIN)))))		AMIN = MIN(ATEMP0(WHERE(ATEMP0 GE (AMIN - 0.01*(BMAX-BMIN)))))	ENDIF;;  If the range calculated has changed by more than 5% from the last iteration,;  the reiterate.;	ATEMP = AMIN > ATEMP0 < AMAX	DELTA = AMAX - AMIN	RATIO = (DELTA - LAST_DELTA) / (DELTA + LAST_DELTA)	IF ABS(RATIO) GT 0.05 THEN GOTO, FIND_RANGE;;  If a missing pixel flag value was passed, then reset those points to the;  flag value.  Return the adjusted array.;EXIT_POINT:	ATEMP = AMIN > ARRAY < AMAX	IF N_ELEMENTS(MISSING) EQ 1 THEN BEGIN		WW = WHERE(ARRAY EQ MISSING,N_MISSING)		IF N_MISSING GT 0 THEN ATEMP[WW] = MISSING	ENDIF        RANGE = [AMIN,AMAX]	RETURN, ATEMP	END

⌨️ 快捷键说明

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