fbpx
维基百科

Alpha合成

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

这张图片的Alpha通道中的值越往下越趋近于零。

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

描述

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

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

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

如果用平直的(非预乘)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通道,图片的合成操作就可以用合成代数英语Composition algebra的形式表达。假设有图像元素 A 和 B,最常见的合成操作就是把 A 作为前景、B 作为背景,我们称这种操作(运算)为 over,记作  。除此之外,波特和达夫还定义了其它几个运算符:inoutatopxor

 

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

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

 
 

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

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

 

结果中的Alpha值即:

 

over 运算符的解析推导

通过研究正交覆盖,Porter 和 Buff 给出了 alpha 合成的几何解释。在 1981 年 Bruce A. Wallace 的论文里则给出了另一种基于的反射率/透过率的物理模型的另一种推导。[3]

第三种推导方法通过使用两条简单的假设得到。为了简单起见,我们将 over 运算符简记成  

第一条假设是当背景是不透明(即  )时,over 运算符表示前景颜色与背景颜色的凸组合

 

第二条假设是这种运算应该满足结合律

 

现在,可以假设    包含不透明度分量,而   不包含。考虑中间变量

 .

由于结合律成立,有

 

由于   是不透明的,因此   也是不透明的。由第二条假设,在上面的式子中,上式地每个   运算都可以用凸组合表达:

 

这个式子的两边都满足   的形式,令   ,可以得到:

 

至此,我们推导出了   的颜色和其 alpha 分量的解析式。

注意到  ,这样,上式可以紧凑地表示成

 

  运算符满足非交换幺半群的定义。这个群的单位元   是所有满足   的二元组  ,这可以通过式子   得到。

Alpha混合

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

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

 

如果背景色不透明,即  ,代入上述方程后可以得到:

 

如果使用了预乘Alpha,最初的方程组可以简化为:

 

伽玛校正

 
不考虑伽玛校正,直接做 Alpha 混合的效果。
 
考虑伽玛校正,做 Alpha 混合的效果。

计算机图像一般不直接存储光照亮度对应的 RGB 值,而是需要先对这些值做伽玛校正

伽玛校正的大致过程如下:

  •   为屏幕上显示的 RGB 亮度(标准化后的亮度值,在 0 和 1 之间)
  •   为计算机内存中所存储的 RGB 亮度(也是标准化后的亮度值)
  •   为用于「解码」  图像的伽玛值 2.2(2.2 为   的典型取值)

则它们三者之间的关系为

 

因此,在处理计算机图像的 RGB 值时(尤其是做 Alpha 混合时),可以在处理前先将伽玛校正消除,完成处理后再重新做伽玛校正,这样做的效果比直接处理伽玛校正后的 RGB 值要好。

例如有一张图片  ,它对应的 Alpha 通道为  ,现在要把它叠加到背景图   上,那么最终的图像   可以这样计算:

 

此处的   是计算机内存中所存储的数据;在计算机显示器上会以   的数据显示。

参考资料

  1. ^ Porter, Thomas; Tom Duff. Compositing Digital Images. Computer Graphics. 1984, 18 (3): 253–259. ISBN 0-89791-138-5. doi:10.1145/800031.808606. 
    (见 pixar.com. (页面存档备份,存于互联网档案馆))
  2. ^ . tomforsyth1000.github.io. [8 May 2018]. (原始内容存档于2017-12-12). 
  3. ^ Wallace, Bruce A. Merging and transformation of raster images for cartoon animation. SIGGRAPH Computer Graphics (New York City, New York: ACM Press). 1981, 15 (3): 253–262. ISBN 0-89791-045-1. doi:10.1145/800224.806813. 

alpha合成, 在计算机图形学领域, 英語, alpha, compositing, 是一种将图像与背景结合的过程, 结合后可以产生部分透明或全透明的视觉效果, 也叫阿尔法合成或透明合成, 渲染图像时, 通常会将目标图像中的多个子元素单独渲染, 最后再把多张子元素的图片合成, 英语, compositing, 为单独的图像, 例如, 电视直播时就会将大量计算机生成的图像元素合成到现场镜头上, 这张图片的alpha通道中的值越往下越趋近于零, 要正确结合图像元素, 每个元素的必须有对应的遮片, 英语, matte,. 在计算机图形学领域 Alpha合成 英語 alpha compositing 是一种将图像与背景结合的过程 结合后可以产生部分透明或全透明的视觉效果 Alpha合成也叫阿尔法合成或透明合成 渲染图像时 通常会将目标图像中的多个子元素单独渲染 最后再把多张子元素的图片合成 英语 Compositing 为单独的图像 例如 电视直播时就会将大量计算机生成的图像元素合成到现场镜头上 这张图片的Alpha通道中的值越往下越趋近于零 要正确结合图像元素 每个元素的必须有对应的遮片 英语 Matte filmmaking 遮片包含覆盖范围信息 图中几何对象的形状 可以藉此分辨图像中的任意位置到底是被绘制的几何对象本身 还是逻辑上的 空白 区域 目录 1 描述 2 over 运算符的解析推导 3 Alpha混合 4 伽玛校正 5 参考资料描述 编辑为了保存遮片信息 匠白光提出了Alpha通道的概念 后由托马斯 波特 英语 Thomas K Porter 和汤姆 达夫 英语 Tom Duff 完善 1 二维图像里记录着每个像素的颜色信息 额外的信息以 0 和 1 之间的值表示 记录在Alpha通道里 0 表示该像素没有覆盖信息 是透明的 即图中的几何体没有覆盖到本像素 而 1 则表示像素不透明 几何体完全覆盖了此像素 图像中使用的Alpha通道通常有两种表示形式 平直Alpha 英語 straight alpha 和预乘Alpha 英語 premultiplied alpha 如果使用平直Alpha 图像中的RGB分量仅表示像素的颜色 与是否透明无关 如果使用预乘Alpha 图像中的RGB分量也表示像素的颜色 但事先已经和不透明度做了乘法 某些使用场景下 这样的做法可以在后续合成时节省一次乘法 不过预乘Alpha的最显著优势在于使用简单 准确而非性能 2 如果用平直的 非预乘 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通道 图片的合成操作就可以用合成代数 英语 Composition algebra 的形式表达 假设有图像元素 A 和 B 最常见的合成操作就是把 A 作为前景 B 作为背景 我们称这种操作 运算 为 over 记作 A over B displaystyle A operatorname over B 除此之外 波特和达夫还定义了其它几个运算符 in out atop xor 运算符 over 的效果与普通绘画效果一致 见画家算法 运算符 in 则等价于裁剪 以运算符 over 为例 运算结果相当于对图像中的所有像素做以下公式 a o a a a b 1 a a displaystyle alpha o alpha a alpha b left 1 alpha a right C o C a a a C b a b 1 a a a o displaystyle C o frac C a alpha a C b alpha b left 1 alpha a right alpha o 其中 C o displaystyle C o 是运算结果 C a displaystyle C a 是图像 A 中的像素 C b displaystyle C b 是图像 B 中的像素 而 a a displaystyle alpha a 和 a b displaystyle alpha b 则分别是图像 A B 中对应像素的Alpha值 如果假设颜色值都是预乘了Alpha值的 c i a i C i displaystyle c i alpha i C i 那么我们就可以将等式进行改写 结果图像中的颜色即 c o c a c b 1 a a displaystyle c o c a c b left 1 alpha a right 结果中的Alpha值即 a o c o C o a a a b 1 a a displaystyle alpha o frac c o C o alpha a alpha b left 1 alpha a right over 运算符的解析推导 编辑通过研究正交覆盖 Porter 和 Buff 给出了 alpha 合成的几何解释 在 1981 年 Bruce A Wallace 的论文里则给出了另一种基于的反射率 透过率的物理模型的另一种推导 3 第三种推导方法通过使用两条简单的假设得到 为了简单起见 我们将 over 运算符简记成 a b displaystyle a odot b 第一条假设是当背景是不透明 即 a b 1 displaystyle alpha b 1 时 over 运算符表示前景颜色与背景颜色的凸组合 C o a a C a 1 a a C b displaystyle C o alpha a C a 1 alpha a C b 第二条假设是这种运算应该满足结合律 a b c a b c displaystyle a odot b odot c a odot b odot c 现在 可以假设 a displaystyle a 和 b displaystyle b 包含不透明度分量 而 c displaystyle c 不包含 考虑中间变量 o a b displaystyle o a odot b 由于结合律成立 有 o c a b c displaystyle o odot c a odot b odot c 由于 c displaystyle c 是不透明的 因此 b c displaystyle b odot c 也是不透明的 由第二条假设 在上面的式子中 上式地每个 displaystyle odot 运算都可以用凸组合表达 a o C o 1 a o C c a a C a 1 a a a b C b 1 a b C c a a C a 1 a a a b C b 1 a a 1 a b C c displaystyle begin aligned alpha o C o 1 alpha o C c amp alpha a C a 1 alpha a alpha b C b 1 alpha b C c amp alpha a C a 1 alpha a alpha b C b 1 alpha a 1 alpha b C c end aligned 这个式子的两边都满足 X 0 Y 0 C c X 1 Y 1 C c displaystyle X 0 Y 0 C c X 1 Y 1 C c 的形式 令 X 0 X 1 displaystyle X 0 X 1 且 Y 0 Y 1 displaystyle Y 0 Y 1 可以得到 a o 1 1 a a 1 a b C o a a C a 1 a a a b C b a o displaystyle begin aligned alpha o amp 1 1 alpha a 1 alpha b C o amp frac alpha a C a 1 alpha a alpha b C b alpha o end aligned 至此 我们推导出了 o a b displaystyle o a odot b 的颜色和其 alpha 分量的解析式 注意到 1 a a a b a o a a displaystyle 1 alpha a alpha b alpha o alpha a 这样 上式可以紧凑地表示成 C o a a a o C a 1 a a a o C b displaystyle C o frac alpha a alpha o C a left 1 frac alpha a alpha o right C b displaystyle odot 运算符满足非交换幺半群的定义 这个群的单位元 e displaystyle e 是所有满足 a 0 displaystyle alpha 0 的二元组 C a displaystyle langle C alpha rangle 这可以通过式子 e a a e a displaystyle e odot a a odot e a 得到 Alpha混合 编辑Alpha混合 英語 alpha blending 是将半透明的前景色与背景色结合的过程 可以得到混合后的新颜色 前景色的透明度不限 从完全透明到完全不透明都可以 如果前景色完全透明 混合后的颜色就是背景色 如果前景色完全不透明 混合后的颜色就是前景色 如果在这两种极端情况之间 混合后的颜色可以通过前景色和背景色的加权平均计算 Alpha合成后的颜色可以这样计算 o u t A s r c A d s t A 1 s r c A o u t R G B s r c R G B s r c A d s t R G B d s t A 1 s r c A o u t A o u t A 0 o u t R G B 0 displaystyle begin cases mathrm out A mathrm src A mathrm dst A 1 mathrm src A mathrm out RGB bigl mathrm src RGB mathrm src A mathrm dst RGB mathrm dst A left 1 mathrm src A right bigr div mathrm out A mathrm out A 0 Rightarrow mathrm out RGB 0 end cases 如果背景色不透明 即 d s t A 1 displaystyle dst A 1 代入上述方程后可以得到 o u t A 1 o u t R G B s r c R G B s r c A d s t R G B 1 s r c A displaystyle begin cases mathrm out A 1 mathrm out RGB mathrm src RGB mathrm src A mathrm dst RGB 1 mathrm src A end cases 如果使用了预乘Alpha 最初的方程组可以简化为 o u t A s r c A d s t A 1 s r c A o u t R G B s r c R G B d s t R G B 1 s r c A displaystyle begin cases mathrm out A mathrm src A mathrm dst A 1 mathrm src A mathrm out RGB mathrm src RGB mathrm dst RGB left 1 mathrm src A right end cases 伽玛校正 编辑 不考虑伽玛校正 直接做 Alpha 混合的效果 考虑伽玛校正 做 Alpha 混合的效果 计算机图像一般不直接存储光照亮度对应的 RGB 值 而是需要先对这些值做伽玛校正 伽玛校正的大致过程如下 设 d i s p l a y e d R G B displaystyle displayed RGB 为屏幕上显示的 RGB 亮度 标准化后的亮度值 在 0 和 1 之间 设 s t o r e d R G B displaystyle stored RGB 为计算机内存中所存储的 RGB 亮度 也是标准化后的亮度值 设 g displaystyle gamma 为用于 解码 s t o r e d R G B displaystyle stored RGB 图像的伽玛值 2 2 2 2 为 g displaystyle gamma 的典型取值 则它们三者之间的关系为 d i s p l a y e d R G B s t o r e d R G B g displaystyle displayed RGB stored RGB gamma 因此 在处理计算机图像的 RGB 值时 尤其是做 Alpha 混合时 可以在处理前先将伽玛校正消除 完成处理后再重新做伽玛校正 这样做的效果比直接处理伽玛校正后的 RGB 值要好 例如有一张图片 o v e r l a y r g b displaystyle overlay rgb 它对应的 Alpha 通道为 o v e r l a y a displaystyle overlay alpha 现在要把它叠加到背景图 b a c k g r o u n d r g b displaystyle background rgb 上 那么最终的图像 o u t r g b displaystyle out rgb 可以这样计算 o u t r g b o v e r l a y r g b g o v e r l a y a b a c k g r o u n d r g b g 1 o v e r l a y a 1 g displaystyle out rgb overlay rgb gamma times overlay alpha background rgb gamma times 1 overlay alpha 1 gamma 此处的 o u t r g b displaystyle out rgb 是计算机内存中所存储的数据 在计算机显示器上会以 o u t r g b g displaystyle out rgb gamma 的数据显示 参考资料 编辑 Porter Thomas Tom Duff Compositing Digital Images Computer Graphics 1984 18 3 253 259 ISBN 0 89791 138 5 doi 10 1145 800031 808606 见 pixar com 页面存档备份 存于互联网档案馆 TomF s Tech Blog It s only pretending to be a wiki tomforsyth1000 github io 8 May 2018 原始内容存档于2017 12 12 Wallace Bruce A Merging and transformation of raster images for cartoon animation SIGGRAPH Computer Graphics New York City New York ACM Press 1981 15 3 253 262 ISBN 0 89791 045 1 doi 10 1145 800224 806813 取自 https zh wikipedia org w index php title Alpha合成 amp oldid 69113506, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。