Sobel 算子
Sobel 算子与 Prewitt 算子非常相似。它也是一个导数掩码,用于边缘检测。与 Prewitt 算子一样,Sobel 算子也用于检测图像中的两种边缘:
- 垂直方向
- 水平方向
与 Prewitt 算子的区别
主要区别在于,在 Sobel 算子中,掩码的系数不是固定的,可以根据我们的要求进行调整,除非它们不违反导数掩码的任何属性。
以下是 Sobel 算子的垂直掩码:
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
此蒙版的工作原理与 Prewitt 算子垂直蒙版完全相同。只有一个区别,即它在第一列和第三列的中心具有"2"和"-2"值。当应用于图像时,此蒙版将突出显示垂直边缘。
工作原理
当我们将此蒙版应用于图像时,它会突出显示垂直边缘。它的工作方式与一阶导数相同,并计算边缘区域中像素强度的差异。
由于中心列为零,因此它不包括图像的原始值,而是计算该边缘周围左右像素值的差异。此外,第一列和第三列的中心值分别为 2 和 -2。
这为边缘区域周围的像素值赋予了更大的权重。这会增加边缘强度,与原始图像相比,边缘强度有所增强。
以下是 Sobel 算子的水平蒙版
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |
上面的蒙版将在水平方向上找到边缘,这是因为零列在水平方向上。当您将此蒙版卷积到图像上时,它将在图像中突出水平边缘。它们之间的唯一区别是第一行和第三行的中心元素分别为 2 和 -2。
工作原理
此蒙版将突出图像中的水平边缘。它也按照上述蒙版的原理工作,并计算特定边缘的像素强度之间的差异。由于蒙版的中心行由零组成,因此它不包括图像中边缘的原始值,而是计算特定边缘的上下像素强度之间的差异。从而增加了强度的突然变化并使边缘更加明显。
现在是时候看看这些蒙版的作用了:
示例图像
以下是一张示例图片,我们将一次应用上述两个蒙版。

应用垂直遮罩后
对上述示例图像应用垂直遮罩后,将获得以下图像。

应用水平遮罩后
对上述示例图像应用水平遮罩后,将获得以下图像

比较
正如您所见,在我们应用垂直遮罩的第一张图片中,所有垂直边缘都比原始图像更清晰可见。同样,在第二张图片中,我们应用了水平蒙版,结果所有水平边缘都可见。
因此,通过这种方式,您可以看到我们可以从图像中检测水平和垂直边缘。此外,如果您将 Sobel 算子的结果与 Prewitt 算子进行比较,您会发现与 Prewitt 算子相比,Sobel 算子可以找到更多边缘或使边缘更明显。
这是因为在 Sobel 算子中,我们为边缘周围的像素强度分配了更多权重。
对蒙版应用更多权重
现在我们还可以看到,如果我们对蒙版应用更多权重,它将为我们获得更多边缘。此外,正如本教程开头所述,Sobel 算子中没有固定系数,因此这里是另一个加权算子
-1 | 0 | 1 |
-5 | 0 | 5 |
-1 | 0 | 1 |
如果您可以将此蒙版的结果与 Prewitt 垂直蒙版的结果进行比较,那么很明显,与 Prewitt 蒙版相比,此蒙版将产生更多边缘,因为我们在蒙版中分配了更多权重。