Sobel Operator

1 Sobel算子计算图像梯度

将灰度图像记作 $I$,分别计算 $x$ 方向以及 $y$ 方向上的梯度。

检测图像 $x$ 方向上梯度,即检测图像中 左右 灰度值存在差异的 竖直边缘,Sobel算子定义如下:

\[G_x=\begin{bmatrix}-1&0&1\\-2&0&2\\-1&0&1\end{bmatrix}\ast I\]

检测图像 $y$ 方向上梯度,即检测图像中 上下 灰度值存在差异的 水平边缘,Sobel算子定义如下:

\[G_y=\begin{bmatrix}-1&-2&-1\\0&0&0\\1&2&1\end{bmatrix}\ast I\]

2 OpenCV调用

2.1 python

def get_sobel(imgGray):
    grad_x = cv.Sobel(imgGray, cv.CV_32F, 1, 0) # x方向导数,检测竖直边缘
    grad_y = cv.Sobel(imgGray, cv.CV_32F, 0, 1) # y方向导数,检测水平边缘
    grad_x = cv.convertScaleAbs(grad_x) # if x in [-255, 255] f(x) = |x|, else f(x) = 255
    grad_y = cv.convertScaleAbs(grad_y)
    grad_xy = cv.addWeighted(grad_x, 0.5, grad_y, 0.5, 0) # merge & return uint8
    return grad_xy

2.2 C++

TBC

Reference

[1 ] Wikipedia Sobel operator