Percentile filter

This tool performs a percentile filter on a raster image. Percentile filters assigns each cell in the output grid the percentile (0% - 100%) that the grid cell value is at within the cumulative distribution of values in a moving window centred on each grid cell. This can be useful, for example, to determine the local relief in the neighbourhood around each cell in a digital elevation model (DEM). Because it requires sorting the values in the window, a computationally intensive task, the percentile filter is considerably less efficient than other smoothing filters. This may pose a problem for large images or large neighbourhoods.

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, etc.) 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"
reflectEdges = "true"
args = [inputFile, outputFile, xDim, yDim, rounded, reflectEdges]
pluginHost.runPlugin("FilterPercentile", 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 reflectEdges = "true"
String[] args = [inputFile, outputFile, xDim, yDim, rounded, reflectEdges]
pluginHost.runPlugin("FilterPercentile", args, false)

Credits: