图像编辑之图层混合

继续图像编辑方面的内容,这次是关于图层混合:将上下两层的色彩经过一定的规则进行结合,从而创造出大量的效果。这方面相关的文章很多,但是基本没有一篇够全够精确—- 更多的文章都是针对某种特定的图层混合模式进行分析,所以我这篇文章就总结所有的模式并给出相应的混合公式。(话说模式真多,光枚举就写得累死了,奶奶的)

假设底层图层的色彩值为 a,上层图层的色彩值为 b,在应用完相应的图层混合模式后便得到了一个混合图层的色彩值 f(a,b)。在透明度为 100% 的情况下,这个色彩值 f(a,b)就是混合完毕后所呈现的图片最终色彩值。而如果指定了透明度,则:

FinalResult = (1 – Opacity) * a + Opacity * f(a,b)

这里值得注意的是所有的色彩值取值范围是 [0,1],而不是 RGB 强度范围[0,255],之所以这么取是为了方便公式美观清晰: 否则很多公式里面要带上一大堆的乘以 255,除以 255 之类的 “噪音”,且 f(a,b) 最后的取值也只能在 [0,1] 之间

变暗模式(Darken)

这种模式在混合两个图层时,将上下两个图层的色彩值做比较,并取低值作为混合色,所以整体的色彩值降低,造成了变暗的效果。值得注意的是拿纯白的图层或者本身图片进行混合是毫无效果的。

f(a,b) = MIN(a,b)

变亮模式(Lighten)

和变暗相反,取的是两者的大值。拿原图和纯黑的图层进行混合也是毫无效果的。

f(a,b) = MAX(a,b)

正片叠底(Multiply)

这种模式有点类似于重叠两份透明幻灯片得出的效果,光线透过这两个幻灯片说产生的结果。这种模式对白色是无效的(看公式可知道) [百度百科]

f(a,b) = a * b

滤色(Screen)

这是正片叠底的反模式,合成后显示的是较亮的部分,产生一种类似漂白的效果。

1 – f(a,b) = (1 – a) * (1 – b)

颜色减淡(Color Dodge)

这种模式由上层图层决定了下层所获得光亮度—- 上层图层越淡,下层就会越亮。(很迷茫为啥这样就减淡,难道不是增强了下层的亮度了么,应该是认为黑色是浓的,而白色算淡的颜色吧)

f(a,b) = a / (1 – b)

颜色加深(Color Burn)

与颜色减淡相反,通过减少上层图层的对比度,产生下层图层透过上层图层的投影效果。

f(a,b) = 1 – (1 – a) / b

线性减淡(Linear Dodge)

通过混合上下层的亮度使得底层的颜色变亮。与黑色混合无效。

f(a,b) = a + b

线性加深(Linear Burn)

通过降低亮度使得底图变暗来反映混合色彩。与白色混合无效。

f(a,b) = a + b – 1

叠加(OverLay)

综合了正片叠底和滤色两种模式,由底图决定。一般来说发生变化的都是中间色调,亮色和暗色区域基本标尺不变。

f(a,b) = 2ab (a <= 0.5) , f(a,b) = 1 – 2 * (1 – a) * (1 – b) , ( a > 0.5)

强光(Hard Light)

其效果等同于打上了一层色调强烈的光,也同样是综合正片叠底和滤色两种模式,不过是由上层决定。

f(a,b) = 2ab (b <= 0.5) f(a,b) = 1 – 2 * (1 – a) * (1 – b), (b > 0.5)

柔光(Soft Light)

这种模式类似上层以 Gmmma 值为 [0.5,2] 来对下层进行调整,结果将会是一种柔和的组合。

f(a,b) = a + (2b – 1) * (a – a^2) , (b <= 0.5) f(a,b) = a + (2b – 1) *( a ^0.5 – a) , (b > 0.5)

亮光(Vivid Light)

这种模式强烈地增加了对比度,尤其是在高光和阴影的部分,可以认为是一种在高光处使用色彩减淡和阴影处使用色彩加深的模式。

f(a,b) = 1 – (1 – a) / (2b), ( b <= 0.5) f(a,b) = a / (2 * (1 – b)) , ( b > 0.5)

线性光(Linear Light)

类似于线性加深的模式,不过加深了上层的影响。

f(a,b) = a + 2b – 1

点光(Pin Light)

按照上层颜色分布信息来替换颜色。如果上层颜色(光源)亮度高于 50% 灰,比上层颜色暗的像素将会被取代,而较之亮的像素则不发生变化。如果上层颜色(光源)亮度低于 50% 灰,比上层颜色亮的像素会被取代,而较之暗的像素则不发生变化。(此段拷贝自百度……)

f(a,b) = 2b – 1 , (a <= 2b – 1 ) f(a,b) = a , (2b – 1 < a < 2b) f(a,b) = 2b , (a <= 2b)

实色混合(Hard Mix)

这种模式将上下层色彩之和与纯白相比,最终得到是:每个通道上要么是 0,要么是 1(255)

f(a,b) = 0 , (a + b < 1) f(a,b) = 1 , (a + b >= 0)

差值(Difference)

顾名思义:差值,取绝对值

f(a,b) = a – b

排除(Exclusion)

与差值作用类似,用较高阶或较低阶颜色去合成图像时与差值毫无分别,使用趋近中间阶调颜色则效果有区别,总的来说效果比 Difference 要柔和。排除模式。和差值类似,但是产生的对比度会较低。同样的,与纯白混合得到反相效果,而与纯黑混合没有任何变化。种模式产生一种比差值模式更柔和、更明亮的效果。无论是差值还是排除模式都能使人物或自然景色图像产生更真实或更吸引人的图像合成。(同样摘抄自百度)

f(a,b) = a + b – 2 ab = (a – b)^2 // 其实就是差值的平方数……