OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
击中或击不中

上一教程: 更多形态学变换
下一教程: 使用形态学操作提取水平和垂直线

原始作者Lorena García
兼容性OpenCV >= 3.0

目标

在本教程中,您将学习如何通过使用击中或击不中变换(也称为命中和未命中变换)在二值图像中找到给定的配置或模式。此变换也是更高级的形态学操作(如细化或修剪)的基础。

我们将使用 OpenCV 函数 morphologyEx()

击中或击不中理论

形态学算子根据图像的形状处理图像。这些算子将一个或多个结构元素应用于输入图像以获得输出图像。两个基本的形态学操作是腐蚀膨胀。这两个操作的组合会生成高级形态学变换,例如开运算闭运算顶帽变换。要了解有关这些和其他基本形态学操作的更多信息,请参阅之前的教程 (腐蚀和膨胀) 和 (更多形态学变换)。

击中或击不中变换对于在二值图像中查找模式很有用。特别是,它会找到那些邻域与第一个结构元素 \(B_1\) 的形状匹配,同时不与第二个结构元素 \(B_2\) 的形状匹配的像素。从数学上讲,应用于图像 \(A\) 的运算可以表示如下

\[ A\circledast B = (A\ominus B_1) \cap (A^c\ominus B_2) \]

因此,击中或击不中运算包括三个步骤

  1. 用结构元素 \(B_1\) 腐蚀图像 \(A\)。
  2. 用结构元素 \(B_2\) 腐蚀图像 \(A\) 的补集(\(A^c\))。
  3. 步骤 1 和步骤 2 的 AND 结果。

结构元素 \(B_1\) 和 \(B_2\) 可以组合成单个元素 \(B\)。让我们看一个例子:

在这种情况下,我们正在寻找一种模式,其中中心像素属于背景,而北部、南部、东部和西部像素属于前景。邻域中的其余像素可以是任何类型,我们不关心它们。现在,让我们将此内核应用于输入图像

您可以看到该模式仅在图像中的一个位置找到。

代码

下面显示了与先前示例相对应的代码。

如您所见,使用函数 morphologyEx() 以及操作类型 MORPH_HITMISS 和选择的内核非常简单。

其他示例

在这里,您可以找到将不同的内核应用于之前使用的相同输入图像的输出结果

现在尝试您自己的模式!