Skip to content

mask

Functions:

deband_detail_mask

deband_detail_mask(
    clip: VideoNode,
    sigma: float = 1.0,
    rxsigma: list[int] = [50, 200, 350],
    pf_sigma: float | None = 1.0,
    brz: tuple[float, float] = (0.038, 0.068),
    rg_mode: RemoveGrainModeT = MINMAX_MEDIAN_OPP,
) -> VideoNode
Source code
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def deband_detail_mask(
    clip: vs.VideoNode, sigma: float = 1.0, rxsigma: list[int] = [50, 200, 350],
    pf_sigma: float | None = 1.0, brz: tuple[float, float] = (0.038, 0.068),
    rg_mode: RemoveGrainModeT = RemoveGrainMode.MINMAX_MEDIAN_OPP
) -> vs.VideoNode:
    clip_y = get_y(clip)

    ret = retinex(
        clip_y if pf_sigma is None else gauss_blur(clip_y, pf_sigma), rxsigma, upper_thr=0.005
    )

    brz0, brz1 = brz

    blur_ret = gauss_blur(ret, sigma)
    blur_ret_diff = Morpho.deflate(ExprOp.SUB(blur_ret, ret))

    blur_ret_brz = Morpho.inflate(blur_ret_diff, 4)
    blur_ret_brz = Morpho.closing(Morpho.binarize(blur_ret_brz, brz0), 3)

    prewitt_mask = Morpho.inflate(Morpho.deflate(Prewitt.edgemask(clip_y, brz1, brz1)))
    prewitt_brz = Morpho.closing(Morpho.binarize(prewitt_mask, brz1), 2)

    merged = ExprOp.ADD(blur_ret_brz, prewitt_brz)

    return remove_grain(merged, rg_mode)