def morpho_mask(clip: vs.VideoNode): # y, u, v = split(clip) y = get_y(clip) # stats = y.std.PlaneStats() # agm3 = core.adg.Mask(stats, 3) # agm6 = core.adg.Mask(stats, 6) ymax = maxm(y, sw=40, mode='ellipse') ymin = minm(y, sw=40, mode='ellipse') # umax = maxm(u, sw=16, mode='ellipse') # umin = minm(u, sw=16, mode='ellipse') # vmax = maxm(v, sw=12, mode='ellipse') # vmin = minm(v, sw=12, mode='ellipse') thr = 3.2 * 256 ypw0 = y.std.Prewitt() ypw = ypw0.std.Binarize(thr).rgvs.RemoveGrain(11) rad = 3 thr = 2.5 * 256 yrangesml = core.std.Expr([ymax[3], ymin[3]], 'x y - abs') yrangesml = yrangesml.std.Binarize(thr).std.BoxBlur(0, 2, 1, 2, 1) rad = 16 thr = 4 * 256 yrangebig0 = core.std.Expr([ymax[rad], ymin[rad]], 'x y - abs') yrangebig = yrangebig0.std.Binarize(thr) yrangebig = minm(yrangebig, sw=rad * 3 // 4, threshold=65536 // ((rad * 3 // 4) + 1), mode='ellipse')[-1] yrangebig = yrangebig.std.BoxBlur(0, rad // 4, 1, rad // 4, 1) rad = 30 thr = 1 * 256 ymph = core.std.Expr([ y, maxm(ymin[rad], sw=rad, mode='ellipse')[rad], minm(ymax[rad], sw=rad, mode='ellipse')[rad] ], 'x y - z x - max') ymph = ymph.std.Binarize(384) ymph = ymph.std.Minimum().std.Maximum() ymph = ymph.std.BoxBlur(0, 4, 1, 4, 1) grad_mask = zzf.combine([ymph, yrangesml, ypw]) # grain_mask = core.std.Expr([yrangebig, grad_mask, ypw0.std.Binarize(2000).std.Maximum().std.Maximum()], '65535 y - x min z -').std.BoxBlur(0,16,1,16,1) return grad_mask, yrangebig
def zzdeband(clip: vs.VideoNode, denoised: bool = False, mask: int = 0, f3kdb_args: Dict[str, Any] = {}, placebo_args: Dict[str, Any] = {}) -> Union[vs.VideoNode, Any]: """ Written by Zastin, *CAUTIOUSLY* modified by puny little me This is all pure black magic to me, so I'm just gonna pretend I didn't see anything. """ import zzfunc as zzf plcbo_args: Dict[str, Any] = dict(iterations=3, threshold=5, radius=16, grain=0) plcbo_args.update(placebo_args) dumb3kdb_args: Dict[str, Any] = dict(radius=16, threshold=[30, 0], grain=0) dumb3kdb_args.update(f3kdb_args) brz = 256 if denoised else 384 clip_depth = get_depth(clip) if clip_depth != 16: clip = depth(clip, 16) clip_y = plane(clip, 0) ymax = maxm(clip_y, sw=30, mode='ellipse') ymin = minm(clip_y, sw=30, mode='ellipse') # edge detection thr = 3.2 * 256 ypw0 = clip_y.std.Prewitt() ypw = ypw0.std.Binarize(thr).rgvs.RemoveGrain(11) if mask == 1: return ypw # range masks (neighborhood max - min) rad, thr = 3, 2.5 * 256 yrangesml = core.std.Expr([ymax[3], ymin[3]], 'x y - abs') yrangesml = yrangesml.std.Binarize(thr).std.BoxBlur(0, 2, 1, 2, 1) if mask == 2: return yrangesml rad, thr = 14, 6.5 * 256 yrangebig0 = core.std.Expr([ymax[rad], ymin[rad]], 'x y - abs') yrangebig = yrangebig0.std.Binarize(thr) yrangebig = minm(yrangebig, sw=rad * 3 // 4, threshold=65536 // ((rad * 3 // 4) + 1), mode='ellipse')[-1] yrangebig = yrangebig.std.BoxBlur(0, rad // 4, 1, rad // 4, 1) if mask == 3: return yrangebig # morphological masks (shapes) rad = 30 ymph = core.std.Expr([ clip_y, maxm(ymin[rad], sw=rad, mode='ellipse')[rad], minm(ymax[rad], sw=rad, mode='ellipse')[rad] ], 'x y - z x - max') ymph = ymph.std.Binarize(brz) ymph = ymph.std.Minimum().std.Maximum() ymph = ymph.std.BoxBlur(0, 4, 1, 4, 1) if mask == 4: return ymph grad_mask = zzf.combine([ymph, yrangesml, ypw]) if mask == 5: return grad_mask ydebn_strong = clip_y.placebo.Deband(1, **plcbo_args) ydebn_normal = vdf.deband.dumb3kdb(clip_y, **dumb3kdb_args) ydebn = ydebn_strong.std.MaskedMerge(ydebn_normal, grad_mask) ydebn = ydebn.std.MaskedMerge(clip_y, yrangebig) merged = join([ydebn, plane(clip, 1), plane(clip, 2)]) return merged if clip_depth == 16 else depth(merged, clip_depth)
def masked_deband(clip: vs.VideoNode, denoised: bool = False, deband_args: Dict[str, Any] = {}) -> vs.VideoNode: """ Written by Zastin, *CAUTIOUSLY* modified by puny little me This is all pure black magic to me, so I'm just gonna pretend I didn't see anything. """ import zzfunc as zzf placebo_args: Dict[str, Any] = dict(iterations=2, threshold=4.0, radius=12, grain=4.0) placebo_args |= deband_args brz = 256 if denoised else 384 assert clip.format is not None clip_depth = clip.format.bits_per_sample if clip_depth != 16: clip = depth(clip, 16) clip_y = plane(clip, 0) stats = clip_y.std.PlaneStats() agm3 = core.adg.Mask(stats, 3) ymax = maxm(clip_y, sw=30, mode='ellipse') ymin = minm(clip_y, sw=30, mode='ellipse') # edge detection thr = 3.2 * 256 ypw0 = clip_y.std.Prewitt() ypw = ypw0.std.Binarize(thr).rgvs.RemoveGrain(11) # range masks (neighborhood max - min) rad, thr = 3, 2.5 * 256 yrangesml = core.std.Expr([ymax[3], ymin[3]], 'x y - abs') yrangesml = yrangesml.std.Binarize(thr).std.BoxBlur(0, 2, 1, 2, 1) rad, thr = 16, 4 * 256 yrangebig0 = core.std.Expr([ymax[rad], ymin[rad]], 'x y - abs') yrangebig = yrangebig0.std.Binarize(thr) yrangebig = minm(yrangebig, sw=rad * 3 // 4, threshold=65536 // ((rad * 3 // 4) + 1), mode='ellipse')[-1] yrangebig = yrangebig.std.BoxBlur(0, rad // 4, 1, rad // 4, 1) # morphological masks (shapes) rad, thr = 30, 1 * 256 ymph = core.std.Expr([ clip_y, maxm(ymin[rad], sw=rad, mode='ellipse')[rad], minm(ymax[rad], sw=rad, mode='ellipse')[rad] ], 'x y - z x - max') ymph = ymph.std.Binarize(brz) ymph = ymph.std.Minimum().std.Maximum() ymph = ymph.std.BoxBlur(0, 4, 1, 4, 1) grad_mask = zzf.combine([ymph, yrangesml, ypw]) grain_mask = core.std.Expr([ yrangebig, grad_mask, ypw0.std.Binarize(2000).std.Maximum().std.Maximum() ], expr='65535 y - x min z -').std.BoxBlur( 0, 16, 1, 16, 1) ydebn_strong = clip_y.placebo.Deband(1, **placebo_args) ydebn_normal = clip_y.f3kdb.Deband(16, 41, 0, 0, 0, 0, output_depth=16) ydebn = ydebn_strong.std.MaskedMerge(ydebn_normal, grad_mask) ydebn = ydebn.std.MaskedMerge(clip_y, yrangebig) strong_grain = ydebn_strong.grain.Add(0.25, constant=True, seed=69420) normal_grain = ydebn.std.MaskedMerge( ydebn.grain.Add(0.1, constant=True, seed=69420), agm3) y_final = normal_grain.std.MaskedMerge(strong_grain, grain_mask) merged = join([y_final, plane(clip, 1), plane(clip, 2)]) return merged if clip_depth == 16 \ else depth(merged, clip_depth)