Skip to content

contra

Functions:

contrasharpening

contrasharpening(
    flt: VideoNode,
    src: VideoNode,
    radius: int = 1,
    sharp: VideoNode | GenericVSFunction | None = None,
    mode: int | Mode = MINMAX_SQUARE3,
    planes: Planes = 0,
) -> VideoNode

contra-sharpening: sharpen the denoised clip, but don't add more to any pixel than what was previously removed. Script by Didée, at the VERY GRAINY thread.

Parameters:

  • flt

    (VideoNode) –

    Filtered clip

  • src

    (VideoNode) –

    Source clip

  • radius

    (int, default: 1 ) –

    Spatial radius for sharpening.

  • sharp

    (VideoNode | GenericVSFunction | None, default: None ) –

    Optional pre-sharpened clip or function to use.

  • mode

    (int | Mode, default: MINMAX_SQUARE3 ) –

    Mode of Repair to limit the difference

  • planes

    (Planes, default: 0 ) –

    Planes to process, defaults to None

Returns:

  • VideoNode

    Contrasharpened clip

Source code in vsrgtools/contra.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
def contrasharpening(
    flt: vs.VideoNode,
    src: vs.VideoNode,
    radius: int = 1,
    sharp: vs.VideoNode | GenericVSFunction | None = None,
    mode: int | Repair.Mode = repair.Mode.MINMAX_SQUARE3,
    planes: Planes = 0,
) -> vs.VideoNode:
    """
    contra-sharpening: sharpen the denoised clip, but don't add more to any pixel than what was previously removed.
    Script by Didée, at the [VERY GRAINY thread](http://forum.doom9.org/showthread.php?p=1076491#post1076491).

    Args:
        flt: Filtered clip
        src: Source clip
        radius: Spatial radius for sharpening.
        sharp: Optional pre-sharpened clip or function to use.
        mode: Mode of Repair to limit the difference
        planes: Planes to process, defaults to None

    Returns:
        Contrasharpened clip
    """
    check_ref_clip(src, flt, contrasharpening)

    # Damp down remaining spots of the denoised clip
    # Difference of a simple kernel blur
    if sharp:
        sharp = sharp(flt) if callable(sharp) else sharp
        diff_blur = core.std.MakeDiff(sharp, flt, planes)
    else:
        damp = min_blur(flt, radius, planes=planes)
        blurred = BlurMatrix.BINOMIAL(radius)(damp, planes=planes)
        diff_blur = core.std.MakeDiff(damp, blurred, planes)

    # Difference achieved by the filtering
    diff_flt = src.std.MakeDiff(flt, planes)

    # Limit the difference to the max of what the filtering removed locally
    limit = repair(diff_blur, diff_flt, mode, planes)

    # abs(diff) after limiting may not be bigger than before
    # Apply the limited difference (sharpening is just inverse blurring)
    expr = "y neutral - Y! z neutral - Z! Y@ abs Z@ abs < Y@ Z@ ? x +"

    return norm_expr([flt, limit, diff_blur], expr, planes, func=contrasharpening)

contrasharpening_dehalo

contrasharpening_dehalo(
    flt: VideoNode,
    src: VideoNode,
    level: float = 1.4,
    alpha: float = 2.49,
    planes: Planes = 0,
) -> VideoNode

Contrasharpening for dehalo.

Parameters:

  • flt

    (VideoNode) –

    Dehaloed clip

  • src

    (VideoNode) –

    Source clip

  • level

    (float, default: 1.4 ) –

    Strength level

Returns:

  • VideoNode

    Contrasharpened clip

Source code in vsrgtools/contra.py
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
def contrasharpening_dehalo(
    flt: vs.VideoNode, src: vs.VideoNode, level: float = 1.4, alpha: float = 2.49, planes: Planes = 0
) -> vs.VideoNode:
    """
    Contrasharpening for dehalo.

    Args:
        flt: Dehaloed clip
        src: Source clip
        level: Strength level

    Returns:
        Contrasharpened clip
    """
    check_ref_clip(src, flt, contrasharpening_dehalo)

    blur = BlurMatrix.BINOMIAL()(flt, planes)
    blur2 = median_blur(blur, 2, planes=planes)
    blur2 = repair(blur, repair(blur, blur2, repair.Mode.MINMAX_SQUARE1, planes), repair.Mode.MINMAX_SQUARE1, planes)

    return norm_expr(
        [flt, src, blur, blur2],
        "y x - D1! z a - {alpha} * {level} * D2! D1@ D2@ xor x x D1@ abs D2@ abs < D1@ D2@ ? + ?",
        planes,
        alpha=alpha,
        level=level,
        func=contrasharpening_dehalo,
    )

contrasharpening_median

contrasharpening_median(
    flt: VideoNode,
    src: VideoNode,
    mode: int | Sequence[int] | Mode | Callable[..., VideoNode] = box_blur,
    planes: Planes = 0,
) -> VideoNode

Contrasharpening median.

Parameters:

  • flt

    (VideoNode) –

    Filtered clip

  • src

    (VideoNode) –

    Source clip

  • mode

    (int | Sequence[int] | Mode | Callable[..., VideoNode], default: box_blur ) –

    Function or the RemoveGrain mode used to blur/repair the filtered clip.

  • planes

    (Planes, default: 0 ) –

    Planes to process, defaults to None

Returns:

  • VideoNode

    Contrasharpened clip

Source code in vsrgtools/contra.py
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
def contrasharpening_median(
    flt: vs.VideoNode,
    src: vs.VideoNode,
    mode: int | Sequence[int] | RemoveGrain.Mode | Callable[..., vs.VideoNode] = box_blur,
    planes: Planes = 0,
) -> vs.VideoNode:
    """
    Contrasharpening median.

    Args:
        flt: Filtered clip
        src: Source clip
        mode: Function or the RemoveGrain mode used to blur/repair the filtered clip.
        planes: Planes to process, defaults to None

    Returns:
        Contrasharpened clip
    """
    check_ref_clip(src, flt, contrasharpening_median)

    planes = normalize_planes(flt, planes)

    if isinstance(mode, (int, Sequence)):
        repaired = remove_grain(flt, mode, planes)
    elif callable(mode):
        repaired = mode(flt, planes=planes)
    else:
        raise CustomValueError("Invalid mode or function passed!", contrasharpening_median)

    return norm_expr([flt, src, repaired], "x dup + z - x y min x y max clip", planes, func=contrasharpening_median)