索贝尔算子


Sobel 算子与 Prewitt 算子非常相似。它也是一个衍生掩模,用于边缘检测。与 Prewitt 算子一样,sobel 算子也用于检测图像中的两种边缘:

  • 垂直方向
  • 水平方向

与 Prewitt 算子的区别

主要区别在于,在索贝尔算子中,掩模的系数不是固定的,可以根据我们的要求进行调整,除非它们不违反导数掩模的任何性质。

以下是Sobel算子的垂直Mask:

-1 0 1
-2 0 2
-1 0 1

该掩模的工作原理与 Prewitt 算子垂直掩模完全相同。只有一个区别是第一列和第三列的中心有“2”和“-2”值。当应用于图像时,此蒙版将突出显示垂直边缘。

怎么运行的

当我们在图像上应用此蒙版时,它会突出垂直边缘。它的工作原理就像一阶导数一样,计算边缘区域中像素强度的差异。

由于中心列为零,因此它不包括图像的原始值,而是计算该边缘周围左右像素值的差值。第一列和第三列的中心值分别为 2 和 -2。

这为边缘区域周围的像素值赋予了更多的权重年龄。这增加了边缘强度,并且与原始图像相比得到增强。

以下是 Sobel 算子的水平 Mask

-1 -2 -1
0 0 0
1 2 1

上面的掩码会在水平方向找到边缘,这是因为零列在水平方向。当您将此蒙版卷积到图像上时,它会突出图像中的水平边缘。它之间唯一的区别是它有 2 和 -2 作为第一行和第三行的中心元素。

怎么运行的

该蒙版将突出图像中的水平边缘。它也按照上述掩模的原理工作,并计算特定边缘的像素强度之间的差异。由于掩模的中心行由零组成,因此它不包括图像中边缘的原始值,而是计算特定边缘的上方和下方像素强度的差异。从而增加强度的突然变化并使边缘更加明显。

现在是时候看看这些面具的实际效果了:

示例图片

以下是一张示例图片,我们将在其中一次应用上述两个蒙版。

索贝尔算子

应用垂直蒙版后

在上面的样本图像上应用垂直掩模后,将获得以下图像。

索贝尔算子

应用水平蒙版后

在上面的示例图像上应用水平掩模后,将获得以下图像

索贝尔算子

比较

正如您所看到的,在我们应用垂直蒙版的第一张图片中,所有垂直边缘都比原始图像更明显。同样,在第二张图片中,我们应用了水平蒙版,结果所有水平边缘都是可见的。

通过这种方式,您可以看到我们可以检测图像中的水平和垂直边缘。另外,如果将 sobel 算子的结果与 Prewitt 算子进行比较,您会发现与 Prewitt 算子相比,sobel 算子找到了更多边缘或使边缘更明显。

这是因为在索贝尔算子中,我们为边缘周围的像素强度分配了更多的权重。

对面罩施加更多重量

现在我们还可以看到,如果我们对蒙版施加更多的权重,它就会为我们获得更多的边缘。另外,正如教程开头提到的,sobel 算子没有固定系数,所以这里是另一个加权算子

-1 0 1
-5 0 5
-1 0 1

如果您可以将此掩模的结果与 Prewitt 垂直掩模的结果进行比较,很明显,与 Prewitt 掩模相比,该掩模将给出更多边缘,因为我们在掩模中分配了更多权重。