【问题标题】:How to eliminate halo on blurred edge?如何消除模糊边缘上的光晕?
【发布时间】:2019-10-19 03:38:42
【问题描述】:

所以我正在研究一个执行模糊的过滤器。

当图像具有 Alpha 通道时,它会不正确地模糊。这是因为它与位于 alpha=0 部分的彩色像素模糊。

我创建了一个示例来说明。在左上角的图像中,我们有原始图像。它有一个 alpha 通道,但我已禁用它。

在右上角的图像中,我使用 Alpha 通道导入它。它将 Alpha 通道部分中的像素显示为黑色。

在左下角的图像中,我执行了模糊算法。您可以看到边缘有一个明亮的光晕,因为它们在第一张图像中显示的浅色背景像素上变得模糊,即使 alpha 通道在那里。

在右下角的图像中,我已将其与背景合成,以便您可以看到合成不正确。

我读到这可能是一个预乘问题。我已将位于 alpha=0 部分的 RGB 像素预乘以黑色,但它仍然不正确。当我合成那个版本时,你可以看到它产生了一个暗光晕,而不是一个明亮的光晕。

我似乎需要知道目标图像的 RGB 值,但这是不可能知道的,因为用户会确定这一点。

那我做错了什么?如何调整我的算法,使其正确模糊边缘而不是背景较亮的像素,从而产生明亮的光晕?

感谢您对此提供的任何帮助,因为我真的被困住了!

【问题讨论】:

  • 你到底想达到什么目的?清晰或模糊背景上的模糊前景?

标签: graphics transparency alpha blur premultiplied-alpha


【解决方案1】:

模糊通过对目标像素的某个邻域中的像素进行平均来工作。当您到达前景对象的边界时,除了从背景中提取像素外,该算法别无选择。

如果您不想与背景像素混合,则必须修改模糊算法,使其仅使用前景像素,即为任何背景像素分配零权重。

无论如何,这样做会稍微降低边缘的模糊量。没有完美的解决方案。

【讨论】:

  • 您好伊夫;感谢您的回复。我在帖子中提到,我尝试在接近 alpha=0 区域时消除 RGB 颜色。我可以通过对该像素的 alpha 进行采样,然后将 RGB 值乘以它来做到这一点。比如:红色=红色*(alpha/255)。但是,这会产生黑色光晕,所以这也是不正确的。有一种正确的方法可以做到这一点,因为 After Effects 中的其他模糊效果做同样的事情并正确合成。
猜你喜欢
  • 2021-04-02
  • 2015-02-24
  • 2017-03-24
  • 1970-01-01
  • 2016-08-26
  • 2021-04-08
  • 2016-10-07
  • 2011-03-17
  • 1970-01-01
相关资源
最近更新 更多