From Avisynth wiki
Jump to: navigation, search
Author tritical
Version v0.9.11
Download TBilateralv0911.zip
Category Spatial Denoisers
License GPLv2
Discussion Doom9 Thread



TBilateral is a spatial smoothing filter that uses the bilateral filtering algorithm. It does a nice job of smoothing while retaining picture structure. It currently supports YV12 and YUY2 colorspaces and has a GUI with preview to help with tweaking.


Syntax and Parameters

TBilateral (clip, int "diameterL", int "diameterC", float "sDevL", float "sDevC", float "iDevL", float "iDevC", float "csL", float "csC", bool "d2", bool "chroma", bool "gui", clip "ppClip", int "kernS", int "kernI", int "resType")

clip   =
Input clip.

int  diameterL = 5
int  diameterC = 5
Spatial diameters: this sets the size of the diameter of the filtering window.
Larger values mean more pixels will be included in the average, but are also slower. Must be an odd number greater than 1.
diameterL is for luma and diameterC is for chroma if it is being processed. This must be less than the width of the video and less than the height of the video.

float  sDevL = 1.4
float  sDevC = 1.4
Spatial (domain) deviations; these set the spatial deviations.
The larger sDev is, the less effect distance will have in the weighting of pixels in the average. That is, as you increase sDev distant pixels will have more weight. sDevL is for luma and sDevC is for chroma.
These must be greater than 0. To get a better idea of what these settings do try setting iDevL/iDevC to high values, and then gradually increase sDevL/sDevC from 0 on up while keeping iDevL/iDevC constant. Increasing these settings will increase the strength of the smoothing.

float  iDevL = 7.0
float  iDevC = 7.0
Pixel intensity (range) deviations; these set the pixel intensity deviations (or color deviations in the case of the chroma planes).
The larger iDev is, the less effect pixel difference will have in the weighting of pixels in the average. That is, as you increase iDev pixels that are very different from the current pixel will have more weight. iDevL is for luma and iDevC is for chroma.
These must be greater than 0. Try increasing these settings while keeping sDev/sDevC constant to get a better idea of what these do. Increasing these settings will increase the strength of the smoothing.

float  csL = 1.0
float  CSC = 1.0
Center pixel weight multipliers; these values are multiplied to the center pixel's spatial weight value.
A value of 1 does nothing, < 1 means the center pixel will have less weight than normal, > 1 means the center pixel will have more weight than normal, 0 gives the center pixel no weight.
These must be at least 0. Setting csL/csC to 0 will give you SUSAN denoising.

bool  d2 = false
Second derivative or first derivative. If set to true, this setting makes TBilateral use the second derivative instead of the first when doing the intensity calculations.
Using d2 should give better results on smooth gradients or anything that fits the piecewise linear model. Setting d2 to false will give better results on images that have uniformly colored areas with sharp edges (anything that fits the piecewise constant model).
The actual difference between the two is usually not big for most sources. The effect is rather subtle.

bool  chroma = true
Enable/disable chroma processing.
If set to true the chroma planes are processed. If set to false the chroma planes from the source are simply copied to the final output frame.

bool  gui = false
If set to true, then this instance of TBilateral will start with a gui. Only one instance of TBilateral per script can have a GUI.
The GUI allows you to change the values of diameterL / diameterC / sDevL / sDevC / iDevL / iDevC / csL / csC / d2 / chroma / kernS / kernI / resType (basically every setting).
The GUI also has a real time updating preview which allows you to see the effect of changes as you make them.
The GUI does have some restrictions though. The diameterL/diameterC values are currently limited to a maximum of 21 when using the GUI interface.
Also, the Dev sliders have maximum limits associated with them to allow the use of the slider bars to tweak them. However, these maximums should be plenty high to allow even very strong filtering.
After you have found the settings you want you can close the GUI by hitting the "OK" button.
At the bottom of the advanced tab there is string which you can copy and paste in your avs script to duplicate the current settings. (NOTE: the ppClip parameter is not set in this string)

clip  ppClip = NULL
Specifies a pre-filtered clip for TBilateral to take pixel values from when doing the luminance difference calculations.
The general recommendation for pre-processing is a Gaussian blur with standard deviation equal to the sDev settings being used.
Using a prefiltered clip should help in removing impulse noise (i.e. outliers with very large pixel differences) which standard bilateral filtering will not touch.
It does tend to produce artifacts sometimes, especially around very fine details. Another recommendation for pre-processing is a center-weighted median or adaptive median.

int  kernS = 2
int  kernI = 2
(domain (spatial) and range (intensity) kernels); these specify what kernel is used for the domain (kernS) weights and range (kernI) weights.
The possible choices are:
  • 0 - Andrews' wave
  • 1 - El Fallah Ford
  • 2 - Gaussian
  • 3 - Huber’s mini-max
  • 4 - Lorentzian
  • 5 - Tukey bi-weight
  • 6 - Linear descent
  • 7 - Cosine
  • 8 - Flat
  • 9 - Inverse
See the following paper for a description of all the kernels and their properties:
Gaussian (option 2) is the kernel used by the default (first proposed) bilateral filter.

int  resType = 0
This specifies how the weights and pixel values are combined to obtain the final result.
Possible options:
  • 0 - Mean (weighted average)
  • 1 - Median (weighted median)
  • 2 - CW-Median (weighted median + extra center pixel weight)
  • 3 - MLR (multiple linear regression) (best fit plane)
Option 0 (weighted average) is the type used by the default bilateral filter.


TBilateral with default settings:

TBilateral (diameterL=5, diameterC=5, sDevL=1.4, sDevC=1.4, iDevL=7.0, iDevC=7.0, \
            csL=1.0, csC=1.0, d2=false, chroma=true, gui=false, kernS=2, kernI=2, resType=0)


05/16/2006  v0.9.11
    + added resType 3, MLR (multiple linear regression)
    + some internal changes and code cleanup
    - fixed a problem with the sse2 yuy2 packed to planar and planar to packed conversions
      that could sometimes (very rarely) cause crashes with yuy2 input
    - fixed IDC_IKERND combobox being set to dropdown instead of dropdownlist

06/23/2005  v0.9.10
    + some optimizations, roughly 15-20% speed increase

06/21/2005  v0.9.9
    + Added Inverse kernel (what was called "Linear Descent" in v0.9.8 was, in fact, "Inverse")
    - Fixed a bug in the gui routine that set the sDevL/sDevC slider maximums

06/20/2005  v0.9.8
    + Added kernS, kernI, and resType
    + Redid the gui interface
    - Lots of cosmetic fixes for the gui (for some options it wouldn't immediately update on change)

    + Added ppClip parameter and processing
    - Changed some default values
    - Fixed a few thread sync/exit problems with the gui code

05/02/2005  v0.9.6
    + Added gui with preview
    + Removed all yuy2 restrictions (d2)
    - Fixed iDev settings and sDev settings being switched when calculating the weight tables (doh!)

06/16/2004  v0.9.5
    - Fixed iDevC having an i instead of f inside the function param list and only excepting integer values.

06/16/2004  v0.9.4
    - Fixed the rounding errors with d2 = true, which could have led to +-2 change in the final pixel values
    - The change needed for the rounding fix also sped up d2 = true processing 10-15%

06/15/2004  v0.9.3
    - Added d2 and centerScale/centerScaleC parameters.
    - Unrolled yloops, no real speed up, but it did make the code huge...

06/12/2004  v0.9.2
    - Unrolled xloops in YV12 and the luma only version of YUY2.  Slight speed up.

06/11/2004  v0.9.1
    - Fixed a problem with boundary pixels near the edges of the picture getting incorrect spatial weights.

06/11/2004  v0.9.0
    - Initial Release

Archived Downloads

Version Download Mirror
v0.9.11 TBilateralv0911.zip TBilateralv0911.zip

External Links

Back to External Filters

Personal tools