"vibrance"过滤器的算法是什么?

TIM*_*MEX 2 algorithm colors image-processing

许多应用具有振动滤波器,其增加除肤色之外的颜色的饱和度.我想知道这个过滤器背后的算法 - 有没有可以指出的来源?

har*_*old 5

这取决于它是"积极的振动"还是"消极的振动".负振动只是去饱和.正振动增加了颜色的饱和度,但是对于开始时饱和度较低的颜色,它会增加更多,如果红色成分是最大的成分,它会有一些特殊的东西.看一下实现,这大致是正在发生的事情:(我不保证它对应于你定义为Vibrance的东西,但这是一个相当神秘的事情)

x = max(r, g, b)
y = min(r, g, b)
gray = toGray(unGamma(r, g, b))
scale = input
if x == r:
    t = min(1, abs((g - b) / (x - y)))
    scale = scale * (1 + t) * 0.5
a = (x - y) / 255
scale1 = scale * (2 - a)
scale2 = 1 + scale1 * (1 - a)
sub = y * scale1
r = unGamma(r * scale2 - sub)
g = unGamma(g * scale2 - sub)
b = unGamma(b * scale2 - sub)
gray2 = toGray(r, g, b)
r *= gray / gray2
g *= gray / gray2
b *= gray / gray2
m = max(r, g, b)
if Gamma(m) > 255:
    scale = (unGamma(255) - gray2) / (m - gray2)
    r = (r - gray2) * scale + gray2
    g = (g - gray2) * scale + gray2
    b = (b - gray2) * scale + gray2
(r, g, b) = Gamma(r, g, b)
Run Code Online (Sandbox Code Playgroud)

或多或少.除了实现之外,我没有任何指示,似乎没有人想谈论它.