The MEDIAN function computes the median value. In an ordered set of values, the median is a value with an equal number of values above and below it. Median smoothing replaces each point with the median of the one- or two-dimensional neighborhood of a given width. It is similar to smoothing with a boxcar or average filter but does not blur edges larger than the neighborhood.

In addition, median filtering is effective in removing salt and pepper noise, (isolated high or low values). The scalar median is the middle value, which should not be confused with the average value (e.g., the median of the array [1,10,4] is 4, while the average is 5.)

Note: The MEDIAN function treats NaN values as missing data.

Examples


; Create a simple image and display it:
D = SIN(DIST(200)^0.8) & TVSCL, D
; Display D median-filtered with a width of 9:
TVSCL, MEDIAN(D, 9)
; Print the median of a four-element array, with and without
; the EVEN keyword:
PRINT, MEDIAN([1, 2, 3, 4], /EVEN)
PRINT, MEDIAN([1, 2, 3, 4])

IDL prints:

2.50000
3.00000

Syntax


Result = MEDIAN ( Array [, Width] [, /DOUBLE] [, DIMENSION=value] [, /EVEN] )

Return Value


Returns the median value of Array if one parameter is present, or applies a one- or two-dimensional median filter of the specified width to Array and returns the result.

Arguments


Array

The array to be processed. If Width is also supplied, and Array is of byte type, the result is of byte type. If Array is double precision or double complex, the computation is done using double precision and the result is double-precision. All other types are converted to single-precision floating-point, and the result is floating-point, unless the DOUBLE keyword is set. Array can have only one or two dimensions.

If Width is not given, Array can have any valid number of dimensions. The array is converted to single-precision floating-point, and the median value is returned as a floating-point value.

Width

The size of the one or two-dimensional neighborhood to be used for the median filter. The neighborhood has the same number of dimensions as Array.

Keywords


DOUBLE

Set this keyword to force the computation to be done using double-precision arithmetic and to return a double-precision result.

DIMENSION

Set this keyword to the dimension over which to find the median values of an array. If this keyword is not present or is zero, the median is found over the entire array and is returned as a scalar value. If this keyword is present and nonzero, the result is a “slice” of the input array that contains the median value elements, and the return value will be an array of one dimension less than the input array.

For example, if the dimensions of Array are N1, N2, N3, and DIMENSION = 2, the dimensions of the result are (N1, N3), and element (i,j) of the result contains the median value of Array[i, *, j]. This keyword is ignored if the Width argument is present.

EVEN

If the EVEN keyword is set when Array contains an even number of points (i.e. there is no middle number), MEDIAN returns the average of the two middle numbers. The returned value may not be an element of Array. If Array contains an odd number of points, MEDIAN returns the median value. The returned value will always be an element of Array—even if the EVEN keyword is set—since an odd number of points will always have a single middle value.

Version History


Original

Introduced

5.6

Added DIMENSION keyword

6.1

Added DOUBLE keyword

See Also


DIGITAL_FILTER, LEEFILT, MOMENT, SMOOTH