Advertisement
Guest User

FastLineDarkenMOD 1.47x

a guest
Jul 21st, 2019
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ###############################
  2. # FastLineDarken 1.47x MT MOD #
  3. ###############################
  4. #
  5. # Written by Vectrangle    (http://forum.doom9.org/showthread.php?t=82125)
  6. # Didée: - Speed Boost, Updated: 11th May 2007
  7. # Dogway - added protection option. 12-May-2011
  8. # A.SONY - added high bit support and others. 31-Mar-2017
  9. #
  10. #  * requires mt_masktools v2 in avs2.5 and masktools 2.2.17 in avs 2.6 or avs+
  11. #  * requires yuv input
  12. #
  13. #
  14. #
  15. # Parameters are:
  16. #  strength (integer)  - Line darkening amount, 0-256. Default 48. Represents the _maximum_ amount
  17. #                        that the luma will be reduced by, weaker lines will be reduced by
  18. #                        proportionately less.
  19. #  prot     (integer)  - Prevents the darkest lines from being darkened. Protection acts as a threshold.
  20. #                        Values range from 0 (no prot) to ~50 (protect everything). Default 5.
  21. #  luma_cap (integer)  - value from 0 (black) to 255 (white), used to stop the darkening
  22. #                        determination from being 'blinded' by bright pixels, and to stop grey
  23. #                        lines on white backgrounds being darkened. Any pixels brighter than
  24. #                        luma_cap are treated as only being as bright as luma_cap. Lowering
  25. #                        luma_cap tends to reduce line darkening. 255 disables capping. Default 191.
  26. #  threshold (integer) - any pixels that were going to be darkened by an amount less than
  27. #                        threshold will not be touched. setting this to 0 will disable it, setting
  28. #                        it to 4 (default) is recommended, since often a lot of random pixels are
  29. #                        marked for very slight darkening and a threshold of about 4 should fix
  30. #                        them. Note if you set threshold too high, some lines will not be darkened
  31. #  thinning (integer)  - optional line thinning amount, 0-256. Setting this to 0 will disable it,
  32. #                        which is gives a _big_ speed increase. Note that thinning the lines will
  33. #                        inherently darken the remaining pixels in each line a little. Default 0.
  34. #
  35. # Changelog:
  36. #  1.43 - update to masktools 2.2.17
  37. #  1.42 - added high bit support in avs+ and others Optmized
  38. #  1.4  - added protection option. Prevents darkest lines to be over darkened thus creating artifacts (i.e. aliasing, clipping...)
  39. #       - Optmized the code as suggested by Didée for possible faster processing. It also deals with the green screen bug.
  40. #  1.3  - added ability to thin lines, now runs much slower unless thinning=0. Changed the defaults (again)
  41. #  1.2  - huge speed increase using yv12lutxy =)
  42. #       - weird darkening issues gone (they were caused by yv12layer)
  43. #       - show option no longer available due to optimizations. Use subtract() instead
  44. #  1.1  - added luma_cap option
  45. #  1.0  - initial release
  46. #
  47.  
  48.  
  49. function FastLineDarkenMOD4( clip input, float "strength", float "prot", float "luma_cap", float "threshold", float "thinning")
  50. {
  51. ## parameters ##
  52. str        = string(default(strength, 48) /128.)
  53. lum        = string(default(luma_cap, 191))
  54. protection = default(prot,5)
  55. thr        = string(default(threshold, 4))
  56. thinning   = default(thinning,0)
  57. thn        = string(thinning /16.)
  58.  
  59. Assert(!(input.isrgb()), "FastLineDarkenMOD4: RGB Color formats is not supported" )
  60.  
  61. sisphbd = AvsPlusVersionNumber > 2294
  62.  
  63. sislumaonly = sisphbd ? input.isy() : VersionNumber() < 2.6 ? true : input.isy8()
  64.  
  65. c = sislumaonly ? input : sisphbd ? input.converttoy() : input.converttoy8()
  66.  
  67. ## filtering ##
  68. exin    = c.mt_expand(thy=255/(protection+1)).mt_inpand()
  69. diff    = VersionNumber() < 2.6 ? mt_lutxy(c,exin,yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? 127 +",uexpr="x",vexpr="x")
  70.           \                     : mt_lutxy(c,exin,yexpr="y "+lum+" scalef < y "+lum+" scalef ? x "+thr+" scalef + > x y "+lum+" scalef < y "+lum+" scalef ? - 0 ? 127 scalef +", use_expr=1)
  71. linemask= thinning != 0 ? VersionNumber() < 2.6 ? mt_lut(diff.mt_inpand(),"x 127 - "+thn+" * 255 +").RemoveGrain(20,-1)
  72.             \           : mt_lut(diff.mt_inpand(),"x 127 scalef - "+thn+" * range_max +",clamp_float=true,use_expr=2).RemoveGrain(20,-1) : nop()
  73. thick   = VersionNumber() < 2.6 ? 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)
  74.           \                     : mt_lutxy(c, exin, yexpr="y "+lum+" scalef < y "+lum+" scalef ? x "+thr+" scalef + > x y "+lum+" scalef < y "+lum+" scalef ? - 0 ? "+str+" * x +",clamp_float=true,use_expr=1,u=2, v=2)
  75. thin    = thinning != 0 ? VersionNumber() < 2.6 ? mt_lutxy(c.mt_expand(U=2,V=2),diff,yexpr="x y 127 - "+str+" 1 + * +",u=2, v=2)
  76.             \           : mt_lutxy(c.mt_expand(U=2,V=2),diff,yexpr="x y 127 scalef - "+str+" 1 + * +", scale_inputs="floatf", use_expr=3,u=2, v=2) : nop()
  77.  
  78. thinning == 0 ? thick : mt_merge(thin,thick,linemask,y=3,u=2,v=2)
  79.  
  80. return sislumaonly ? last : sisphbd ? CombinePlanes(last,input,planes="YUV",sample_clip=input) : ytouv(input.utoy8(),input.vtoy8(),last)
  81. }
  82.  
  83. #############
  84.  
  85.  
  86. function FastLineDarkenMOD3( clip c, int "strength", int "prot", int "luma_cap", int "threshold", int "thinning")
  87. {
  88. ## parameters ##
  89. str        = string(default(strength, 50) /128.)
  90. lum        = string(default(luma_cap, 191))
  91. protection = default(prot,5)
  92. thr        = string(default(threshold, 4))
  93. thinning   = default(thinning,0)
  94. thn        = string(thinning /16.)
  95.  
  96. ## filtering ##
  97. exin    = c.mt_expand(thy=255/(protection+1)).mt_inpand()
  98. diff    = mt_lutxy(c,exin,yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? 127 +",uexpr="x",vexpr="x")
  99. 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.
  100. thick   = mt_lutxy(c, exin, yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? "+str+" * x +",uexpr="x",vexpr="x")
  101. thin    = mt_lutxy(c.mt_expand(),diff,yexpr="x y 127 - "+str+" 1 + * +")
  102.  
  103. (thinning == 0) ? thick : mt_merge(thin,thick,linemask,y=3)
  104. return mergechroma(c)}
  105.  
  106. #############
  107.  
  108.  
  109. function FastLineDarkenMOD2( clip c, int "strength", int "luma_cap", int "threshold", int "thinning")
  110. {
  111. ## parameters ##
  112. str     = string(default(strength, 48) /128.)
  113. lum     = string(default(luma_cap, 191))
  114. thr     = string(default(threshold, 4))
  115. thinning = default(thinning,24)
  116. thn     = string(thinning /16.)
  117.  
  118. ## filtering ##
  119. exin    = c.mt_expand().mt_inpand()
  120. diff    = mt_lutxy(c,exin,yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? 127 +",uexpr="x",vexpr="x",u=2, v=2)
  121. 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.
  122. 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)
  123. thin    = mt_lutxy(c.mt_expand(U=2,V=2),diff,yexpr="x y 127 - "+str+" 1 + * +",u=2, v=2)
  124.  
  125. return (thinning == 0) ? thick : mt_merge(thin,thick,linemask,y=3,u=2,v=2)
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement