ordfilt3: Performs 3D order-statistic filtering on 3D volumetric data.
The memory and computational overhead for such an operation can be extremely demanding. Here - memory efficiency has been achieved with a recursive-split algorithm, allowing for far larger volumes and/or window sizes to be processed than if the order statistics were to be attempted directly. The basic operation is fairly simple - the volume is recursively split into 8 even sub-blocks, until sub-blocks are reached that are small enough for the filter to be computed with a single call (i.e. when there is enough free contiguous memory to process the entire sub-block) The intermediate results are propagated back up the call stack which then fill output matrix (V_ord)
[V_ord] = ordfilt3(V0,ord,winSize,pad_opts)
V0: Numeric 3D volume. Supports all numeric classes
ord: Speficies which order statistic to return.
This can be a string, or a number 1<=ord<=winSize^3
ord = 'min' returns the minimum window value (same as ord = 1)
ord = 'max' returns the maximum window value (same as ord = winSize^3)
ord = 'med' returns the median window value
winSize: Size of filter window. Currently, only cubic windows are permitted, whose
Length=Width=Height = winSize. This must be odd.
pad_opts: same as defined in 'padarray' (optional)
V_ord - Order Statistic
By calling [V_ord] = ordfilt3(V0,ord,3,pad_opts), this code computes the 26-neighbourhood order statistic filter, which is the same as outputted by Olivier Salvado's implementation (but which is non-splitting, and uses a fixed 3*3*3 window.)