需要帮助理解Alpha通道(Need help understanding Alpha Channe

2019-09-30 19:20发布

我有我们称之为P.像素的RGB元组

(255,0,0)是P的与1.0 alpha通道的颜色。

与0.8α通道,P的颜色变为(255,51,51)。

我怎样才能得到所影响普的颜色像素的颜色?

Answer 1:

让我们从头开始。 阿尔法像素才有意义,当它是混有别的东西。 如果你有阿尔法上层U和下部层L是完全不透明,该方程为:

P = (alpha * U) + ((1.0 - alpha) * L)

重新整理公式,您将获得:

L = (P - (alpha * U)) / (1.0 - alpha)

显然,方程没有意义,当alpha为1.0,因为你会被零除进行。

在堵塞你的数字显示,R = 255,G = 255和B = 255的像素L.

它是按照惯例几乎普遍的是图像中的最下层将是全白(255,255,255)。



Answer 2:

只是看你提供的数字:

(1.0-0.8)*255 ~= 50.9 = 51

哪里:

  • 1.0为最大强度的α
  • 0.8是当前设置的阿尔法强度
  • 255是每个RGB信道的最大强度(背景的颜色)

这符合您的示例中的B和G通道。

所以,在一般情况下,它似乎是信道的值(RGB)和背景颜色(在你的情况下,白色 - 255)之间的一个简单的加权平均。 阿尔法被用作权重。

下面是一些Python代码:

MIN_ALPHA=0.0
MAX_ALPHA=1.0
MIN_CH=0
MAX_CH=255
BG_VAL=255

def apply_alpha(old, alpha, bg=255):
    assert alpha >= MIN_ALPHA
    assert alpha <= MAX_ALPHA
    assert old >= MIN_CH
    assert old <= MAX_CH

    new = old*alpha + (MAX_ALPHA - alpha)*bg
    return new

if __name__ == '__main__':
    import sys
    old, alpha = map(float, sys.argv[1:])
    print apply_alpha(old, alpha)

而一些输出:

misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 255 0.8
255.0
misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 0 0.8
51.0

试试这个对于其他例子(尤其是非白色背景) - 它可能是这么简单。 如果没有,编辑与新的例子你的答案,我会再看看。



文章来源: Need help understanding Alpha Channels