medsmooth.pro
来自「basic median filter simulation」· PRO 代码 · 共 72 行
PRO
72 行
FUNCTION MEDSMOOTH,ARRAY,WINDOW;+; NAME:; MEDSMOOTH;; PURPOSE:; Median smoothing of a vector, including points near its ends.;; CALLING SEQUENCE:; SMOOTHED = MEDSMOOTH( VECTOR, WINDOW_WIDTH );; INPUTS:; VECTOR = The (1-d numeric) vector to be smoothed; WINDOW = Odd integer giving the full width of the window over which ; the median is determined for each point. (If WINDOW is; specified as an even number, then the effect is the same as; using WINDOW+1) ;; OUTPUT:; Function returns the smoothed vector;; PROCEDURE:; Each point is replaced by the median of the nearest WINDOW of points.; The width of the window shrinks towards the ends of the vector, so that; only the first and last points are not filtered. These points are ; replaced by forecasting from smoothed interior points.;; EXAMPLE:; Create a vector with isolated high points near its ends; IDL> a = randomn(seed,40) & a[1] = 10 & a[38] = 10; Now do median smoothing with a 7 point window ; IDL> b = medsmooth(a,7); Note that, unlike MEDIAN(), that MEDSMOOTH will remove the isolated; high points near the ends.; REVISION HISTORY:; Written, H. Freudenreich, STX, 12/89; H.Freudenreich, 8/90: took care of end-points by shrinking window.; Speed up using vector median when possible W. Landsman February 2002;- LEND = N_ELEMENTS(ARRAY)-1 IF (LEND+1) LT WINDOW THEN BEGIN message,/CON, $ 'ERROR - Size of smoothing window must be smaller than array size' RETURN,ARRAY ENDIF OFFSET = FIX(WINDOW/2) smoothed = median(array, window ); Fix the ends: NUMLOOP = (WINDOW-1)/2 - 1 IF NUMLOOP GT 0 THEN BEGIN FOR J=1,NUMLOOP DO BEGIN LEN = 2*J+1 SMOOTHED[J] = MEDIAN(ARRAY[0:LEN-1]) SMOOTHED[LEND-J] = MEDIAN(ARRAY[LEND-LEN+1:LEND]) ENDFORENDIF; Now replace the very last and first points: Y0 = 3.*ARRAY[0]-2.*ARRAY[1] ; Predicted value of point -1 SMOOTHED[0] = MEDIAN([Y0,ARRAY[0],ARRAY[1]]) Y0 = 3.*ARRAY[LEND]-2.*ARRAY[LEND-1] ; Predicted value of point LEND+1 SMOOTHED[LEND] = MEDIAN([Y0,ARRAY[LEND],ARRAY[LEND-1]]) RETURN,SMOOTHED END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?