【问题标题】:What sort of fuzzy flood fill algorithms are there?有哪些模糊洪水填充算法?
【发布时间】:2011-02-02 22:45:50
【问题描述】:

我正在为我目前正在进行的项目实施洪水填充算法。我将它用于正常目的,图像编辑。我对基本算法没有问题,但我想要更好看的填充。

在许多情况下,我的图像区域中的区域大多是一种颜色,但其边界是稍亮或稍暗的像素。我想知道一种不会留下这些边界像素的“模糊”洪水填充算法。我试图用原始像素的两个不同的、简单的距离度量来填充所有像素:

  1. 所有 3 个颜色分量的曼哈顿距离:红色、绿色和蓝色
  2. 颜色分量之间的最大距离。

这些都不能解决问题,通常会留下边界,偶尔会用视觉上不同但“接近”的颜色填充相邻区域。

我认为没有什么灵丹妙药可以解决我的问题,但我有兴趣了解我可能会尝试获得更好结果的任何算法,或者甚至是我可能有用地寻找此类算法的地方。环顾网络,我发现了一种称为“模糊洪水填充均值偏移算法”的参考,但我不确定这是否是同一回事。

【问题讨论】:

  • 您是否尝试使用 alpha 边框,以便相似的像素不会更改为填充颜色,而是更改为现有颜色、区域先前颜色和填充颜​​色?
  • 听起来你想在边界上做一些抗锯齿。我怀疑 RGB 不是合适的工作空间,因为它会导致一些非常奇怪的效果。您可能会考虑改用 HSV。
  • Peter Taylor - 我没有想到这个特殊的策略,但我可能想尝试一下。谢谢你。 Jim Mischel - 我可以将它翻译成 HSV,但我不确定在那之后我会做什么。希望这会减少相邻区域的填充,但即使有各种距离指标,我也不确定这是否有助于消除我拥有的大量 alpha-d 边框(我在 RGB 0xFFFFFF 到 0x808080 到 0x000000 的 3 个像素左右移动,填充后留下丑陋的灰色边框)。我不能忽略这么大的价值差异。不过感谢您的建议。

标签: algorithm graphics flood-fill


【解决方案1】:

使用实际距离似乎很自然:D = Sqrt(R^2 + G^2 + B^2)

然后定义一个容差参数,指定测试像素与原始像素(在色彩空间中)的最大距离。如果大于该值,则不要从该像素向外泛滥。

将容差从 0 调整为 Sqrt(255^2 + 255^2 + 255^2),直到看到所需的效果。

【讨论】:

    【解决方案2】:

    也许您可以尝试使用本地像素而不是原始像素的质量。你可以做一个很像各向异性扩散过滤器的效果。如果当前像素(在填充中)和相邻像素之间的梯度足够低,则将相邻像素排入队列。

    【讨论】:

      【解决方案3】:

      您不应使用单个数字设置容差,而应使用范围设置容差。比如说,从 20% 到 50% 意味着当色差为 20% 时,您会完全改变这个像素的颜色。当它大于 50% 时,您不会填充此像素。当差异在 20% 到 50% 的范围内时,您将旧颜色与新颜色混合,比例为 (d-t_min)/(t_max-t_min),其中 d 是色差,t_max 和 t_min 是您的容差范围(以 0...1 表示)。 我从未见过这样的算法被实现过;也许我只是发明了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        相关资源
        最近更新 更多