Colors GIMP&x27;s层合成/混合方法

Colors GIMP&x27;s层合成/混合方法,colors,alpha,gimp,blending,compositing,Colors,Alpha,Gimp,Blending,Compositing,在我寻求将alpha能力添加到Matlab中的图像混合工具时,我遇到了一些障碍。除此之外,我一直在使用前景和背景alpha如何在输出颜色数据和输出alpha的合成中发挥作用作为参考 我最初的方法是简单地对“正常”混合模式使用Src-Over-composition,对其他模式使用Src-top-composition。与GIMP的输出相比,这产生了相似但不同的结果。输出alpha匹配,但RGB数据不同 具体来说,如果背景alpha为零,则前景对背景的颜色影响为零。在花了几个小时天真地浏览GIMP

在我寻求将alpha能力添加到Matlab中的图像混合工具时,我遇到了一些障碍。除此之外,我一直在使用前景和背景alpha如何在输出颜色数据和输出alpha的合成中发挥作用作为参考

我最初的方法是简单地对“正常”混合模式使用Src-Over-composition,对其他模式使用Src-top-composition。与GIMP的输出相比,这产生了相似但不同的结果。输出alpha匹配,但RGB数据不同

具体来说,如果背景alpha为零,则前景对背景的颜色影响为零。在花了几个小时天真地浏览GIMP 2.8.10源代码之后,我注意到一些让我困惑的事情

除非在导出过程中发生某些模式和一些我尚未在代码中收集到的辅助事件,否则该方法大致如下:

if ~normalmode
    FGalpha = min(FGalpha, BGalpha);  % << why this?
end

    FGalpha = FGalpha * mask * opacity;
    OUTalpha = BGalpha + (1 - BGalpha) * FGalpha;
    ratio = FGalpha / (OUTalpha + eps);
    OUT = OUT * ratio + BG * (1 - ratio);

if normalmode
    OUT = cat(3, OUT, OUTalpha);
else
    OUT = cat(3, OUT, BGalpha);
end

然后做一些代数,如果你想简化它

当人们在场并且有时间的时候,在gimp开发者邮件列表或IRC(IRC.gimp.org)上指出这个问题可以帮助回答剩下的问题。
As = Sa * (1 - Da);
Ad = Da * (1 - Sa);
Ab = Sa * Da;
Ra = As + Ad + Ab;   % output alpha
Rc = ( f(Sc,Dc)*Ab + Sc*As + Dc*Ad ) / Ra;