From Avisynth wiki
Jump to: navigation, search
Author Didée
Version 3_MT2
Category Dehalo
Discussion Doom9 Thread



This script removes the light & dark halos from too strong "Edge Enhancement".


  • AviSynth 2.5.8 or later
  • Supported color formats: YV12

Required Plugins

Latest versions of the following filters are recommended unless stated otherwise.

Syntax and Parameters

BlindDeHalo3 (clip clp, float "rx", float "ry", int "strength", float "lodamp", float "hidamp", float "sharpness", float "tweaker", int "PPmode", int "PPlimit", bool "interlaced")

clip  clp =
Input clip.

float  rx = 3.0
float  ry = 3.0
The radii to use for the [quasi-] Gaussian blur, on which the halo removal is based.

int  strength = 125
The overall strength of the halo removal effect.

float  lodamp = 0.0
float  hidamp = 0.0
With these two values, one can reduce the basic effect on areas that would change only little anyway (lodamp), and/or on areas that would change very much (hidamp).
lodamp does a reasonable job in keeping more detail in affected areas. hidamp is intended to keep rather small areas that are very bright or very dark from getting processed too strong.
Works OK on sources that contain only weak haloing - for sources with strong over sharpening, it should not be used, mostly. (Usage has zero impact on speed.)
  • Range: 0.0 to ??? (try 4.0 as a start)

float  sharpness = 0.0
By setting this bigger than 0.0, the affected areas will come out with better sharpness. However, strength must be chosen somewhat bigger as well, then, to get the same effect than without.
(This is the same as initial version's "maskblur" option.)
  • Range: 0.0 to 1.58

float  tweaker = 0.0
May be used to get a stronger effect, separately from altering "strength". (Also in accordance to initial version's working methodology. I had no better idea for naming this parameter.)
  • Range: 0.0 - 1.00

bool  interlaced = false
As formerly, this is intended for sources that were originally interlaced, but then made progressive by deinterlacing. It aims in particular at clips that made their way through Restore24.

int  PPmode = 0
When set to "1" or "2", a second cleaning operation after the basic halo removal is done. This deals with:
a) Removing/reducing those corona lines that sometimes are left over by BlindDeHalo
b) Improving on mosquito noise, if some is present.
PPmode=1 uses a simple Gaussian blur for post-cleaning. PPmode=2 uses a 3*3 average, with zero weighting of the center pixel.
Also, PPmode can be "-1" or "-2". In this case, the main dehaloing step is completely discarded, and *only* the PP cleaning is done.
This has less effect on halos, but can deal for sources containing more mosquito noise than halos.

int  PPlimit = 0
Can be used to make the PP routine change no pixel by more than [PPlimit].
I'm not sure if this makes much sense in this context. However the option is there - you never know what it might be good for.

Comments & Tips

Additional information for optimal usage. Written by Didée

  • Regarding "strength" & "sharpness" & "tweaker"
These three behave somewhat similar, but not the same.
A bigger value for "sharpness" is similar to reducing "strength". A bigger value for "tweaker" is similar to increasing "strength" value -- and vice versa for both.
Also the other way round: when increasing "sharpness", you probably have to increase "strength" a little as well, to get the same removal effect.
Usage of "sharpness" works in particular good when bigger radii (say, >2.5) are used for dehaloing. Usage of "tweaker" is more useful when working with sources containing thin, weak halos.
In the end, it comes down again to trial & error.
  • Lodamp and Hidamp
Technically, these two are the "n" constants in two scaling factors of the form "x/(x+n)", which are used when creating a LUT from the difference between input clip and its Gaussian blurred version.
As described above, "lodamp" deals for better protection of areas where this difference is already small. Effectively, it preserves some more of weak detail in areas of high contrast. A value of 4.0 seems a good starting point. One can also try to use bigger values like 16.0 or so, along with a bigger "strength" value. By this, one can somewhat change the characteristics of "what-is-processed-how-strongly".
"hidamp" tries to do the opposite: protect small detail that is very bright or very dark from being toned down too much. But its usability is much more restricted: it seems to work OK when the actual halos of the source are rather weak, and/or when not too small radii are used - in this case, the protection of very prominent detail works out, mostly. In case the source contains strong haloing, it's better to not use "hidamp" at all: in this case, the halos itself would be considered to be "prominent detail" and be protected ... no go.


Full function call with default values:

BlindDeHalo3( rx=3.0, ry=3.0, strength=125, 
\            lodamp=0.0, hidamp=0.0, sharpness=0.0, tweaker=0.0,
\            PPmode=0, PPlimit=0, interlaced=false)


Version      Date            Changes
3MT2 2006/03/22 - BlindDeHalo3_MT2 - Changed syntax to use MaskTools2 - Replaced some things with RemoveGrain-modes (RemoveGrain.dll newer than v0.9 required) - Fixed some oddities - New PPmode (3 and -3): shouldn't blur, but still remove mosquitos and leftover halo borders
3 2005/03/09 - BlindDeHalo3 - Added parameters - "sharpness" parameter (and "tweak" counterpart) - "lodamp" (and "hidamp" (!) ) parameter - The "PP" modes, which act somewhat similar to HQDering ... ... where "PP" < 0 runs *only* these routines, without the main dehaloing one
2 2004/12/10 - BlindDeHalo2 - Added interlaced parameter - Changed rx, ry, and strength default - Removed parameters
v0.1 2004/04/07 - BlindDeHalo - Initial release

External Links

Back to External Filters

Personal tools