k-nearest mean filter

This tool performs a k-nearest mean filter on a raster image. A mean filter can be used to emphasize the longer-range variability in an image, effectively acting to smooth the image. This can be useful for reducing the noise in an image. The algorithm operates by calculating the average of a specified number (k) values in a moving window centred on each grid cell. The k values used in the average are those cells in the window with the nearest intensity values to that of the centre cell. As such, this is a type of edge-preserving smoothing filter. The bilateral filter is an example of another more sophisticated edge-preserving smoothing filter.

Neighbourhood size, or filter size, is determined by the user-defined x and y dimensions. These dimensions should be odd, positive integer values, e.g. 3, 5, 7, 9... The user may also define the neighbourhood shape as either squared or rounded. A rounded neighbourhood approximates an ellipse; a rounded neighbourhood with equal x and y dimensions approximates a circle.

NoData values in the input image are ignored during filtering. When the neighbourhood around a grid cell extends beyond the edge of the grid, NoData values are assigned to these sites. The output raster is of the float data type and continuous data scale.

See Also:

Scripting:

The following is an example of a Python script that uses this tool:

wd = pluginHost.getWorkingDirectory()
inputFile = wd + "input.dep"
outputFile = wd + "output.dep"
xDim = "3"
yDim = "3"
rounded = "false"
kValue = "5"
reflectEdges = "true"
args = [inputFile, outputFile, xDim, yDim, rounded, kValue, reflectEdges]
pluginHost.runPlugin("FilterRange", args, False)

This is a Groovy script also using the tool:

def wd = pluginHost.getWorkingDirectory()
def inputFile = wd + "input.dep"
def outputFile = wd + "output.dep"
def xDim = "7"
def yDim = "7"
def rounded = "true"
def kValue = "5"
def reflectEdges = "true"
String[] args = [inputFile, outputFile, xDim, yDim, rounded, kValue, reflectEdges]
pluginHost.runPlugin("FilterRange", args, false)

Credits: