官网参见https://docs.opencv.org/3.4.1/d5/d0f/tutorial_py_gradients.html
在形态学转换(https://blog.csdn.net/weixin_42555985/article/details/96272590)中已经提到形态学梯度概念,用于发现物体的边缘。
我们可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。
图像边缘一般都是通过对图像进行梯度运算来实现的。
梯度可以理解为图像灰度值变化。
opencv提供3种类型梯度滤波器,或者说高通滤波器。Sobel, Scharr和Laplacian。
Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对Sobel(使用小的卷积核求解求解梯度角度时)的优化。Laplacian 是求二阶导数。
在图像平滑处理(https://blog.csdn.net/weixin_42555985/article/details/96101079)中已经介绍过低通滤波器,它的作用就是去除图像中的噪音。
而高通滤波器主要是为了图像识别抽取出图像特征,这里的特征一般为边缘纹理的特征。因为图像中边缘和纹理细节都是高频信号。
内容提要
- Sobel和Scharr算子
- Laplacian算子
- 重要事情:防止从白到黑的边界消失
1.Sobel和Scharr算子
Sobel算子是高斯平滑和微分操作的结合体,所以它的抗噪音能力很好。
你可以自己定义求导的方向,水平方向或者垂直方向(参数定义为xorder和yorder)。你也可以定义核大小,参数为ksize。如果ksize= -1,使用3x3的Scharr滤波器,它比3x3的Sobel滤波器的效果要好。
3x3的Scharr滤波器卷积核如下
- x方向Scharr核
- y方向Scharr核
2.Laplacian算子
opencv在计算Laplacian算子时直接调用Sobel算子。计算公式如下:
dst=Δsrc= ∂ 2 s r c ∂ x 2 \frac{ ∂^2 src } {∂x^2} ∂x