问题标签 [flood-fill]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 区域增长算法
嘿大家。我真的很难弄清楚这个逻辑,并希望你能帮助我。在我继续之前,我只想让你知道我是业余程序员和初学者,没有任何形式的正式计算机科学培训,所以请多多包涵。:D 另外,我正在使用 Python,但我可以使用 Java 或类似的东西。
任何人,我都希望实现一个区域增长,以便在基本的 Drawbot 中使用。这是一篇关于区域增长的文章:http ://en.wikipedia.org/wiki/Region_growth
按照我的设想,绘制所基于的图像将满足以下标准:
在任意颜色深度下,图像的大小最多为 3x3 英寸
图像将是白色背景上的黑色连续形状
该形状可以位于背景上的任何位置。
我考虑了以下解决此问题的方法。虽然有些工作在一定程度上,但每一个在性能或可行性方面都有一些相当大的缺陷(至少它们对我来说似乎不可行)。此外,因为这是一个 Drawbot,所以需要用一条连续的线来完成。然而,这并不意味着我不能回溯,它只是消除了多个起点(种子)的可能性。
考虑的方法:
随机游走:
用随机游走解决这个问题是我的第一直觉。我想,完成此操作的随机游走程序看起来像这样:
伪蟒蛇...
虽然我认为这是可行的,但在我看来这是非常无效的并且不能保证好的结果,但是为了实际完成某些事情,我可能最终会尝试这个......我在伪代码中的逻辑是否甚至模糊正确?
扫地模式:
这种方法对我来说似乎是最容易实现的。我的想法是我可以在形状的一个极端选择一个起点(例如最左边的最低点)。从那里它会向右画,只在 x 轴上移动,直到它碰到一个白色像素。从这里它会在 y 轴上向上移动一个像素,然后在 x 轴上向左移动直到它到达一个白色像素。如果正上方的像素恰好是白色的,则在 x 轴上回溯,直到找到其上方的黑色像素。
经进一步检查,这种方法存在一些重大缺陷。当面对这样的形状时:
结果将如下所示:
即使我告诉它在一段时间后开始扫地,中腿仍然会被忽略。
4/8 连通社区:
http://en.wikipedia.org/wiki/8-connected_neighborhood
这种方法在我看来是最强大和最有效的,但在这一点上我无法完全弄清楚,我也想不出如何在不留下一些被忽视的区域的情况下实现它
在每个单元格中,我都会查看相邻的黑色单元格,设计一些方法来排列我应该首先访问哪个单元格,访问所有单元格,然后重复该过程直到所有单元格都被覆盖。
我在这里可以看到的问题首先是处理完成此任务所需的数据结构,并且还只是弄清楚其背后的逻辑。
这些是我能想到的最好的解决方案。感谢您花时间阅读本文,我意识到它很长,但我认为我应该尽可能明确。任何和所有的建议将不胜感激......谢谢!
编辑:
我还研究了迷宫生成和求解算法,但不确定如何在这里实现。我对迷宫求解算法的理解是,它们依赖于迷宫的通道宽度相等。我当然可能是错的。
actionscript-3 - 矢量图形洪水填充算法?
我正在开发一个简单的绘图应用程序,我需要一种算法来进行洪水填充。
用户工作流程将如下所示(类似于 Flash CS,只是更简单):
- 用户在工作区上绘制直线。这些被视为矢量,并且可以在绘制后选择和移动。
- 用户选择填充工具,然后单击绘图区域。如果该区域被各个方向的线包围,则对该区域应用填充。
如果在应用填充后移动线条,则填充区域会相应更改。
任何人都有一个好主意,如何实现这样的算法?主要任务基本上是确定一个点周围的线段。(并以某种方式存储此信息,以防线条被移动)
编辑:解释图像:(画布中当然可以有其他线条,这与填充算法无关)
EDIT2:更困难的情况:
EDIT3:我找到了一种用孔填充多边形的方法 http://alienryderflex.com/polygon_fill/,现在主要问题是,我如何找到我的多边形?
iphone - iPad 中的洪水填充太慢了
我在 iPad 上为我的一个着色应用程序使用洪水填充。
该应用程序基本上在图像的黑线内填充颜色,我可以毫无问题地做到这一点,但它太慢了。
我首先使用递归洪水填充,它的性能是最差的(由于堆栈溢出),然后我能够使用堆栈将其转换为迭代,并使用以下代码,但这太慢了
有人会建议一种在 iPad 设备上效果最好的替代方法吗?
c++ - c++ Floodfill算法最终错误
我的floodfilling算法快完成了,但是某处有一个小错误,我花了大约3个小时调试,但我似乎找不到它!
注意:在阅读时,我使用 0 到 15 的数字来定义墙壁
1 = 顶部 2 = 右侧 4 = 底部 8 = 左侧(所以 13 意味着顶部/底部/左侧墙壁在那里)
我的程序:
它读取字段数以计算最大的房间(因此这里下面的所有内容都是一个循环,会针对字段数重复)。
然后它得到房间的尺寸
现在在类字段中,它创建了一个对象数组(单元格),用于存储周围的墙壁(从左到右向下向上),以及一个低于 16 的值
现在这是我认为问题所在,通过 std::cin 读取值
然后当所有内容都读入时,它会扫描空(0),然后创建一个房间,并检查它周围的可用空间(使用墙壁检查)
最后它返回最大值,我们就完成了。
我使用的输入:
所以发生的事情是某处,在墙上检查,或者创建一个对象 Cell 出了问题(我认为)
这是我的脚本,很抱歉不得不问这样愚蠢的问题!
提前致谢
c++ - 用于填充二进制图像的 C++ 算法
我正在尝试模拟一个 matlab 函数“imfill”,用于填充二进制图像(1 和零的二维矩阵)。
我想在矩阵中指定一个起点,然后像 imfill 的 4 个连接版本一样进行填充。
这是否已经存在于 C++ 世界的某个地方?如果不是,那么实现这一点的最有效方法是什么?
delphi - Delphi - 渐变填充?
有没有办法在 D2007 中使用 Canvas.FloodFill 用渐变颜色填充自定义形状的对象。从白色变为边框颜色。我无法谷歌出任何有用的东西。
或者只是用渐变颜色填充自定义形状对象的任何其他方式?
谢谢你。
jquery - jQuery洪水填充算法
我将如何开始使用 jQuery 为表格单元格执行填充算法?
当前,当用户单击表格单元格时,如果该单元格为空,则其相邻单元格将被覆盖。我发现让它工作的一种方法是重复每个相邻方块的代码(我已经注释掉这部分代码),然后重复代码,重复代码.....尽管它变得没有响应.
我正在尝试用 jQuery 制作一个扫雷游戏,有人向我提到了一种洪水填充算法,尽管我不确定如何实现这一点。
graphics - 考虑 alpha 而不在抗锯齿线周围留下边缘的填充算法?
我已经实现了一个典型的洪水填充算法,当我使用 ARGB 组件之间的欧几里德距离来比较颜色时,它在使用纯色时按预期工作。
我的问题是,如果您在透明背景上绘制抗锯齿红线之类的东西,我的泛光填充算法将不会填充大多数半透明像素,从而在对象周围留下条纹。特别是对于这个例子,线条的中心是纯红色(即 ARGB 格式的 (255, 255, 0, 0)),线条的边缘也是纯红色,但这些像素的 alpha 范围低至 1% alpha (即 (1, 255, 0, 0))。一般来说,我希望能够绘制一个抗锯齿的圆形轮廓,在中心填充填充而不让它留下边缘。
我使用什么函数来比较颜色和/或如何调整泛光填充算法,以便不会在对象周围留下这样的边缘?
我试过告诉算法,如果它的 alpha <90%,总是填充一个像素,这有时看起来不错,但它在填充微弱的线条时过于激进。
编辑:为了详细说明 0 - 5 代表红色像素 0、20、40、60、80 和 100% alpha 的情况,抗锯齿红线的图像可能如下所示:
0 0 0 0 0 0 0
0 0 0 3 0 0 0
0 0 3 5 3 0 0
0 0 3 5 3 0 0
0 0 3 5 3 0 0
0 0 0 3 0 0 0
0 0 0 0 0 0 0
我当前在左上角填充红色的洪水填充算法会将所有 0 替换为 5。剩余的 3 会在线周围形成一个难看的光环。
java - 图像填充后颜色不同
我一直在玩我在 Stack Overflow 上找到的图像泛洪填充。
我认为代码不是问题。虽然如果你有一个更好的,我会很高兴看到(或者如果你知道一个有这种图像处理类型的库,那就更好了)。
我的问题是,在我对这张图片运行算法之后,这个人的头盔不是绿色的,而是浅灰色的。
我已经在 Paint 中创建的一个愚蠢的例子上尝试过它,它工作正常。因此,我认为一定有一些图像设置或类似的东西会改变我在算法中设置的 rgb 值。
您对代码中应该设置的内容有什么建议(请参见下文)?
这是我在测试中使用的图像。.
c++ - Flood filling of 3-dimensional polygon
here is a problem for you ;)
I have a 3-dimensional array filled with 1s and 0s. The 1s represent 3 dimensional complex polygons ( not simple polygons ). Only the boundaries of the polygons have the value 1, the inside is filled with 0s. Now here is the problem:
I need a fast algorithm to flood-fill these polygons with 1s. The arrays usually have a dimension of approx. 512x512x100.
Thanks in advance!
Here is an example in 2d:
0000111110000
0000100010000
0000100010000
0000111110000
should result in
0000111110000
0000111110000
0000111110000
0000111110000
is this the correct 3 dimensional solution for @Mikolas algorithm?
}
Best regards,
stef