查找图像渐变、边缘等
使用到以下方法 : cv.Sobel(), cv.Scharr(), cv.Laplacian()…
原理
OpenCV 提供了三种类型的梯度滤波器或高通滤波器,Sobel、Scharr 和 Laplacian。
1. Sobel 和 Scharr 导数
Sobel算子是联合高斯平滑加微分运算,所以更抗噪。您可以指定要采用的导数的方向,垂直或水平(分别通过参数 yorder 和 xorder)。您还可以通过参数 ksize 指定内核的大小。如果 ksize = -1,则使用 3x3 Scharr 过滤器,其结果比 3x3 Sobel 过滤器更好。请参阅所用内核的文档。
1.1 Sobel()方法
在除一种情况之外的所有情况下,ksize×ksize 可分离核用于计算导数。当ksize = 1时,使用3×1或1×3核(即不做高斯平滑)。 ksize = 1 只能用于一阶或二阶 x 或 y 导数。
还有一个特殊值 ksize = FILTER_SCHRR (-1) 对应于 3×3 Scharr 过滤器,它可能给出比 3×3 Sobel 更准确的结果。shcarr为:
[ − 3 0 3 − 10 0 10 − 3 0 3 ] (1) \begin{bmatrix} -3&0&3\\ -10&0&10\\ -3&0&3\\ \end{bmatrix}\tag{1} ⎣⎡−3−10−30003103⎦⎤(1)
该函数通过使用适当的内核对图像进行卷积来计算图像导数:
d s s t = ∂ x o r d e r + y o r d e r s r c ∂ x x o r d e r ∂ y y o r d e r dsst=\frac{∂^{xorder}+y^{order}src}{∂x^{xorder}∂y^{yorder}} dsst=∂xxord