给定背景和前景色,如何计算图像中它们之间的混合量?

时间:2014-09-28 15:43:10

标签: image-processing colors image-manipulation

我的输入图像如下所示:

input image

如您所见,它是一个恢复窗口图标,蓝色色调,背景为粉红色。

有些像素是我想要计算的两种颜色的混合,但不知道如何。给出了100%背景和100%前景色。

最后,我想创建一个alpha位图,其中每个像素的RGB量是前景色RGB,但alpha通道是混合量:

output image

1 个答案:

答案 0 :(得分:0)

math.stackexchange与一些数学家讨论后,我找到了答案(我自己)。

请阅读我的回答there了解其背后的逻辑;在C#中,代码如下:

private static double GetMixAmount(Color fore, Color back, Color input)
{
    double lengthForeToBack = GetLengthBetween3DVectors(fore, back);
    double lengthForeToInput = GetLengthBetween3DVectors(fore, input);
    return 1 / (lengthForeToBack / lengthForeToInput);
}

private static double GetLengthBetween3DVectors(Color a, Color b)
{
    // Typical length between two 3-dimensional points - simply handle RGB as XYZ!
    return Math.Sqrt(
        Math.Pow(a.R - b.R, 2) + Math.Pow(a.G - b.G, 2) + Math.Pow(a.B - b.B, 2));
}

如果您不知道前景色和背景色是否真的可以混合以产生输入色,请确保将Alpha值钳位在0.0到1.0之间。