ExtendedBilateral
From Avisynth wiki
| Abstract | |
|---|---|
| Author | insanedesio |
| Version | v0.5.0.3 |
| Download | extendedbilateral_5F25_dll_20050622.zip |
| Category | Spatial-Temporal Denoisers |
| License | GPLv2 |
| Discussion | Doom9 Thread |
Contents |
Description
ExtendedBilateral extends the regular bilateral filtering process by adding an "initial estimation preprocess." It is similar in operation to TBilateral and offers many of the same options (though not all) while adding the preprocess.
It can also be used in conjunction with TBilateral if so need be. The filter is based on formulae given in Non-Iterative, Robust Monte Carlo Noise Reduction and The Bilateral Median Filter.
Requirements
- [x86]: AviSynth+ or AviSynth 2.5.8 or greater
- Supported color formats: YUY2, YV12
Syntax and Parameters
FUNCTION TEMPLATE
-----------------
ExtendedBilateral(bool sup, int preprocess, int estimator, int final, int kernelD, int kernelR,
int diameterL, int diameterC, float sigmaDL, float sigmaDC, float sigmaRL,
float sigmaRC, float cwL, float cwC, bool chroma)
PARAMETER DESCRIPTIONS
----------------------
bool sup If set to "true," chroma values are simply copied when upsampling from YUYV data to
YUV data. This doesn't really give much of a speed advantage, but if you know you
want that kind of upsampling then you at least have the option. If set to "false,"
the "correct" 1-1 kernel is used in upsampling, as described on the sampling page at
avisynth.org. Basically you'd only change this parameter if you knew you wanted the
simple chroma-copy upsampling.
Default value: false
int preprocess This controls the presence of the preprocess. Options:
0 preprocess only (useful if using with TBilateral via its ppClip parameter)
1 main process only (straight bilateral filter)
2 preprocess and main process together
Note that if using the preprocess in conjunction with TBilateral, all parameters that
have corresponding equivalents in TBilateral should be set to the same values in both
filters; values a little closer to the defaults for ExtendedBilateral will be better,
as the preprocess adds extra smoothing on its own.
Restrictions: must be between zero and two inclusive.
Default value: 2
int estimator This controls the "initial estimation preprocess." Options:
0 mean
1 median
2 centre-weighted median with centre weight equal to diameterL/diameterC
3 kernel-based
Restrictions: must be between zero and three inclusive.
Default value: 3
int final In the final step of the bilateral filter, a weighted average is performed. This controls
what the final step is. Options:
0 Weighted average
1 Weighted-window median (the regular weights are applied and then a median of the
window is performed).
2 Weighted-window with centre weight median (same as weighted-window median except
the centre pixel is given a weight equal to diameterL/diameterC)
Restrictions: must be between zero and two inclusive.
Default value: 0
bool chroma This enables filtering on the chroma values. If set to "false," only the luma values
are processed and the chroma values are simply copied over.
Default value: true
int kernelD These control the domain and range kernels used. These are mostly from the second paper
kernelR mentioned in the "General Information" section. That paper has more information on the
on the kernels and also suggested radii (diameter - 1 all divided by two) given a sigmaD
value, which I have added here using corresponding diameters. These should serve as
approximate relationship indicators. I pretty much took what that paper had verbatim and
put it here, except for the ones for which I could figure out a more detailed process to
determine a good diameter (adapted from the first paper). I also changed it from sigmaR to
sigmaD since sigmaD is a spatial deviation and sigmaR probably really wouldn't have too of
an effect on a good diameter value, which is a spatial value. (!) indicates a diameter
value that is probably too high to be practical and thus a (much) lower value should be
used. Options:
0 Andrew's Wave
Given a sigmaD value, just round up (if fractional), double, and add one.
So for the default of 0.4, round up to get 1, double to get 2, then add one
to get 3. For higher values of sigmaD, use a diameter smaller than the one
calculated by the said method.
1 Cosine
Given a sigmaD value, just round up (if fractional), double, and add one.
So for the default of 0.4, round up to get 1, double to get 2, then add one
to get 3. For higher values of sigmaD, use a diameter smaller than the one
calculated by the said method.
2 El-Fallah Ford
For sigmaD = 10, use diameter 41 (!).
3 Flat
Given a sigmaD value, just round up (if fractional), double, and add one.
So for the default of 0.4, round up to get 1, double to get 2, then add one
to get 3. For higher values of sigmaD, use a diameter smaller than the one
calculated by the said method.
4 Gaussian
This is the kernel used in a regular bilateral filter. Given a sigmaD
value, just triple, round up, double, and then finally add one to get a
good diameter. So for the default 0.4, triple to get 1.2, round up to get
2, double to get 4, then add one to get the default diameter of 5. Note
that this works best for smaller values of sigmaD (less than about 1.33).
For higher values of sigmaD, use a diameter smaller than the one calculated
by the said method by 2 or 4, or more even for higher values of sigmaD
(though really sigmaD values shouldn't be that high).
5 Huber's Mini-Max
For sigmaD = 1, use diameter 41 (!).
6 Lorentzian
For sigmaD = sqrt(2), use diameter 35 (!).
7 Tukey's Bi-Weight
Given a sigmaD value, just round up (if fractional), double, and add one.
So for the default of 0.4, round up to get 1, double to get 2, then add one
to get 3. For higher values of sigmaD, use a diameter smaller than the one
calculated by the said method.
Restrictions: must be betwen zero and seven inclusive.
Default value: kernelD: 4
kernelR: 4
int diameterL These define the window around the current pixel that is used to determine the new
diameterC pixel value. This implies that the larger the value, the slower the filter.
"diameterL" is for luma and "diameterC" is for chroma. These are the same as the
"diameterL" and "diameterC" parameters in TBilateral.
Restrictions: must be an odd number greater than one.
Recommendation: Diameter according to suggestions and relationships for whatever kernel is used,
if any. Try also to set both diameterL and diameterC to the same value; using
different values results in adding an extra set of loops per pixel.
Default value: diameterL: 5
diameterC: 5
float sigmaDL These are the domain (spatial) deviations. As this is increased, spatially distant
sigmaDC pixels gain weight (i.e. they contribute more to the current pixel). This means
more smoothing. "sigmaDL" is for luma and "sigmaDC" is for chroma. These are the
same as the "sDevL" and "sDevC" parameters in TBilateral.
Restrictions: must be greater than zero.
Default value: 0.4
float sigmaRL These are the range (intensity) deviations. As this is increased, pixels differing
sigmaRC in intensity gain weight (i.e. they contribute more to the current pixel). This
means more smoothing. "sigmaRL" is for luma and "sigmaRC" is for chroma. These are
the same as the "iDevL" and "iDevC" parameters in TBilateral.
Restrictions: must be greater than zero.
Default value: 2.0
float cwL These are the centre pixel's weights. Before adding the pixel's weighted value to the
cwC weighted sum, it is multiplied by these values. These are used whenever the domain and
range kernels are used, so they are used in the preprocess when estimator = 3 and they
are always used in the main process. "cwL" is for luma and "cwC" is for chroma. These
are the same as the "csL" and "csC" parameters in TBilateral.
Restrictions: must be greater than or equal zero.
Default value: 1.0
Changelog
0.5.0.3 -Fixed a small bug in the upsampling routine that slowed the filter down quite a bit. (22/06/05) In my tests with the preprocessor alone, speed went from 5 fps to 6 fps which is about a 20% speed increase (only one sig. dig. so actual increase could've been more than 1 fps - upto 1.9 fps I guess which in that specific case would be a 42% increase). Thanks to tritical for pointing it out. 0.5.0.2 -Added a LUT for the range kernels, giving a significant speed increase in the main (18/06/05) bilateral process (about eight times faster in my tests), thanks to tritical's suggestion. Of course, that isn't saying much since it was slow as a bitch before. -First public release. 0.5.0.1 +Added multiple range/domain kernels via the "kernelD" and "kernelR" parameters. (17/06/05) +Added the "final" parameter to allow choosing between a weighted average and two median variations as the final step in the bilateral filtering process. -Changed a couple of things of internally (might result in a 0.01% speedup :p). 0.3.1.2 -First version that works without errors and gives seemingly correct output. (15/06/05) TO-DO LIST ---------- 1) Get rid of the upsampling (also tritical's suggestion). 2) Speed ups where possible. 3) Bug fixes as needed.
Archived Downloads
| Version | Download | Mirror |
|---|---|---|
| v0.5.0.3 | extendedbilateral_5F25_dll_20050622.zip | extendedbilateral_5F25_dll_20050622.zip |
External Links
Back to External Filters ←