• 1.摘要
  • 2.描述
  • 3.Alpha混合
  • 4.伽玛校正

Alpha合成

在计算机图形学领域,Alpha合成(英语:alpha compositing)是一种将图像与背景结合的过程,结合后可以产生部分透明或全透明的视觉效果。Alpha合成也叫阿尔法合成透明合成。渲染图像时,通常会将目标图像中的多个子元素单独渲染,最后再把多张子元素的图片合成为单独的图像。例如,电视直播时就会将大量计算机生成的图像元素合成到现场镜头上。

要正确结合图像元素,每个元素的必须有对应的遮片。遮片包含覆盖范围信息——图中几何对象的形状——可以借此分辨图像中的任意位置到底是被绘制的几何对象本身,还是逻辑上的“空白”区域。

描述

为了保存遮片信息,匠白光提出了Alpha通道的概念,后由托马斯·波特和汤姆·达夫完善。二维图像里记录着每个像素的颜色信息,额外的信息以 0 和 1 之间的值表示,记录在Alpha通道里。0 表示该像素没有覆盖信息,是透明的,即图中的几何体没有覆盖到本像素;而 1 则表示像素不透明,几何体完全覆盖了此像素。

图像中使用的Alpha通道通常有两种表示形式:平直Alpha(英语:straight alpha)和预乘Alpha(英语:premultiplied alpha)。

如果使用平直Alpha,图像中的RGB分量仅表示像素的颜色,与是否透明无关。

如果使用预乘Alpha,图像中的RGB分量也表示像素的颜色,但事先已经和不透明度做了乘法。某些使用场景下,这样的做法可以在后续合成时节省一次乘法。不过预乘Alpha的最显著优势在于使用简单、准确而非性能。

如果用平直的(非预乘)RGBA 元组表达像素颜色,那么像素值 (0, 0.7, 0, 0.5) 表示像素有 70% 的最大绿色亮度,同时不透明度是 50%。同样条件下的纯绿色是 (0, 1, 0, 0.5)。而如果用预乘Alpha,此处的 RGB 值 (0, 0.7, 0) 需要都乘以 0.5,表达为 (0, 0.35, 0, 0.5)。虽然此处 G 通道的值是 0.35 ,但它表示的还是最大亮度的 70%(其中包含了 50% 的不透明度)。此时的纯绿色则需要表达为 (0, 0.5, 0, 0.5)。因此,了解图像(文件)到底使用的是平直Alpha还是预乘Alpha非常重要,只有这样才能对图像做正确的处理和合成。

有了Alpha通道,图片的合成操作就可以用合成代数的形式表达。假设有图像元素 A 和 B,最常见的合成操作就是把 A 作为前景、B 作为背景,我们称这种操作(运算)为 over,记作 image。除此之外,波特和达夫还定义了其它几个运算符:inoutatopxor

Alpha compositing.svg

运算符 over 的效果与普通绘画效果一致(见画家算法),运算符 in 则等价于裁剪。

以运算符 over 为例,运算结果相当于对图像中的所有像素做以下公式:

image

其中 image 是运算结果,image 是图像 A 中的像素,image 是图像 B 中的像素,而 imageimage 则分别是图像 A、B 中对应像素的Alpha值。

如果假设颜色值都是预乘了Alpha值的(image),那么我们就可以将等式进行改写,结果图像中的颜色即:

image

结果中的Alpha值即:

image

Alpha混合

Alpha混合(英语:alpha blending)是将半透明的前景色与背景色结合的过程,可以得到混合后的新颜色。前景色的透明度不限,从完全透明到完全不透明都可以。如果前景色完全透明,混合后的颜色就是背景色;如果前景色完全不透明,混合后的颜色就是前景色;如果在这两种极端情况之间,混合后的颜色可以通过前景色和背景色的加权平均计算。

Alpha合成后的颜色可以这样计算: