zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Opencv每日函数 图像分割模块 watershed分水岭算法

Opencv算法模块 函数 图像 每日 分割
2023-09-14 09:01:35 时间

​一、分水岭理论概述

        任何灰度图像都可以看作是一个地形表面,其中高强度表示峰和丘陵,而低强度表示山谷。您开始用不同颜色的水(标签)填充每个孤立的山谷(局部最小值)。随着水位的上升,根据附近的山峰(梯度),来自不同山谷的水,显然具有不同的颜色将开始合并。为避免这种情况,您可以在水合并的位置建立障碍。你继续注水和建造障碍物,直到所有的山峰都被淹没。然后,您创建的障碍会为您提供分割结果。这就是分水岭背后的“哲学”。

        但是由于图像中的噪声或任何其他不规则性,这种方法会给您带来过度分割的结果。因此OpenCV实现了一个基于标记的分水岭算法,您可以在其中指定要合并哪些谷点,哪些不合并。它是一种交互式图像分割。我们所做的是为我们所知道的对象赋予不同的标签。用一种颜色(或强度)标记我们确定为前景或对象的区域,用另一种颜色标记我们确定为背景或非对象的区域,最后标记我们不确定的区域,用 0 标记它。那是我们的标记。然后应用分水岭算法。然后我们的标记将使用我们提供的标签进行更新,并且对象的边界将具有 -1 的值。

        在将图像传递给函数之前,您必须用正 (>0) 索引粗略地勾勒出图像标记中所需的区域。因此,每个区域都表示为一个或多个具有像素值 1、2、3 等的连通分量。可以使用findContours和drawContours从二进制掩码中检索此类标记(请参阅 watershed.cpp 演示)。标记是未来图像区域的“种子”。标记中的所有其他像素,其与