FloodFill算法:洪水般的图像处理艺术
简单来说就是一场洪水(雨水)会把低洼的地方淹没
也就是一道题,你要找出所有为负数的连通块,对角线不能连通,所以上述图有两个
其实也很简单,就是你扫描的过程,发现一个负数,就以这个负数为起点,来一次宽度遍历
或者深度优先遍历
dfs和bfs都可以解决
概念
Flood Fill(泛洪填充)算法是一种经典的图像处理算法,用于将连通区域内的所有像素点替换为指定颜色。它也被称为 “种子填充算法”,在游戏、图形处理、计算机视觉等领域有广泛应用。以下是关于 Flood Fill 算法的详细介绍:
核心思想
从一个起始点(种子点)开始,递归或迭代地将与其连通且颜色相同的所有像素点替换为目标颜色。连通性通常分为4 方向(上、下、左、右)或8 方向(加上对角线)。
实现方法
1. 递归 DFS 实现(最直观)
- 思路:从种子点开始,递归填充 4/8 方向的相邻像素。
- 优点:代码简洁。
- 缺点:可能导致栈溢出(递归深度过大时)。
2. 迭代 BFS 实现(更安全)
注意事项
- 思路:使用队列存储待处理的像素点,避免递归栈溢出。
- 优点:避免栈溢出,适合大规模数据。
-
缺点:代码稍复杂。
- 边界检查:确保不越界。
- 避免重复处理:使用访问标记或直接修改原图像。
- 性能优化:对于大图像,优先使用 BFS 或迭代 DFS。
-
应用场景
- 图像处理:填充选区、消除背景。
- 游戏开发:扫雷游戏中自动展开空白区域、地图涂色。
- 路径规划:识别连通区域、标记障碍物。
- 计算机视觉:分割图像中的对象。
总结
Flood Fill 是一种简单但强大的算法,核心在于连通区域的遍历。递归 DFS 适合小规模问题,而迭代 BFS 更安全。实际应用中需注意边界处理和性能优化。