OpenCV学习 基础图像操纵(十七):泛洪与分水岭算法

打印 上一主题 下一主题

主题 789|帖子 789|积分 2367

原理

泛洪填充算法和分水岭算法是图像处置惩罚中的两种紧张算法,主要用于区域分割,但它们的原理和应用场景有所不同,但是他们的基础头脑都是基于区域迭代实现的区域之间的分别
泛洪算法

泛洪填充算法(Flood Fill)是一种经典的图像处置惩罚算法,用于确定和标志与给定点连接的区域,通常在图像填充、分割、边界检测等方面应用广泛。为了更直观地理解泛洪填充算法,我们可以通过一系列生动的图像和步骤来先容其工作原理。
假设我们有一个二维图像,每个像素可以有不同的颜色或灰度值。泛洪填充算法的目标是从某个起始像素开始,填充全部与其相连且具有雷同颜色的像素。常见的应用包括图像编辑中的填充工具(如油漆桶工具)和迷宫求解等。
算法流程

以下是泛洪填充算法的基本步骤,共同图像说明:

  • 选择起始点和目标颜色

    • 选择图像中的一个起始像素点(如鼠标点击的位置),记作 (x, y)。
    • 确定要填充的目标颜色。

  • 初始化队列

    • 将起始点 (x, y) 加入队列。

  • 处置惩罚队列
    当队列不为空时,重复以下步骤:

    • 从队列中取出一个像素点 (cx, cy)。
    • 假如 (cx, cy) 的颜色等于目标颜色,则举行填充。
    • 将 (cx, cy) 的四个邻居(上、下、左、右)加入队列(假如这些邻居还没有被处置惩罚过且颜色等于目标颜色)。


分水岭算法

分水岭算法是一种基于形态学和拓扑学的图像分割技术。它将图像视为一个拓扑地形,通过标志图像的不同区域(例如山脉和盆地)举行分割。分水岭算法的基本头脑是通过模拟雨水从山顶流向盆地的过程,确定图像中不同区域的边界。
分水岭迭代过程:

  • 把梯度图像中的全部像素按照灰度值举行分类,并设定一个测地距离阈值。
  • 找到灰度值最小的像素点(默认标志为灰度值最低点),让threshold从最小值开始增长,这些点为起始点。
  • 水平面在增长的过程中,会碰到周围的邻域像素,丈量这些像素到起始点(灰度值最低点)的测地距离,假如小于设定阈值,则将这些像素淹没,否则在这些像素上设置大坝,如许就对这些邻域像素举行了分类。
  • 随着水平面越来越高,会设置更多更高的大坝,直到灰度值的最大值,全部区域都在分水岭线上相遇,这些大坝就对整个图像像素的举行了分区。
实际应用时常联合其他预处置惩罚,来实现前后景的分割:

算法流程


  • 梯度盘算: 起首盘算图像的梯度,梯度可以使用 Sobel 算子或其他方法盘算。梯度图像反映了图像中像素值变革的幅度。

    此中,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表