Advertisement
Guest User

DeHaloHmod

a guest
Nov 12th, 2016
1,084
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # DeHaloHmod 11 11 2016
  2.  
  3. function GreyCenteredToMask_dhh(clip input) {
  4. input.Levels(128, 1, 255, 0, 255, false)
  5. one = last
  6. input.Levels(0, 1, 128, 255, 0, false)
  7. two = last
  8. Overlay(one, two, mode="lighten")
  9. }
  10.  
  11.  
  12. function FastLineDarkenMOD3_dhh( clip c, int "strength", int "prot", int "luma_cap", int "threshold", int "thinning")
  13. {
  14. ## parameters ##
  15. str        = string(default(strength, 48) /128.)
  16. lum        = string(default(luma_cap, 191))
  17. protection = default(prot,5)
  18. thr        = string(default(threshold, 4))
  19. thinning   = default(thinning,0)
  20. thn        = string(thinning /16.)
  21.  
  22. ## filtering ##
  23. exin    = c.mt_expand(thy=255/(protection+1)).mt_inpand()
  24. diff    = mt_lutxy(c,exin,yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? 127 +",uexpr="x",vexpr="x")
  25. linemask= mt_lut(diff.mt_inpand(),"x 127 - "+thn+" * 255 +").mt_convolution("1 1 1","1 1 1",y=3,u=0,v=0)#".RemoveGrain(20,-1)" gives a little speed boost.
  26. thick   = mt_lutxy(c, exin, yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? "+str+" * x +",uexpr="x",vexpr="x",u=2, v=2)
  27. thin    = mt_lutxy(c.mt_expand(U=2,V=2),diff,yexpr="x y 127 - "+str+" 1 + * +",u=2, v=2)
  28.  
  29. return (thinning == 0) ? thick : mt_merge(thin,thick,linemask,y=3,u=2,v=2)
  30. }
  31.  
  32.  
  33. function Camembert_dhh(clip input) {
  34.  
  35. input
  36. SmoothUV(3,200,false)
  37. Overlay(last, Blur(1).Blur(1), mode="difference")
  38. GreyCenteredToMask_dhh().greyscale()
  39. Levels(0, 1, 115, 0, 255, false)
  40. mask1 = last
  41. Blur(1)
  42. Levels(0, 0.4, 64, 0, 255, false)
  43. mask = last
  44. Blur(1).Blur(1)
  45. Levels(0, 1, 30, 0, 255, false).Blur(1)
  46. mask2 = last
  47. return (mask2)
  48. }
  49.  
  50. function Camembert_dhhMod(clip input)
  51. {
  52.  EM1=input.Camembert_dhh()
  53.  EM2=input.mt_edge(mode="min/max", thY1=1, thY2=255, thC1=10, thC2=10, chroma="process").mt_inflate().blur(1.5).blur(1.5).invert()
  54.  return mt_logic(EM1, EM2, "and")
  55. }
  56.  
  57. Function EMask_dhh(clip i, int "mode", int "trh", bool "analog", float "trh2")
  58. {
  59. analog     = Default(analog, false)
  60. trh2       = Default(trh2, 170)
  61. e_mask = mode == 1 ? mt_makediff(i.blur(1.58).blur(1.58),i).mt_binarize(threshold=trh).mt_inflate().mt_inflate() :
  62.      \   mode == 2 ? mt_logic(i.mt_binarize(105,upper=true).mt_expand(),i.mt_binarize(110,upper=false).mt_expand(),"and").mt_deflate() :
  63.      \   mode == 3 ? analog ? mt_merge(i.mt_edge(mode="min/max", thY1=255, thY2=255), i.Camembert_dhh, i.FastLineDarkenMOD3_dhh(trh).blur(0.5).FastLineDarkenMOD3_dhh(250,1,250,-2).mt_lut("x "+String(trh2/2.46)+" < 255 x "+String(trh2)+" > 0 255 x "+String(trh2/2.46)+" - 255 "+String(trh2)+" "+String(trh2/2.46)+" - / * - ? ?",u=1,v=1)) :
  64.                             \ mt_merge(i.mt_edge(mode="min/max", thY1=255, thY2=255), i.Camembert_dhh, i.FastLineDarkenMOD3_dhh(trh).blur(0.5).FastLineDarkenMOD3_dhh(250,1,250,-2).mt_binarize(70, mode="0 255")) : NOP()
  65. return e_mask
  66. }
  67.  
  68. Function DR_Radius_dhh(clip i, int dr_rad, int count)
  69. {
  70. return count > dr_rad ? i : DR_Radius_dhh(i.mt_expand(), dr_rad, count+1)
  71. }
  72.  
  73. Function DeHaloHmod(clip input, int "Radius", int "Str", bool "Maska", bool "strong", int "mode", int "thr", string "exdehalo", bool "analog", bool "dirty", bool "smooth", bool "anime", bool "pel2", bool "usedeen", bool "maskpel2", float "thr2", val "extmask")
  74. {
  75.  usedeen    = Default(usedeen, false)
  76.  pel2       = Default(pel2, false)
  77.  maskpel2   = Default(maskpel2, false)
  78.  smooth     = Default(smooth, false)
  79.  strong     = Default(strong, true)
  80.  Maska      = Default(Maska, false)
  81.  analog     = Default(analog, false)
  82.  dirty      = Default(dirty, false)
  83.  DR_Radius  = Default(Radius, dirty ? 6 : smooth || maskpel2 ? 4 : 2)
  84.  DR_Str     = Default(Str, usedeen ? pel2 ? 40 : 15 : pel2 ? 7 : smooth ? 5 : 3)
  85.  mode       = Default(mode, usedeen ? 0 : 3)
  86.  threshold  = Default(thr, smooth ? mode==1 ? 1 : 2250 : 140)
  87.  anime      = Default(anime, mode != 3 ? false : true)
  88.  thr2       = Default(thr2, smooth ? 170 : threshold/1.5)
  89.  
  90.  oclip = pel2 ? input.nnedi3_rpow2(rfactor=2) : input
  91.  hfl = defined(exdehalo) ? eval("oclip." + exdehalo) : smooth ? oclip.DeHalo_alpha_mt(rx=pel2 ? 3 : 2,ry=pel2 ? 3 : 2,darkstr=0.2,brightstr=0.8).yahr2(dirty ? pel2 ? 12 : 8 : pel2 ? 24 : 16).TBilateral(DR_Str,5,pel2 ? 1.4 : 0.9,0.9,pel2 ? 7 : 5,5,0.7,chroma=false) : usedeen ? oclip.Deen("a2d", 2, DR_Str  , 0, 0, 0, 0, 0) : oclip.TBilateral(DR_Str,5,pel2 ? 1.4 : 0.9,0.9,pel2 ? 7 : 5,5,0.7,chroma=false)
  92.  hfl = pel2 && !(maskpel2 && dirty) ? hfl.PointResize(input.Width(),input.Height()) : hfl
  93.  
  94.  cm  = dirty ? hfl : input
  95.  
  96.  cm  = !(dirty && pel2) && maskpel2 ? cm.nnedi3_rpow2(rfactor=2) : cm
  97.  
  98.  extmask = defined(extmask) ? isclip(extmask) ? extmask : Eval("cm." + extmask) : undefined()
  99.  
  100.  EM1 = defined(extmask) ? extmask : mode == 0 ? (strong ? Camembert_dhh(analog ? cm.ColorYUV(autogain=true) : cm) : Camembert_dhhMod(analog ? cm.ColorYUV(autogain=true) : cm)) : EMask_dhh(analog ? cm.ColorYUV(autogain=true) : cm, mode, threshold, analog, thr2)
  101.  
  102.  EM1 = maskpel2 ? EM1.PointResize(input.Width(),input.Height()) : EM1
  103.  
  104.  hfl = pel2 && (maskpel2 && dirty) ? hfl.PointResize(input.Width(),input.Height()) : hfl
  105.  
  106.  RM2 = DR_Radius_dhh(EM1.mt_inflate(),DR_Radius,0).mt_inflate()
  107.  
  108.  DeRinging = anime ? mt_Merge(hfl, input, smooth ? EM1.mt_inflate(155,155) : EM1) : hfl
  109.  DeRinging = Maska ?  DeRinging.Invert() : DeRinging
  110.  
  111. return mt_Merge(input, DeRinging, RM2, u=2, v=2)
  112. }
  113.  
  114. Function DeHaloH(clip input, int "DR_Radius", int "DR_Str", bool "Maska", bool "strong", int "mode", int "threshold")
  115. {
  116.  strong     = Default(strong, true)
  117.  Maska      = Default(Maska, false)
  118.  DR_Radius  = Default(DR_Radius, 2)
  119.  DR_Str     = Default(DR_Str, 15)
  120.  mode       = Default(mode, 0)
  121.  threshold  = Default(threshold, 140)
  122.  
  123.  EM = mode == 0 ? (strong ? input.Camembert_dhh() : input.Camembert_dhhMod()) : EMask_dhh(input, mode, threshold)
  124.  
  125.  RM=DR_Radius_dhh(EM,DR_Radius,0)
  126.  DeRinging  = input.Deen("a2d", 2, DR_Str  , 0, 0, 0, 0, 0)
  127.  DeRinging = Maska ?  DeRinging.Invert() : DeRinging
  128. return mt_Merge(input, DeRinging, RM)
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement