This is an adaptive Median Filter for eliminating certain types of noise. It uses local statistics (minimum, maximum and median values) of a moving local grid, and changes grid size depending on local statistics.
Rules implemented for processing.
starting value of grid is 3 i.e. 3x3 pixels.
Compute max, min and median of the grid
1. if median is more than minimum and less than maximium:-
if the grid center value is greater than minimum and less than maximum,the value is not changed
Otherwise center value of grid is replaced by median.
if grid size is less than maxgrid, it is increased to next step and process repeated.
Otherwise center value is unchanged.
As per theory
Quote "Ordinary median filters perform well as long as the spatial density of impulsive noise is small.
This Median filter can suppress impulsive noise with larger probablity. An additional benefit is
this seeks to preserve detail while smoothing nonimpulse noise something that the traditional median
filter does not do.
The algorithm described has three purposes.
1.To remove salt and pepper (impulse) noise.
2.To smooth other noise which may not be impulsive
3.To reduce distortion such as excessive thinning or thickening of object boundaries.
" unquote
This function works in All color formats and bit depths supported by avisynth+ . It is thread safe MT_NICE_FILTER
In
RGB color spaces, all 3 color values are processed. In case of YUY2 or Planar
filtering of Luma Y, or chroma U or chroma V is optional.
Description | Name | Type | Limits | Default |
Input clip | clip | none | ||
Maximum size to which grid can be increased | maxgrid | integer | 3 to 11 | 5 |
Whether Y plane is to be processed (not for RGB formats) | yy | bool | true, false | true |
Whether u plane is to be processed (not for RGB formats) | uu | bool | true, false | false |
Whether v plane is to be processed (not for RGB formats) | vv | bool | true, false | false |
Median() a = converttoYUY2() Median(a, maxgrid=7, yy = false, uu = true, vv = true) # following script produced the images below converttoRGB32() adm1 = Median(yy = true, uu = true, vv = true, maxgrid = 7) last + adm1 + subtract(last, adm1 ).Levels(125,1,135,0,255)
To my index page | down loadmanyPlus plugin | To Avisynth