Alpha Blending小记

0 前言

Alpha-Blending,是按照“Alpha”混合向量的值来混合源像素和目标像素的一种图像处理技术。
Alpha混合向量一般表示了图片的透明度。

1 RGB Alpha Blending

两个像素的α混合步骤如下:

  1. 首先把源像素和目标像素的RGB三个颜色分量分离。
  2. 其次把源像素的三个颜色分量分别乘上Alpha的值,并把目标像素的三个颜色分量分别乘上Alpha的反值。
  3. 然后把结果按对应颜色分量相加,再对求得的每个分量结果除以Alpha的最大值。
  4. 最后把三个颜色分量重新合成为一个像素输出。

混合公式如下:

R3 = R1*a + R2*(1-a);
G3 = G1*a + G2*(1-a);
B3 = B1*a + B2*(1-a);

2 YUV Alpha Blending

对于YUV数据,可以根据YUV与RGB的转换公式推导出YUV的Alpha Blending公式与RGB相同,推导过程如下:

  1. YUV转换成RGB的公式(YUV -> RGB)
C = Y - 16
D = U - 128
E = V - 128
R = clip((298*C + 409*E + 128) >> 8)
G = clip((298*C - 100*D - 208*E + 128) >> 8)
B = clip((298*C + 516*D + 128) >> 8)
  1. RGB转换成YUV的公式(RGB->YUV)
Y = (( 66*R + 129*G +  25*B + 128) >> 8) +  16
U = ((-38*R -  74*G + 112*B + 128) >> 8) + 128
V = ((112*R -  94*G -  18*B + 128) >> 8) + 128
  1. Y分量Alpha Blending过程推导(U,V分量可以同理推出)
# 公式转换
Y = ((66*R + 129*G + 25*B + 128)>>8) + 16
(Y1-16)<<8 = 66*R1 + 129*G1 + 25*B1 + 128
(Y2-16)<<8 = 66*R2 + 129*G2 + 25*B2 + 128
(Y3-16)<<8 = 66*R3 + 129*G3 + 25*B3 + 128
# 公式展开
((Y1-16)<<8)*a + ((Y2-16)<<8)*(1-a)
=(66*R1 + 129*G1 + 25*B1 + 128)*a + (66*R2 + 129*G2 + 25*B2 + 128)*(1-a)
=66*(R1*a + R2*(1-a)) + 129*(G1*a + G2*(1-a)) + 25*(B1*a + B2*(1-a)) +128
=66*R3 + 129*R3 + 25*R3 +128
= (Y3-16)<<8
# 公式整理
(Y3-16)<<8 = ((Y1-16)<<8)*a + ((Y2-16)<<8)*(1-a)
(Y3-16) = (Y1-16)*a + (Y2-16)*(1-a)
Y3 = (Y1-16)*a + (Y2-16)*(1-a) + 16
   = Y1*a - 16*a + Y2*(1-a) - 16 + 16*a +16
   = Y1*a + Y2*(1-a)

整个推导过程比较简单,主要就是公式代入,展开,合并同类项。

你可能感兴趣的:(Alpha Blending小记)