Sobel算子



Sobel算子与Prewitt算子非常相似。它也是一个导数模板,用于边缘检测。与Prewitt算子一样,Sobel算子也用于检测图像中的两种边缘。

  • 垂直方向
  • 水平方向

与Prewitt算子的区别

主要区别在于,在Sobel算子中,模板的系数不是固定的,可以根据需要调整,除非它们违反了导数模板的任何属性。

Sobel算子的垂直模板

以下是Sobel算子的垂直模板:

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

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

工作原理

当我们将此模板应用于图像时,它会突出显示垂直边缘。它就像一阶导数一样,计算边缘区域中像素强度的差异。

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

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

Sobel算子的水平模板

以下是Sobel算子的水平模板:

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

上述模板将查找水平方向的边缘,这是因为零列位于水平方向。当您将此模板与图像进行卷积时,它会在图像中突出显示水平边缘。唯一的区别是它在第一行和第三行的中心元素为2和-2。

工作原理?

此模板将突出显示图像中的水平边缘。它也基于上述模板的原理,计算特定边缘的像素强度差异。由于模板的中心行由零组成,因此它不包含图像中边缘的原始值,而是计算特定边缘的上下像素强度差异。从而增加了强度的突然变化,使边缘更清晰可见。

现在是时候看看这些模板的实际效果了

示例图像

以下是我们将一次应用上述两个模板的示例图片。

Sobel Operator

应用垂直模板后

将垂直模板应用于上述示例图像后,将获得以下图像。

Sobel Operator

应用水平模板后

将水平模板应用于上述示例图像后,将获得以下图像。

Sobel Operator

比较

您可以看到,在我们应用垂直模板的第一张图片中,所有垂直边缘都比原始图像更清晰。同样,在第二张图片中,我们应用了水平模板,结果所有水平边缘都清晰可见。

因此,您可以看到我们可以检测图像中的水平和垂直边缘。此外,如果您将Sobel算子的结果与Prewitt算子的结果进行比较,您会发现Sobel算子找到的边缘更多,或者使边缘比Prewitt算子更清晰可见。

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

对模板应用更大的权重

现在我们还可以看到,如果我们对模板应用更大的权重,它将为我们获得更多的边缘。如教程开头所述,Sobel算子没有固定的系数,因此这里还有另一个加权算子:

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

如果您将此模板的结果与Prewitt垂直模板的结果进行比较,很明显,此模板将比Prewitt模板产生更多的边缘,这仅仅是因为我们在模板中分配了更大的权重。

广告