Advertisement
Guest User

FixChromaBleedingMod

a guest
Mar 22nd, 2015
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # FixChromaBleedingMod v1.3
  2.  
  3. Function FixChromaBleedingMod (clip input, int "cxShift", int "cyShift", float "thr", float "strength", bool "f", float "opacity", bool "n", bool "xysh", bool "Bic") {
  4.  
  5.   xShift = default ( cxShift,       -4 )
  6.   yShift = default ( cyShift,       -4 )
  7.   thr    = default ( thr,         4.0 )
  8.   stre = default ( strength,      0.8 )
  9.   f =  default ( f,       true )
  10.   n =  default ( n,       false )
  11.   sh =  default ( xysh,       false )
  12.   Bic = default ( Bic,       false )
  13.   opacity = default ( opacity,       1 )
  14.  
  15.   # prepare to work on the V channel and reduce to speed up and filter noise
  16.   areaf = input.tweak(sat=thr).VtoY.ReduceBy2
  17.   area = n ? input.tweak(sat=thr).VtoY.Blur(1) : input.tweak(sat=thr).VtoY
  18.  
  19.   # select and normalize both extremes of the scale
  20.   red = f ? areaf.Levels(255,1.0,255,255,0) : area.Levels(255,1.0,255,255,0)
  21.   blue = f ? areaf.Levels(0,1.0,0,0,255) : area.Levels(0,1.0,0,0,255)
  22.  
  23.   # merge both masks
  24.   maskc = n ? MergeLuma(red, blue, 0.5).Levels(250,1.0,250,255,0) : f ?  MergeLuma(red, blue, 0.5).Levels(250,1.0,250,255,0) : MergeLuma(red, blue, 0.5).Blur(1).Levels(250,1.0,250,255,0)
  25.  
  26.   # expand to cover beyond the bleeding areas and shift to compensate the resizing
  27.    maskc = IsPlanar(input) ? maskc.mt_edge("0 0 0 1 0 0 0 0 0", 0,255,0,255).mt_edge("1 1 1 1 1 1 0 0 0", 0,255,0,255) : maskc.ConvertToRGB32.GeneralConvolution(0,"0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0").ConvertToYV12
  28.  
  29.   # back to full size and binarize (also a trick to expand)
  30.   maskc = Bic ? maskc.BicubicResize(Width(input),Height(input)).Levels(10,1.0,10,0,255) : maskc.BilinearResize(Width(input),Height(input)).Levels(10,1.0,10,0,255)
  31.  
  32.   # prepare a version of the image that has its chroma shifted and less saturated
  33.   input_c = sh ? input.ChromaShiftSP(x=xShift,y=yShift).tweak(sat=stre) : input.ChromaShift(C=xShift).tweak(sat=stre)
  34.  
  35.   # combine both images using the mask
  36.   return input.overlay(input_c,mask=maskc,mode="blend",opacity=opacity)
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement