【问题标题】:Difference between boundary fill and flood fill边界填充和洪水填充之间的区别
【发布时间】:2014-10-30 11:54:37
【问题描述】:

对于如何填充颜色区域或边界填充颜色区域,我感到很困惑。特别是当有多种颜色在起作用时。

假设我们有一个带有绿色边框和方格内部(黑色和白色)的多边形。哪种算法可以正确地用绿色填充该区域,为什么?

书中对洪水填充的定义:

有时我们想要填充(或重新着色)未在单一颜色边界内定义的区域。我们可以通过替换指定的内部颜色而不是搜索特定的边界颜色来缓解这些区域。这种填充过程称为洪水填充算法。

【问题讨论】:

  • 由于名称混淆(Henrik指出的文章根本没有解决),请对这两种算法进行描述,以便我们给出明智的答案。 (IMO、洪水和边界填充是完美的同义词,并且存在一种非常不同的多边形填充技术。)
  • @YvesDaoust 我很想给出描述,但是这本书也很模糊。因此我问
  • 那我不能问你的问题了。

标签: algorithm graphics


【解决方案1】:

您应该使用边界填充算法。 如果一直对区域进行从内到外的着色,直到遇到选定的边界颜色。 在您的情况下,边界颜色将为绿色。所以算法将从任何内部点开始,逐个像素地向外进行,直到遇到绿色(边界)。黑色或白色在这里无关紧要。

【讨论】:

    【解决方案2】:

    泛洪填充从多边形内的任意点开始,然后向各个方向展开填充像素。边界填充找到第一个边界,然后跟踪边界,蜿蜒进入内部。边界填充通常更复杂,但它是一种线性算法,不需要递归,而洪水填充可能会使用不可预测的内存量来完成,因为不知道会产生多少子填充。

    【讨论】:

      【解决方案3】:

      实际上你不应该在填充问题中看到多种颜色,而是两个类别:“is-a-border”颜色或颜色集和“is-not-a-border”(“inside”)颜色或一组颜色。这是一个简单的二分法,好像图像是二进制的。

      在您提到的情况下,边框为绿色,内部为黑色或白色(您也可以考虑非绿色)。

      【讨论】:

      • 那么我会使用哪种算法,为什么?
      • 洪水填充或边界填充,因为它们是相同的。