2011-02-02 47 views
0

我正在为我正在进行的项目实施洪水填充算法。我正在使用它来进行正常的图像编辑。我对基本算法没有问题,但我想要更好看的填充。那里有什么样的模糊洪水填充算法?

在很多情况下,我的图像区域的区域大多都是一种颜色,但是它们的边界是稍微更亮或更暗的像素。我想知道一个“模糊”洪水填充算法,不会离开这些边界像素。我试图填补所有像素withn两个不同的,简单的,距离原点像素的指标:

  1. 曼哈顿距离上的所有3楼颜色组成:红,绿,蓝
  2. 最大的距离在颜色组件之间。

这些都没有办法诀窍,往往会离开边界,偶尔会填补邻近地区的视觉上不同但“密切”的颜色。

我不认为有一个神奇的子弹来解决我的问题,但我会有兴趣知道任何算法,我可能会尝试获得更好的结果,甚至在我可能会有用地寻找这样的算法。环顾网络,我找到了所谓的“模糊洪水填充平均移位算法”的参考,但我不确定这是甚至相同的事情。

+0

您是否尝试使用alpha'd边框,以便类似的像素不会更改为填充颜色,而是更改为其现有颜色,区域以前的颜色和填充颜色之间的加权平均值? – 2011-02-02 22:53:21

回答

0

使用的实际距离看起来很自然:d = SQRT(R^2 + G^2 + B^2)

然后定义用于指定从原始像素(在颜色空间)的最大距离的公差参数测试像素可以。如果它大于该值,则不要从该像素向外溢出。

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

0

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

0

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