2014-09-28 39 views
1

我有一个输入图像看起来像这样:给定背景和前景色,如何计算图像中它们之间的混合量?

input image

正如你所看到的,这是一个蓝色的色调,并在粉红色背景的恢复窗口图标。

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

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

output image

回答

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)); 
} 

如果你不知道,如果前景和背景颜色真的可以混合导致输入色彩,一定要夹紧阿尔法值之间说谎0.0和1.0。