The GAUSS_SMOOTH function smooths using a Gaussian kernel. Also known as a Gaussian blur, it is typically used to reduce noise and detail in an image.

## Examples

`; Create test grid`

x = 200 & y = 200

`img = FLTARR(x,y)`

index = LINDGEN(LONG(x)*LONG(y))

img[WHERE(index MOD 20 LT 9)] += 125

img[WHERE(index/y MOD 10 LT 9)] += 125

`; Display image`

im1 = IMAGE(img, LAYOUT=[3,1,1], MIN_VALUE=0)

`; Smooth image and display`

img2 = GAUSS_SMOOTH(img ,2)

im2 = IMAGE(img2, /CURRENT, LAYOUT=[3,1,2], MIN_VALUE=0)

`; Smooth image using an edge keyword and display`

img3 = GAUSS_SMOOTH(IMG, 2, /EDGE_TRUNCATE)

im3 = IMAGE(img3, /CURRENT, LAYOUT=[3,1,3], MIN_VALUE=0)

## Syntax

*Result *= GAUSS_SMOOTH (*Data* [, *Sigma*] [, /EDGE_MIRROR | /EDGE_TRUNCATE | /EDGE_WRAP | /EDGE_ZERO] [, KERNEL=*value*] [, /NAN[, MISSING=*value*]] [, WIDTH=*value*])

## Return Value

Returns an array of smoothed data of the same size and type as the input data.

## Arguments

### Data

The input data. The data must be a 1- or 2-dimensional array.

### Sigma

The standard deviation value to be used in calculating the Gaussian kernel. *Sigma *can either be a scalar or a two-element vector. If *Sigma *is a scalar, the same sigma value is applied for each dimension that has length greater than 1 (dimensions of length 1 are skipped). If *Sigma *is a vector, each element of *Sigma *is used to specify the sigma value for each dimension of *Data*. Unless the WIDTH keyword is set, the width of the kernel is determined by *Sigma *such that the kernel contains approximately three standard deviations in each dimension. If *Sigma *is not supplied, a default value of 1.0 is used.

## Keywords

### EDGE_MIRROR

Set this keyword to compute the values of elements at the edge of *Data *by mirroring the subscripts of *Data *at the edge. If none of the EDGE_* keywords are set, the values of *Result *will be set to zero where the kernel extends beyond the edge.

### EDGE_TRUNCATE

Set this keyword to compute the values of elements at the edge of *Data *by repeating the subscripts of *Data *at the edge. If none of the EDGE_* keywords are set, the values of *Result *will be set to zero where the kernel extends beyond the edge.

### EDGE_WRAP

Set this keyword to compute the values of elements at the edge of *Data *by wrapping the subscripts of *Data *at the edge. If none of the EDGE_* keywords are set, the values of *Result *will be set to zero where the kernel extends beyond the edge.

### EDGE_ZERO

Set this keyword to compute the values of elements at the edge of *Data *by zeroing the subscripts of *Data *at the edge. If none of the EDGE_* keywords are set, the values of *Result *will be set to zero where the kernel extends beyond the edge.

### KERNEL

If this keyword is set to a named variable, the Gaussian kernel used will be returned. By calling CONVOL with this kernel and by using the sum of the kernel as the scaling factor, you can obtain an equivalent result to calling GAUSS_SMOOTH.

### MISSING

Set this keyword to the numeric value to return for elements that contain no valid points within the kernel. The default value is 0 for byte or integer input, and NaN for floating point input. This keyword is used only if the NAN keyword is set.

### NAN

Set this keyword to check for occurrences of the IEEE floating point values *NaN* or *Infinity *in the input data. Elements with the value *NaN* or *Infinity *are treated as missing data. Missing data are ignored when computing neighboring elements. In *Result*, missing elements are replaced by the calculation of all other valid points within the kernel. If all points within the kernel are missing, the result at that point is given by the MISSING keyword.

### WIDTH

The width of the smoothing window. This value can be used to override the value calculated from the *Sigma*. *Width *can either be a scalar or a two-element vector. If *Width *is a scalar, the same width is applied for each dimension that has length greater than 1 (dimensions of length 1 are skipped). If *Width *is a vector, each element of *Width *is used to specify the smoothing width for each dimension of *Data*. Values for *Width *must be smaller than the corresponding *Data *dimension. If a *Width *value is even, *Width*+1 will be used instead.

*Note: *A *Width *value of 0 or 1 implies no smoothing. However, if the NAN keyword is set, any NaN values within *Data *will be treated as missing data and will be replaced.

*Tip: *For a multi-dimensional array, set widths to 1 within the Width vector for dimensions that you do not want smoothed.

## Version History

8.1 |
Introduced |