饱和度调整
RGB 和 HSV、HSL 转换中:
1. 饱和度 S 的计算方式:
2. HSL 中表示亮度的 L 的计算方式为:
3. HSV 中表示亮度的 V 的计算方式为:
普通调整
RGB 调整
这里的 k 就是调整强度,范围是 0 到 1;其中如果是 1 的话,最后就成了灰度图。这里的 avg
也可以用 YUV 中 Y 来替代,感觉更好,因为这里选哪一个决定了灰度图最后的情况,显然 Y 比 avg 更好。
我们计算这种调整方式下 HSL 的变换情况,由于是线性变换,所以 RGB 大小顺序不会变。我们假定 R 最大,B 最小。
可以看到,这种调整方式,色调 H 没有变化,亮度 L 发生变化并且非线性,不符合只调整饱和度的期望;而饱和度 S 虽然变化了,但也是非线性的变化,也不好。
HSL 空间调整
Photoshop 中的调整就是在 HSL 中做的,因此改变饱和度不会改变其他两项:
$$
newS=\left{ \begin{array}{c}
1 / (1-addS)\,\, srcS\,\, if\,\,addS\geqslant 0\
\left( 1+addS \right) \,\, srcS\,\, if\,\,addS<0\
\end{array} \right.
$$
自然饱和度调整
RGB 直接调
第一步的 k 的取值范围是 [0, 1.338](取 0 是 RGB 都为 0,取最大是 RGB 只有一个是 255 另外两个是 0)
第二步的 vibrance 是输入的参数强度,最好要保证 1 - k * vibrance 大于 0。因为 k 的范围每张图片不一样,所以这里的强度限制也不同,但前提都是要保证 1 - k * vibrance 大于 0。
再来看第三步,我们算一下变换后的饱和度变换:
亮度变化:
色调变化,如果 1 - k 大于 0,则 RGB 大小的顺序不会发生变化,因此我们假定 max = r 和 g > b 时:
所以这样调整,只有 S 发生了
另一种方式
这个就不分析了,和上面也都类似。
Lch 空间调整
HSL 可能不太能完全反应颜色的情况,因此处理后可能偏色,所以 GIMP 用的是 Lch 空间,具体调整请看链接一的文章,也是很简单的调整方式,用到的时候再去细细看吧。
参考链接
1. https://www.rtcdeveloper.cn/cn/community/blog/23855