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

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

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

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

或者深度优先遍历

dfs和bfs都可以解决

概念

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

核心思想

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

实现方法

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

注意事项

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

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

  • 缺点:代码稍复杂。

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

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

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

应用场景

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

总结

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

相关推荐
兔兔爱学习兔兔爱学习2 小时前
创建Workforce
人工智能·算法
2301_794461572 小时前
力扣-有效三角形的个数
数据结构·算法·leetcode
Tiny番茄2 小时前
LeetCode 39. 组合总和 LeetCode 40.组合总和II LeetCode 131.分割回文串
算法·leetcode·职场和发展
zhangpz_2 小时前
【数据结构】树状数组
数据结构·算法·树状数组
悲伤小伞2 小时前
C++_数据结构_哈希表(hash)实现
数据结构·c++·笔记·算法·哈希算法·散列表
贺函不是涵3 小时前
【沉浸式求职学习day46】【华为5.7暑期机试题目讲解】
学习·算法·华为
珂朵莉MM3 小时前
2023 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛) 解题报告 | 珂学家
人工智能·算法·职场和发展·深度优先·图论
JANYI20184 小时前
C语言经典面试题及答案100道
linux·c语言·c++·算法·ubuntu·面试
机器学习之心HML4 小时前
分类预测 | Matlab实现PSO-RF粒子群算法优化随机森林多特征分类预测
算法·matlab·分类