在超级采样中合并RGBA像素

时间:2014-12-14 21:03:37

标签: image-processing alpha antialiasing

我正在尝试使用旋转网格超级采样(RGSS)进行抗锯齿,但我的子像素中有一个alpha通道。如何将它们合并到最终像素中?

通常情况下,人们只会平均RGB通道,但是使用alpha,这不太有用,例如:假设有4个RGBA像素,2 x(255,0,0,255)和2 x(0, 0,0,0);平均给出(127,0,0,127),这是一个半透明的暗红色,这是错误的 - 我们期望像(255,0,0,127)。

进行标准的alpha混合也不会产生好的结果,因为可能有两个不同颜色的像素,两者都有alpha = 255,因此应用的最后一个成为像素的颜色,忽略所有其他颜色。

我当前(即兴)方法返回上述示例的预期值,如下(伪代码):

merge(R[N], G[N], B[N], A[N])
  RR = GG = BB = AA = 0;
  for i in 1 .. N:
    RR += R[i]*A[i]
    GG += G[i]*A[i]
    BB += B[i]*A[i]
    AA += A[i]
  return {RR/AA, GG/AA, BB/AA, AA/N}

然而,我仍然会看到接近垂直/水平边界的锯齿状边缘。合并子像素的正确方法是什么,因为它们具有任意的alpha,并且在计算时不知道背景?超级采样不适合这个吗?如果没有,会是什么?

1 个答案:

答案 0 :(得分:0)

经过深思熟虑后,我得出结论,上述“即兴方法”实际上是正确的,遇到的锯齿状边缘问题是由于选定的子像素彼此太靠近。

我已经链接了我写的证据,证明上述解决方案等同于平均技术,但上述方法不需要已知的背景。

http://www.scribd.com/doc/250638206/Merging-RGBA-Pixels-in-Supersampling

PS:我会在这里发布一个简化版本的证明作为答案,但为了看起来正确我需要显示方程式,这需要我上传图像,所以我不会让我上传那些直到我有10个代表:(