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