许多应用程序都有一个震动过滤器,它可以增加肤色以外的色彩饱和度。我想知道此过滤器背后的算法是什么-是否可以指出一个来源?
这取决于是“正振动”还是“负振动”。负振动只是去饱和。正振动会增加颜色的饱和度,但是对于刚开始饱和度较低的颜色,它会增加更多的饱和度,并且如果红色分量是最大分量,则发生某些特殊情况。查看一个实现,大致就是这样:(尽管如此,我不保证它与您定义的“ 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)
或多或少。除了实现之外,我没有什么要指出的,似乎没人愿意谈论它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句