首先要了解一下梯度的概念,在高等数学中,对于连续的二维函数f(x,y),其点在(x,y)处的梯度是一个二维列向量
V = [f对x偏导数 f对y偏导数]’
那么梯度的幅值就是
|V| = sqrt(f对x偏导数^2 + f对y偏导数^2)
从而对于离散的二维离散的函数f(i,j),微分往往可以用差分表示,如下式:
| V’| = sqrt([f(i+1,j) - f(i,j)]^2 + [f(i,j+1) - f(i,j)]^2)
在图像处理中,往往将梯度幅值看作是梯度!两者不加以区分。为了方便计算,可以将上述根式近似为绝对值的形式:
| V’| = |f(i+1,j) - f(i,j)| + |f(i+1,j) - f(i,j)|
在实际应用中,往往使用另一种近似梯度-----Robert交叉梯度
| V’| = |f(i+1,j+1) - f(i,j)| + |f(i,j+1) - f(i+1,j)|
常用的两种一阶导数的图像增强算子:
Robert算子:
[-1, 0; 0, 1]:检测接近45度边缘 ----G1
[0, -1; 1, 0]:检测接近-45度边缘 ----G2
最终的robert交叉梯度图像为G = G1 + G2
Sobel算子:
[-1, -2, -1; 0, 0, 0; 1, 2, 1]:对水平边缘有较大响应 -----G1
[-1, 0, 1; -2, 0, 2; -1, 0, 1]:对竖直边缘有较大响应 -----G2
Sobel梯度图像 G = G1 + G2
(注:因为对于图像出来,人们更喜欢使用奇数尺寸的模板,于是sobel算子用得更为普遍)
Sobel算子在openCV中的使用:
cvSobel( const CvArr* scr ,
CvArr* dst ,
int xorder,
int yorder,
int aperture_size = 3);
<!--EndFragment-->
*Xorder,yorder:
X方向,y方向上的导数阶数,通常只用到0,1,最多2
*aperture_size:
扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。 除了尺寸为 1, 其它情况下, aperture_size ×aperture_size 可分离内核将用来计算差分。对 aperture_size=1的情况, 使用 3x1 或 1x3 内核 (不进行高斯平滑操作)。这里有一个特殊变量 CV_SCHARR (=-1),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel 滤波更精确的结果。这里的scharr滤波器实际上使用了下图所示的模板,与普通3*3模板不同的是微分权重系数不同
结果比对:
Sobel普通3*3模板边缘检测效果
scharr模板边缘检测效果
<!--EndFragment-->
相关推荐
拉普拉斯算子是一种二阶微分算子,它通过计算图像像素的梯度平方来寻找图像中的边缘。在二维图像中,拉普拉斯算子通常表示为一个3x3的差分矩阵,其核为: ``` [0 -1 0] [-1 4 -1] [0 -1 0] ``` 这个算子对图像进行...
OpenCV是一个广泛使用的开源计算机视觉库,它包含了大量的图像处理和计算机视觉算法,能够帮助开发者进行图像分析、识别、特征检测、视频处理等任务。 在C#环境下使用OpenCV,OpenCvSharp是首选的绑定库,它提供了...
在本案例中,我们讨论的是OpenCV的Python接口的4.10.0.84版本,它是一个经过编译的二进制包,文件名为`opencv-python-4.10.0.84.tar.gz`。 `opencv-python`库主要由以下部分组成: 1. 图像处理基础:包括读取、...
OpenCvSharp是一个基于.NET框架的C#版OpenCV库,专为C#开发者提供了方便易用的接口来实现计算机视觉的功能。这个压缩包“OpenCvSharp-4.0.0-x86-20181130.zip”包含了OpenCvSharp 4.0.0版本的x86架构的库文件,适用...
本文将深入探讨几种经典的边缘检测算子,包括Sobel算子、Prewitt算子、沈俊算子以及Canny算子。 Sobel算子是由Sobel在1970年提出的,它是一种基于微分法的边缘检测方法。相比于Prewitt算子,Sobel算子在计算梯度时...
博文《【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑》的配套详细注释源代码。 博文链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 1.已将dll...
这个"opencv-4.9.0-android"版本是OpenCV针对Android平台的特定优化版本,包含了最新的特性和性能改进。 1. **OpenCV库的核心功能**: - 图像处理:包括滤波、边缘检测(如Canny、Sobel、Laplacian)、色彩转换...
opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15 win64版,opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15,支持版本:python3.4,3.5,3.6
7. **Roberts、Prewitt和Kirsch算子**:这些是一些简单的边缘检测算子,它们基于一阶微分操作来检测图像的边缘,相比Sobel和Laplacian,它们的计算复杂度较低,但可能不够精确。 边缘检测是计算机视觉中的基础步骤...
OpenCV(开源计算机视觉库)是一个强大的开源框架,专门用于图像处理和计算机视觉任务。它的全称是Open Source Computer Vision Library,由Intel公司发起,并由全球开发者社区不断维护和更新。OpenCV3.0.0-beta是该...
OpenCV2.4.9的基于LoG算子及自定义算子的图像边缘检测的代码,相应位置有具体的注释,具体分析见博客http://blog.csdn.net/primetong/article/details/79589620
《OpenCV-Python 4.5.3.56:深度学习与计算机视觉的利器》 OpenCV(开源计算机视觉库)是计算机视觉和机器学习领域的重要工具,它提供了丰富的功能,用于处理图像和视频数据。在Python环境中,OpenCV通过`opencv-...
这个压缩包“opencv-4.5.5-vc14_vc15最新版本”包含了OpenCV库的4.5.5版,适用于Visual Studio 2017(vc14)和Visual Studio 2019(vc15)编译环境。OpenCV库不仅支持C++,还提供了Python、Java等其他编程语言的接口...
《OpenCV3编程入门》是一本面向初学者的开源书籍,旨在帮助读者快速掌握OpenCV3库的使用。OpenCV(开源计算机视觉库)是一个强大的工具集,用于图像处理、计算机视觉以及机器学习任务。该书结合实际示例,详细介绍了...
Sobel算子是一种用于计算图像一阶和二阶导数的差分算子,常用于边缘检测。它通过两个3x3的模板分别计算水平和垂直方向的梯度,然后合成梯度幅值和方向。Sobel算子对噪声有一定的抗干扰能力,适用于快速检测图像的...
4. Sobel边缘检测:Sobel算子是一种广泛应用的边缘检测算子,它结合了水平和垂直方向的一阶导数来估计图像的梯度。Sobel算子具有良好的噪声抑制能力,并能有效检测到图像的边缘。 5. Prewitt边缘检测算子:Prewitt...
OpenCV-python 图像梯度 OpenCV 提供了三种不同的梯度滤波器(高通滤波器):Sobel、Scharr、Laplacian。这些滤波器可以用来检测图像中的边缘和梯度信息。 Sobel 算子是高斯平滑与微分操作的结合体,抗降噪能力很...
在OpenCV库中,运动目标(前景)检测是计算机视觉领域的一个重要课题,它涉及到视频分析、监控系统、自动驾驶等多个应用场景。本教程将深入探讨如何使用OpenCV进行运动目标检测,特别是采用VIBE(ViBe)算法。VIBE是...