View Single Post
Old 3rd April 2014, 21:45   #16  |  Link
Bernardd
Registered User
 
Join Date: Jan 2012
Location: Toulon France
Posts: 249
Hello raffriff 42

I have written this function based on your luma range script and avisynth overlay internal function opacity tune. It is like a manual RGB problem soluce way in YUV world.
It is possible with it to process manual white balance.
For easy test of this function, in script end, is written a function call script with AvsPmod usersliders use.

Code:
function Other_colors(clip clip, int "limit_lo", int "limit_hi",                                       
                                        \  float "color_red_invert", float "color_green_invert", float "color_blue_invert",
                                        \  float "color_lo_red", float "color_mid_red", float "color_hi_red",
                                        \  float "color_lo_green",float "color_mid_green",float "color_hi_green",
                                        \  float "color_lo_blue",float "color_mid_blue",float "color_hi_blue",
                                        \ float "color_lo_black", float "color_mid_black", float "color_hi_black",
                                        \ float "color_lo_white", float "color_mid_white", float "color_hi_white",
                                        \  float "contrast_lo",float "contrast_mid",float "contrast_hi",
                                        \  bool "show_mask_color")
                                        
{

Assert(clip.IsYUV, "CheapColorTemp: source must be YUV")

show_mask_color = Default(show_mask_color, false)  




#---------------------------------------------  Masks making ----------------------------------------    
 

limit_lo = Default(limit_lo, 62) # seuil bas between in 0 et 190, valeur par default 62
limit_hi = Default(limit_hi, 191) # seuil bas between in 191 et 255, valeur par default 191

xlo_color = limit_lo * 3.0 / 256
xhi_color = limit_hi * 3.0 / 256

mask_lo_color   mt_lut(clip,
    \   yexpr="x -0.01 * "+String(xlo_color)+" + 256 * ",
    \   u=-128, v=-128) 
   
mask_hi_color   mt_lut(clip,
    \   yexpr="1 x -0.01 * "+String(xhi_color)+" + - 256 * ",
    \   u=-128, v=-128) 
    
mask_mid_color = (mask_version == 0) ? mt_lutxy(mask_lo_color, mask_hi_color, "x  y + -1 * 256 + ", u=-128, v=-128)

control_mask = StackHorizontal(mask_lo_color.Subtitle("mask lo"),mask_mid_color.Subtitle("mask mid"),mask_hi_color.Subtitle("mask hi"))

#-------------------------------------------- Add colors tuning


color_red_invert = Default(color_red_invert, 0.0) # percentage between red color and her invert color
color_lo_red = Default(color_lo_red, 0.0) # red add percentage in shadows toness, between in 0.0, 1.0, default 0.0
color_mid_red = Default(color_mid_red, 0.0) # red add percentage in midtones, between in 0.0, 1.0, default 0.0
color_hi_red = Default(color_hi_red, 0.0) # red add percentage in highlights tones, between in 0.0, 1.0, default 0.0

color_green_invert = Default(color_green_invert, 0.0) # percentage between green color and her invert color
color_lo_green = Default(color_lo_green, 0.0) # green add percentage in shadows toness, between in 0.0, 1.0, default 0.0
color_mid_green = Default(color_mid_green, 0.0) # green add percentage in midtones, between in 0.0, 1.0, default 0.0
color_hi_green = Default(color_hi_green, 0.0) # green add percentage in highlights tones, between in 0.0, 1.0, default 0.0

color_blue_invert = Default(color_blue_invert,  0.0) # percentage between blue color and her invert color
color_lo_blue = Default(color_lo_blue, 0.0) # blue add percentage in shadows toness, between in 0.0, 1.0, default 0.0
color_mid_blue = Default(color_mid_blue, 0.0) # blue add percentage in midtones, between in 0.0, 1.0, default 0.0
color_hi_blue = Default(color_hi_blue, 0.0) # blue add percentage in highlights tones, between in 0.0, 1.0, default 0.0

color_red = Overlay(BlankClip(clip , color=$FF0000), BlankClip(clip , color=$FF0000).invert, opacity = color_red_invert, mode = "Chroma")
color_green = Overlay(BlankClip(clip , color=$00FF00), BlankClip(clip , color=$00FF00).invert, opacity = color_green_invert, mode = "Chroma")
color_blue  = Overlay(BlankClip(clip , color=$0000FF), BlankClip(clip , color=$0000FF).invert, opacity = color_blue_invert, mode = "Chroma")

#-------------------------------------------- Luma tunning

color_lo_black = Default(color_lo_black, 0.0) #black add percentage in shadows toness, between in 0.0, 1.0, default 0.0
color_mid_black = Default(color_mid_black, 0.0) # black add percentage in midtones, between in 0.0, 1.0, default 0.0
color_hi_black = Default(color_hi_black, 0.0) # black add percentage in highlights tones, between in 0.0, 1.0, default 0.0

color_lo_white = Default(color_lo_white, 0.0) # white add percentage in shadows toness, between in 0.0, 1.0, default 0.0
color_mid_white = Default(color_mid_white, 0.0) # white add percentage in midtones, between in 0.0, 1.0, default 0.0
color_hi_white = Default(color_hi_white, 0.0) # white add percentage in highlights tones, between in 0.0, 1.0, default 0.0

color_black = BlankClip(clip , color=$000000)
color_white = BlankClip(clip , color=$FFFFFF)

color_sup = clip.Overlay(color_green, mask = mask_lo_color, opacity=color_lo_green, mode="chroma",greymask=true).Overlay(color_green, mask = mask_mid_color, opacity=color_mid_green, mode="chroma",greymask=true)
\.Overlay(color_green, mask = mask_hi_color, opacity=color_hi_green, mode="chroma",greymask=true).
\Overlay(color_red, mask = mask_lo_color, opacity=color_lo_red, mode="chroma",greymask=true).Overlay(color_red, mask = mask_mid_color, opacity=color_mid_red, mode="chroma",greymask=true)
\.Overlay(color_red, mask = mask_hi_color, opacity=color_hi_red, mode="chroma",greymask=true).
\Overlay(color_blue, mask = mask_lo_color, opacity=color_lo_blue, mode="chroma",greymask=true).Overlay(color_blue, mask = mask_mid_color, opacity=color_mid_blue, mode="chroma",greymask=true)
\.Overlay(color_blue, mask = mask_hi_color, opacity=color_hi_blue, mode="chroma",greymask=true).
\Overlay(color_black, mask = mask_lo_color, opacity=color_lo_black, mode="luma",greymask=true).Overlay(color_black, mask = mask_mid_color, opacity=color_mid_black, mode="luma",greymask=true)
\.Overlay(color_black, mask = mask_hi_color, opacity=color_hi_black, mode="luma",greymask=true).
\Overlay(color_white, mask = mask_lo_color, opacity=color_lo_white, mode="luma",greymask=true).Overlay(color_white, mask = mask_mid_color, opacity=color_mid_white, mode="luma",greymask=true)
\.Overlay(color_white, mask = mask_hi_color, opacity=color_hi_white, mode="luma",greymask=true)

# ------------------------------------------ contrast

contrast_lo = Default(contrast_lo, 0.0) # contrast percentage in shadows toness, between in 0.0, 1.0, default 0.0
contrast_mid = Default(contrast_mid, 0.0) # contrast percentage in midtones, between in 0.0, 1.0, default 0.0
contrast_hi = Default(contrast_hi, 0.0) # contrast percentage in highlights tones, between in 0.0, 1.0, default 0.0
color_contr = color_sup.Overlay(color_sup, mask = mask_lo_color, opacity=contrast_lo, mode="add").Overlay(color_sup, mask = mask_mid_color, opacity=contrast_mid, mode="add")
\.Overlay(color_sup, mask = mask_hi_color, opacity=contrast_hi, mode="add")

#------------------------------------------- Results

(show_mask_color == true) ? control_mask : color_contr
return last
}

__END__
# paths to be customised
Source # Your source
LoadPlugin("C:\...........\mt_masktools-25.dll")
Import("C:\..........\Add colors function.avs ") # If you have saved this function script with this file name
[color addition=1]
[< separator="Add color tuning">]
show = [<"Show tones masks (no = 0 et yes = 1)", 0, 1, 0>] 
show_mask_color  = (show == 1) ? true : false

[< separator="Mask tuning">]
limit_lo=[<"limit_lo", 0, 190, 62>]
limit_hi=[<"limit_hi", 191, 255, 191>]

[< separator="Add colors percentage tuning ">]
[< separator="       red addition">]
color_red_invert = [<"percentage between red color and her invert color", 0.0, 1.0, 0.0>]
color_lo_red = [<"red add percentage in shadows tones", 0.0, 1.0, 0.0>]
color_mid_red = [<"red add percentage in midtones", 0.0, 1.0, 0.0>]
color_hi_red = [<"red add percentage in highlights tones", 0.0, 1.0, 0.0>]
[< separator="       green addition">]
color_green_invert = [<"percentage between green color and her invert color", 0.0, 1.0, 0.0>]
color_lo_green = [<"green add percentage in shadows tones", 0.0, 1.0, 0.0>]
color_mid_green = [<"green add percentage in midtones", 0.0, 1.0, 0.0>]
color_hi_green = [<"green add percentage in highlights tones", 0.0, 1.0, 0.0>]
[< separator="       blue addition">]
color_blue_invert = [<"percentage between blue color and her invert color", 0.0, 1.0, 0.0>]
color_lo_blue = [<"blue add percentage in shadows tones", 0.0, 1.0, 0.0>]
color_mid_blue = [<"blue add percentage in midtones", 0.0, 1.0, 0.0>]
color_hi_blue = [<"blue add percentage in highlights tones", 0.0, 1.0, 0.0>]

[< separator="Luma tuning">]
[< separator="More dark">]
color_lo_black = [<"black add percentage in shadows tones", 0.0, 1.0, 0.0>]
color_mid_black = [<"black add percentage in midtones", 0.0, 1.0, 0.0>]
color_hi_black = [<"black add percentage in highlights tones", 0.0, 1.0, 0.0>]
[< separator="More light">]
color_lo_white = [<"white add percentage in shadows tones", 0.0, 1.0, 0.0>]
color_mid_white = [<"white add percentage in midtones", 0.0, 1.0, 0.0>]
color_hi_white = [<"white add percentage in highlights tones", 0.0, 1.0, 0.0>]

[< separator="Contrast tuning">]
contrast_lo = [<"contrast add percentage in shadows tones", 0.0, 1.0, 0.0>]
contrast_mid = [<"contrast add percentage in midtones", 0.0, 1.0, 0.0>]
contrast_hi = [<"contrast add percentage in highlights tones", 0.0, 1.0, 0.0>]

Assert(isclip, "No defined source") # Line to be deleted if you have gived a variable name for the clip

Other_colors(limit_lo = limit_lo, limit_hi = limit_hi,
\color_red_invert = color_red_invert, color_green_invert = color_green_invert, color_blue_invert = color_blue_invert,
\color_lo_red = color_lo_red, color_mid_red = color_mid_red, color_hi_red = color_hi_red,
\color_lo_green = color_lo_green, color_mid_green = color_mid_green, color_hi_green = color_hi_green,
\color_lo_blue = color_lo_blue, color_mid_blue = color_mid_blue, color_hi_blue = color_hi_blue,
\color_lo_black = color_lo_black, color_mid_black = color_mid_black, color_hi_black = color_hi_black,
\color_lo_white = color_lo_white, color_mid_white = color_mid_white, color_hi_white = color_hi_white,
\contrast_lo = contrast_lo, contrast_mid =contrast_mid, contrast_hi = contrast_hi,
\show_mask_color = show_mask_color)

[/color addition]
I think that i should get more accuracy with more luma range zones. But i do not know write masktools formulas for this.
Thus i have put in beginng two variable values for enable little mask making modifications.
What do you think of this trial, is it in accordance with yours observations ?
Thanks
Bernardd is offline   Reply With Quote