OpenCV  4.10.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 及选择的内核一样简单。

其他范例

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

现在尝试你自己的图案!