我正在为图形库编写一个简单的框模糊。
该公式通过添加ARGB量然后除以模糊范围来得出像素范围的平均值。

例如模糊范围为3;

pixel1 FF FF 00 00 +
pixel2 FF 00 FF 00 +
pixel3 FF 00 00 FF
/ 3 =
result FF 55 55 55


这是正确的。
典型结果显示为;



但是,我很难提出一个公式来模糊具有Alpha透明度的图像。 />

您会看到黄色被黑色包围-因为红色和绿色被减小为0。结果实际上应该是这样;



所以; (pixel + pixel + pixel) / range的公式不适用于Alpha混合图像。

有人可以提供正确的公式吗?

谢谢!

评论

高斯模糊可能具有重复性

#1 楼

两个建议:如果您的数据来自要在标准监视器上显示的图像,则可能是sRGB(或者您隐含地假设是sRGB)格式。这意味着颜色分量不是线性的。理想情况下,您应该首先映射到线性颜色空间,进行过滤(例如模糊)操作,然后再映射回去。




显然不是很糟糕的方法。显然,使用sqrt()来映射回去。) br />

一旦在线性颜色空间中进行过滤,您要做的下一步就是将像素转换为预乘alpha格式(又称为“相关颜色”)。
基本上,给定8bpc {A,R,G,B}像素输入,产生{A,A * R / 255,A * G / 255,A * B / 255}。然后,您如上所述在所有四个通道上对该预乘数据进行平均,然后通过除以所得的alpha进行映射(如果A = 0,则选择RGB = 0)。

此应该会产生更好的结果。
有关更多信息,我建议您通读吉姆·布林(Jim Blinn)的“合成,第1部分:理论”。 br />更新:似乎我在
之前发布了类似的答案