View difference between Paste ID: 6ebNVjXV and 8khk24YW
SHOW: | | - or go back to the newest paste.
1-
# 2017.03.26 1st release
1+
2
# 2017.11.23 added Z4ST1N optimise suggestion
3
4
function DeHalo_alpha_mt(clip input, float "rx", float "ry", float "darkstr", float "brightstr", float "lowsens", float "highsens", float "ss", bool "cs", int "search_rade", int "search_radi")
5
{
6
sre       = default( search_rade,   1 )
7
sri       = default( search_radi, sre )
8
input
9
DeHalo_alpha_2BD(rx, ry, darkstr, brightstr, lowsens, highsens, ss, cs, sre, sri)
10
}
11
12
function DeHalo_alpha(clip input, float "rx", float "ry", float "darkstr", float "brightstr", float "lowsens", float "highsens", float "ss", bool "cs", int "search_rade", int "search_radi")
13
{
14
input
15
DeHalo_alpha_mt(rx, ry, darkstr, brightstr, lowsens, highsens, ss, cs, search_rade, search_radi)
16
}
17
18
function m4_dham(float x) {
19
nx=VersionNumber() < 2.6 ? x<16?16:int(round(x/4.0)*4) : round(x)
20
return(nx)
21
}
22
23
# modified dehalo_alpha: here with increased search-radius for validation
24
25
function DeHalo_alpha_2BD(clip input, float "rx", float "ry", float "darkstr", float "brightstr", float "lowsens", float "highsens", float "ss", bool "cs", int "search_rade", int "search_radi")
26
{
27
rx        = default( rx,        2.0 )
28
ry        = default( ry,        2.0 )
29
darkstr   = default( darkstr,   1.0 )
30
brightstr = default( brightstr, 1.0 )
31
lowsens   = default( lowsens,    50 )
32
highsens  = default( highsens,   50 )
33
ss        = default( ss,        1.5 )
34
cs        = default( cs,      false )
35
sre       = default( search_rade,  max(m4_dham(max(rx,ry)),3) )
36
sri       = default( search_radi, sre )
37
38
ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
39
40
sislumaonly = ssispmt ? input.isy() : VersionNumber() < 2.6 ? true : input.isy8()
41
42
clp = sislumaonly ? input : ssispmt ? input.converttoy() : input.converttoy8()
43
44
LOS = string(lowsens)
45
HIS = string(highsens/100.0)
46
DRK = string(darkstr)
47
BRT = string(brightstr)
48
ox  = clp.width()
49
oy  = clp.height()
50
51
halos  = clp.bicubicresize(m4_dham(ox/rx),m4_dham(oy/ry)).bicubicresize(ox,oy,1,0)
52-
are    = mt_lutxy(clp  .srdha2e(sre,1),clp  .srdha2i(sri,1),"x y -",U=1,V=1)
52+
are    = sre==1 && sri==1 ? clp .mt_edge(mode="min/max", thY1=0, thY2=255)  : mt_lutxy(clp  .srdha2e(sre,1),clp  .srdha2i(sri,1),"x y -",U=1,V=1)
53-
ugly   = mt_lutxy(halos.srdha2e(sre,1),halos.srdha2i(sri,1),"x y -",U=1,V=1)
53+
ugly   = sre==1 && sri==1 ? halos.mt_edge(mode="min/max", thY1=0, thY2=255) : mt_lutxy(halos.srdha2e(sre,1),halos.srdha2i(sri,1),"x y -",U=1,V=1)
54
so     = VersionNumber() < 2.6 ? mt_lutxy( ugly, are, "y x - y 0.001 + / 255 * "+LOS+" - y 256 + 512 / "+HIS+" + *" )
55
         \                     : mt_lutxy( ugly, are, "clamp_f_i8 y x - y 0.001 + / range_max * "+LOS+" scalef - y range_size + 512 scalef / "+HIS+" + *" )
56
lets   = mt_merge(halos,clp,so,U=1,V=1)
57
remove = (ss==1.0) ? clp.repair(lets,1,0) 
58
          \        : clp.lanczosresize(m4_dham(ox*ss),m4_dham(oy*ss))
59
          \             .mt_logic(lets.mt_expand(U=1,V=1).bicubicresize(m4_dham(ox*ss),m4_dham(oy*ss)),"min",U=2,V=2)
60
          \             .mt_logic(lets.mt_inpand(U=1,V=1).bicubicresize(m4_dham(ox*ss),m4_dham(oy*ss)),"max",U=2,V=2)
61
          \             .lanczosresize(ox,oy)
62
them   = VersionNumber() < 2.6 ? mt_lutxy(clp,remove,"x y < x x y - "+DRK+" * - x x y - "+BRT+" * - ?",U=2,V=2)
63
         \                     : mt_lutxy(clp,remove,"clamp_f_i8 x y < x x y - "+DRK+" * - x x y - "+BRT+" * - ?",U=2,V=2)
64
65
bb   = cs ? them.removegrain(11) : nop()
66
xD   = cs ? mt_makediff(bb,bb.repair(bb.repair(bb.medianblur(2,-333,-333),1),1)) : nop()
67
xD   = cs ? VersionNumber() < 2.6 ? xD.mt_lut("x 128 - 2.49 * 128 +") : xD.mt_lut("clamp_f_i8 x range_half - 2.49 * range_half +") : xD
68
xDD  = cs ? VersionNumber() < 2.6 ? mt_lutxy(xD,mt_makediff(clp,them),"x 128 - y 128 - * 0 < 128 x 128 - abs y 128 - abs < x y ? ?")
69
            \                     : mt_lutxy(xD,mt_makediff(clp,them),"x range_half - y range_half - * 0 < range_half x range_half - abs y range_half - abs < x y ? ?") : nop()
70
them = cs ? them.mt_adddiff(xDD,U=2,V=2) : them
71
72
them   = sislumaonly ? them : ssispmt ? CombinePlanes(them,input,planes="YUV",sample_clip=input) : ytouv(input.utoy8(),input.vtoy8(),them)
73
74
return( them )
75
}
76
77
Function srdha2e(clip i, int dr_rad, int count)
78
{
79
return count > dr_rad ? i : srdha2e(i.mt_expand(), dr_rad, count+1)
80
}
81
82
Function srdha2i(clip i, int dr_rad, int count)
83
{
84
return count > dr_rad ? i : srdha2i(i.mt_inpand(), dr_rad, count+1)
85
}