Advertisement
Guest User

BalanceBorders

a guest
Jul 27th, 2019
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # 2019.07.28
  2. function BalanceBorders(clip c, int cTop, int cBottom, int cLeft, int cRight, int "thresh", int "blur")
  3. {
  4.     sisavs26     = !(VersionNumber() < 2.6)
  5.     sisphbd = AvsPlusVersionNumber > 2294
  6.  
  7.     sislumaonly  = sisphbd ? c.isy() : sisavs26 ? c.isy8() : false
  8.    
  9.     sisfullchrom = sisphbd ? c.is444() : sisavs26 ? c.isyv24() : false
  10.    
  11.     sis420chr    = sisphbd ? c.is420() : c.isyv12()
  12.    
  13.     Assert(sis420chr || sisfullchrom || sislumaonly, "This is not a Square chroma clip.")
  14.  
  15.     thresh = Default(thresh, 128)
  16.     blur   = Default(blur,   999)
  17.  
  18.     Assert(blur   > 0, "Blur parameter in BalanceBorders() must be > 0")
  19.     Assert(thresh > 0, "Thresh parameter in BalanceBorders() must be > 0")
  20.  
  21.     c
  22.     cTop    >0 ? BalanceTopBorder(cTop,    thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight()
  23.     cLeft   >0 ? BalanceTopBorder(cLeft,   thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight()
  24.     cBottom >0 ? BalanceTopBorder(cBottom, thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight()
  25.     cRight  >0 ? BalanceTopBorder(cRight,  thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight()
  26. }
  27.  
  28. function BalanceTopBorder(clip c, int cTop, int "thresh", int "blur", bool "sislumaonly", bool "sis420chr", bool "sisavs26")
  29. {
  30.     cWidth = c.width
  31.     cHeight = c.height
  32.     cTop = min(cTop,cHeight-1)
  33.     cTop2 = max(sis420chr ? 4 : 2,cTop)
  34.     blurWidth = max(4,floor(cWidth/blur))
  35.  
  36.     c2 = c.PointResize(cWidth*2,cHeight*2)
  37.  
  38.     c2.\
  39.     Crop(0,cTop*2,cWidth*2,2)
  40.     PointResize(cWidth*2,cTop2*2)
  41.     BilinearResize(blurWidth*2,cTop2*2)
  42.     mt_convolution("1 1 1","0 1 0",y=3,u=sislumaonly ? 1 : 3,v=sislumaonly ? 1 : 3)
  43.     PointResize(blurWidth*2,cTop*2)
  44.     BilinearResize(cWidth*2,cTop*2)
  45.     referenceBlur = last
  46.  
  47.     original = c2.Crop(0,0,cWidth*2,cTop*2)
  48.  
  49.     original
  50.     PointResize(Width(),cTop2*2)
  51.     BilinearResize(blurWidth*2,cTop2*2)
  52.     mt_convolution("1 1 1","0 1 0",y=3,u=sislumaonly ? 1 : 3,v=sislumaonly ? 1 : 3)
  53.     PointResize(blurWidth*2,cTop*2)
  54.     BilinearResize(cWidth*2,cTop*2)
  55.     originalBlur = last
  56.  
  57.     balanced = sisavs26 ? mt_lutXYZ(original,originalBlur,referenceBlur,"z y - x +",clamp_float=true,use_expr=3,y=3,u=3,v=3) : mt_lutXYZ(original,originalBlur,referenceBlur,"z y - x +",y=3,u=3,v=3)
  58.     difference = mt_makeDiff(balanced,original,y=3,u=3,v=3)
  59.  
  60.     tp = string(128+thresh)
  61.     tm = string(128-thresh)
  62.     difference = sisavs26 ? difference.mt_lut("x "+tp+" scalef > "+tp+" scalef x ?",Use_expr=2,y=3,u=3,v=3) : difference.mt_lut("x "+tp+" > "+tp+" x ?",y=3,u=3,v=3)
  63.     difference = sisavs26 ? difference.mt_lut("x "+tm+" scalef < "+tm+" scalef x ?",Use_expr=2,y=3,u=3,v=3) : difference.mt_lut("x "+tm+" < "+tm+" x ?",y=3,u=3,v=3)
  64.  
  65.     mt_addDiff(original,difference,y=3,u=3,v=3)
  66.  
  67.     StackVertical(last,c2.Crop(0,cTop*2,cWidth*2,(cHeight-cTop)*2)).PointResize(cWidth,cHeight)
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement