图像中的边缘代表像素强度有明显变化。试想一个深色物体与浅色背景之间的界线,那条界线就是边缘。找出这些边缘是了解图像构成的重要一步。但是,我们如何从数学上识别这些突然的变化呢?Sobel算子是一种常用且非常重要的方法,它通过计算每个像素点的图像强度梯度来实现其功能。理解图像梯度什么是图像梯度?简单来说,梯度测量的是图像中特定位置像素强度变化的快慢程度。梯度幅度大意味着强度变化快,这通常表明存在边缘。梯度幅度小意味着强度相对稳定,就像在颜色均匀区域的中间那样。梯度包含两个组成部分:水平方向(x方向)上的变化: 当你从左到右移动时,像素值变化有多快?垂直方向(y方向)上的变化: 当你从上到下移动时,像素值变化有多快?Sobel算子提供了一种方法,使用称为核或滤波器的小型数学工具来近似这些变化。Sobel核Sobel算子使用两个3x3的核。一个核检测水平方向的变化($G_x$),另一个检测垂直方向的变化($G_y$)。它们看起来是这样的:用于水平变化的核($K_x$):-1 0 +1 -2 0 +2 -1 0 +1注意这个核如何突出左右列之间的差异。中间列为零,从而在水平计算中忽略了中心像素正上方和正下方的像素。与顶部和底部行相比,中间行(-2, 0, +2)的权重更大。用于垂直变化的核($K_y$):-1 -2 -1 0 0 0 +1 +2 +1类似地,这个核突出底部和顶部行之间的差异,在垂直计算中忽略中心像素正左和正右的像素。应用核(卷积)为了计算特定像素的梯度,我们使用一个称为卷积的过程。想象将$K_x$核的中心放在原始图像中的该像素上方。然后,你将核的值乘以被核覆盖的图像区域中对应的下方像素强度。最后,将所有这些乘积相加。这个和就是该中心像素的近似水平梯度($G_x$)。你对图像中的每个像素重复此过程,使用$K_x$核来获得水平梯度图。然后,你再次进行整个相同的过程,但这次使用$K_y$核,以获得垂直梯度图($G_y$)。计算边缘强度现在我们为每个像素提供了两个值:$G_x$(水平变化)和$G_y$(垂直变化)。为了找出该像素处边缘的总体“强度”或幅度,我们将这两个值组合起来。最常用的方法是使用欧几里得距离公式:$$ G = \sqrt{G_x^2 + G_y^2} $$这个值$G$就是梯度幅度。$G$的值越大,表明该像素处的边缘越强。有时,为了计算效率,会使用一个更简单的近似方法:$$ G \approx |G_x| + |G_y| $$应用Sobel算子的结果通常是一个新的灰度图像,其中每个像素的强度对应于其梯度幅度$G$。输出图像中的亮像素代表强度变化大的区域(可能是边缘),而暗像素代表变化很小的区域。Sobel算子通过估计图像梯度幅度,提供了一种找出边缘的简单方法。Sobel输出图像中较亮的区域对应于更强的潜在边缘。虽然Sobel算子在突出边缘方面有效,但其输出有时会产生较粗的边缘,并且对图像中的噪声敏感。它常作为更复杂的边缘检测算法中的重要一步,例如接下来要讨论的Canny边缘检测器。