“vibrance”过滤器的算法是什么?

时间:2015-11-27 23:48:07

标签: algorithm image-processing colors

许多应用都有一个振动过滤器,可以增加肤色以外的颜色饱和度。我想知道这个过滤器背后的算法是什么 - 是否有可以指出的来源?

1 个答案:

答案 0 :(得分: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)

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