传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

边缘检测

图像边缘是图像最基本的特征,所谓边缘(Edge) 是指图像局部特性的不连续性。灰度或结构等信息的突变处称之为边缘。例如,灰度级的突变、颜色的突变,、纹理结构的突变等。边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。

如下图所示:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

当我们看到一个有边缘的物体时,首先感受到的就是边缘。

上图(a)是一个理想的边缘所具备的特性。每个灰度级跃变到一个垂直的台阶上。而实际上,在图像采集系统的性能、采样率和获取图像的照明条件等因素的影响,得到的边缘往往是模糊的,边缘被模拟成具有“斜坡面”的剖面,如上图(b)所示,在这个模型中,模糊的边缘变得“宽”了,而清晰的边缘变得“窄”了。

图像的边缘有方向和幅度两种属性。边缘通常可以通过一阶导数或二阶导数检测得到。一阶导数是以最大值作为对应的边缘的位置,而二阶导数则以过零点作为对应边缘的位置。

常用的一阶导数的边缘算子:通过模板作为核与图像的每个像素点做卷积和运算,然后选取合适的阈值来提取图像的边缘。常见的有Roberts算子、Sobel算子和Prewitt算子。

常用的二阶导数的边缘算子:依据于二阶导数过零点,常见的有Laplacian 算子,此类算子对噪声敏感。

其他边缘算子:前面两类均是通过微分算子来检测图像边缘,还有一种就是Canny算子,其是在满足一定约束条件下推导出来的边缘检测最优化算子。

梯度算子

要得到一幅图像的梯度,则要求在图像的每个像素点位置处计算偏导数。我们处理的是数字量,因此要求关于一点的邻域上的偏导数的数字近似,因此一幅图像 f f f ,在 ( x , y ) (x,y) (x,y) 位置处的 x x x y y y方向上的梯度大小 g x g_{x} gx g y g_{y} gy分别计算为:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子
上述两个公式对所有的 x x x y y y的有关值可用下面的一维模版对 f ( x , y ) f(x,y) f(x,y)的滤波得到。

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子
用于计算梯度偏导数的滤波器模版,通常称之为梯度算子、边缘算子和边缘检测子等。

经典一阶梯度算子

Roberts算子

Roberts算子又称为交叉微分算法,它是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条。常用来处理具有陡峭的低噪声图像,当图像边缘接近于正45度或负45度时,该算法处理效果更理想。其缺点是对边缘的定位不太准确,提取的边缘线条较粗。

Roberts算子的模板分为水平方向和垂直方向,如下式所示,从其模板可以看出,Roberts算子能较好的增强正负45度的图像边缘。

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子
例如,下面给出Roberts算子的模板,在像素点P5处 x x x y y y 方向上的梯度大小 g x g_{x} gx g y g_{y} gy 分别计算为:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

下图是Roberts算子的运行结果:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

Prewitt算子

Prewitt算子是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。由于Prewitt算子采用 3 × 3 3\times3 3×3 卷积模板对区域内的像素值进行计算,而Robert算子的模板为 2 × 2 2\times2 2×2,故Prewitt算子的边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。Prewitt算子适合用来识别噪声较多、灰度渐变的图像,其计算公式如下所示:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

例如,下面给出Prewitt算子的模板,在像素点P5处 x x x y y y 方向上的梯度大小 g x g_{x} gx g y g_{y} gy 分别计算为:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子
传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

Prewitt算子运行结果如下:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

Sobel算子

Sobel算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导。该算子用于计算图像明暗程度近似值,根据图像边缘旁边明暗程度把该区域内超过某个数的特定点记为边缘。Sobel算子在Prewitt算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对应当前像素的影响越大,从而实现图像锐化并突出边缘轮廓。

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息。因为Sobel算子结合了高斯平滑和微分求导(分化),因此结果会具有更多的抗噪性,当对精度要求不是很高时,Sobel算子是一种较为常用的边缘检测方法。

Sobel算子的边缘定位更准确,常用于噪声较多、灰度渐变的图像。其算法模板如下面的公式所示,其中 d x d_{x} dx 表示水平方向, d y d_{y} dy 表示垂直方向。

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

例如,下面给出Sobel算子的模板,在像素点P5处 x x x y y y 方向上的梯度大小 g x g_{x} gx g y g_{y} gy 分别计算为:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子
sobel算子的效果如下:

传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

各类算子的优缺点

Roberts 算子

Roberts算子利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,不具备抑制噪声的能力。该算子对具有陡峭边缘且含噪声少的图像效果较好,尤其是边缘正负45度较多的图像,但定位准确率较差。

Sobel 算子

Sobel算子考虑了综合因素,对噪声较多的图像处理效果更好,Sobel 算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度。

Prewitt 算子

Prewitt算子对灰度渐变的图像边缘提取效果较好,而没有考虑相邻点的距离远近对当前像素点的影响,与Sobel 算子类似,不同的是在平滑部分的权重大小有些差异。