有哪种模糊泛洪填充算法?

时间:2011-02-02 22:45:50

标签: algorithm graphics flood-fill

我正在为我正在进行的项目实施泛洪填充算法。我正在将它用于正常目的,图像编辑。我对基本算法没有任何问题,但我希望看起来更好看。

在许多情况下,我的图像区域将具有大部分为一种颜色的区域,但这些区域由稍微更浅或更暗的像素界定。我想知道一个“模糊”泛洪填充的算法,它不会留下这些边界像素。我试图用原始像素的两个不同的,简单的距离度量来填充所有像素:

  1. 所有3种颜色组件的曼哈顿距离:红色,绿色和蓝色
  2. 颜色分量之间的距离的最大值。
  3. 这些都没有做到这一点,经常留下边界,偶尔填充视觉上鲜明但“接近”颜色的邻近区域。

    我认为没有一个灵丹妙药来解决我的问题,但我有兴趣知道我可能尝试获得更好结果的任何算法,或者甚至我可能有用地寻找这样的算法。环顾网络后,我发现了一个名为“模糊洪水填充均值偏移算法”的东西,但我不确定这是不是一回事。

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

也许您可以尝试使用局部像素的质量而不是原点像素。你可以像各向异性扩散滤波器那样做一个效果。如果当前像素(填充中)与相邻像素之间的梯度足够低,则将邻居排入队列。

答案 2 :(得分:0)

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