FloodFill算法:洪水般的图像处理艺术

简单来说就是一场洪水(雨水)会把低洼的地方淹没

也就是一道题,你要找出所有为负数的连通块,对角线不能连通,所以上述图有两个

其实也很简单,就是你扫描的过程,发现一个负数,就以这个负数为起点,来一次宽度遍历

或者深度优先遍历

dfs和bfs都可以解决

概念

Flood Fill(泛洪填充)算法是一种经典的图像处理算法,用于将连通区域内的所有像素点替换为指定颜色。它也被称为 "种子填充算法",在游戏、图形处理、计算机视觉等领域有广泛应用。以下是关于 Flood Fill 算法的详细介绍:

核心思想

从一个起始点(种子点)开始,递归或迭代地将与其连通且颜色相同的所有像素点替换为目标颜色。连通性通常分为4 方向 (上、下、左、右)或8 方向(加上对角线)。

实现方法

1. 递归 DFS 实现(最直观)
  • 思路:从种子点开始,递归填充 4/8 方向的相邻像素。
  • 优点:代码简洁。
  • 缺点:可能导致栈溢出(递归深度过大时)。
2. 迭代 BFS 实现(更安全)

注意事项

  • 思路:使用队列存储待处理的像素点,避免递归栈溢出。

  • 优点:避免栈溢出,适合大规模数据。

  • 缺点:代码稍复杂。

  • 边界检查:确保不越界。

  • 避免重复处理:使用访问标记或直接修改原图像。

  • 性能优化:对于大图像,优先使用 BFS 或迭代 DFS。

应用场景

  • 图像处理:填充选区、消除背景。
  • 游戏开发:扫雷游戏中自动展开空白区域、地图涂色。
  • 路径规划:识别连通区域、标记障碍物。
  • 计算机视觉:分割图像中的对象。

总结

Flood Fill 是一种简单但强大的算法,核心在于连通区域的遍历。递归 DFS 适合小规模问题,而迭代 BFS 更安全。实际应用中需注意边界处理和性能优化。

相关推荐
找不到、了1 小时前
Java排序算法之<选择排序>
数据结构·算法·排序算法
是店小二呀1 小时前
【动态规划-斐波那契数列模型】理解动态规划:斐波那契数列的递推模型
算法·动态规划·代理模式
小徐不徐说2 小时前
动态规划:从入门到精通
数据结构·c++·算法·leetcode·动态规划·代理模式
guguhaohao2 小时前
排序算法,咕咕咕
数据结构·算法·排序算法
小新学习屋2 小时前
《剑指offer》-数据结构篇-树
数据结构·算法·leetcode
好心的小明2 小时前
【深度之眼机器学习笔记】04-01-决策树简介、熵,04-02-条件熵及计算举例,04-03-信息增益、ID3算法
笔记·算法·决策树
恣艺4 小时前
LeetCode 1074:元素和为目标值的子矩阵数量
算法·leetcode·矩阵
queenlll5 小时前
P1064 [NOIP 2006 提高组] 金明的预算方案 题解
算法
WildBlue5 小时前
前端算法秘籍:BFS 算法的 JS 魔法之旅🤩
前端·javascript·算法
设计师小聂!6 小时前
力扣---------238. 除自身以外数组的乘积
数据结构·算法·leetcode