一阶微分边缘算子详解

  • 一阶微分边缘算子
  • 一阶微分边缘算子基本思想
  • Roberts 算子
  • Roberts 算法思想
  • Roberts 算法步骤
  • Roberts 算子的推导
  • Roberts 算法优缺点
  • Prewitt 算子
  • Prewitt 算法思想
  • Prewitt 算法步骤
  • Prewitt 算法优缺点
  • Sobel 算子
  • Sobel 算法思想
  • Sobel 算法优缺点
  • Sobel 的变种——Istropic Sobel
  • Kirsch 算子
  • Kirsch 算法思想
  • Kirsch 算法步骤
  • Kirsch 算法计算优化
  • Kirsch 算法优缺点
  • *Robinson 算子
  • *Nevitia 算子


一阶微分边缘算子

一阶微分边缘算子基本思想

一阶微分边缘算子也称为梯度边缘算子,它是利用图像在边缘处的阶跃性,即图像梯度
在边缘取得极大值的特性进行边缘检测。梯度是一个矢量,它具有方向θ 和模|ΔI|:
传统CV算法——一阶微分边缘算子_边缘算子
传统CV算法——一阶微分边缘算子_算法思想_02
传统CV算法——一阶微分边缘算子_算法思想_03
梯度的方向提供了边缘的趋势信息,因为梯度方向始终是垂直于边缘方向,梯度的模
值大小提供了边缘的强度信息。
在实际使用中,通常利用有限差分进行梯度近似。对于上面的公式,我们有如下的近
似:
传统CV算法——一阶微分边缘算子_图像处理_04
传统CV算法——一阶微分边缘算子_深度学习_05

Roberts 算子

Roberts 算法思想

1963 年,Roberts 提出了这种寻找边缘的算子。Roberts 边缘算子是一个 2x2 的模板,采用的是对角方向相邻的两个像素之差。从图像处理的实际效果来看,边缘定位较准,对噪声敏感。 由 Roberts 提出的算子是一种利用局部差分算子寻找边缘的算子,边缘的锐利程度由图像灰度的梯度决定。梯度是一个向量,∇ f 指出灰度变化的最快的方向和数量。

因此,最简单的边缘检测算子是用图像的垂直和水平差分来逼近梯度算子:
传统CV算法——一阶微分边缘算子_算法思想_06
对每一个像素计算出以上式子的向量,求出它的绝对值,然后与阈值进行比较,利用
这种思想就得到了Roberts 交叉算子:
传统CV算法——一阶微分边缘算子_算法思想_07

Roberts 算法步骤

Roberts 算法过程非常简单。选用1 范数梯度计算梯度幅度:|G(x,y)|=|𝐺𝑥|+|𝐺𝑦|。

卷积模板为:

传统CV算法——一阶微分边缘算子_边缘算子_08


则模板运算结果:

传统CV算法——一阶微分边缘算子_算法思想_09

传统CV算法——一阶微分边缘算子_边缘算子_10

传统CV算法——一阶微分边缘算子_算法思想_11

传统CV算法——一阶微分边缘算子_深度学习_12

传统CV算法——一阶微分边缘算子_深度学习_13

如果G(x,y)大于某一阈值,则我们认为(x,y)点为边缘点。

Roberts 算子的推导

传统CV算法——一阶微分边缘算子_图像处理_14
传统CV算法——一阶微分边缘算子_算法_15
传统CV算法——一阶微分边缘算子_边缘算子_16
传统CV算法——一阶微分边缘算子_算法_17
传统CV算法——一阶微分边缘算子_边缘算子_18
传统CV算法——一阶微分边缘算子_深度学习_19
传统CV算法——一阶微分边缘算子_算法_20

Roberts 算法优缺点

Roberts 算子利用局部差分算子寻找边缘,边缘定位精度高,但容易丢失一部分边缘,同时由于图像没有经过平滑处理,因此不具备抑制噪声能力。该算子对具有陡峭边缘且含有噪声少的图像处理效果较好。另外,由于该检测算子模板没有中心点,所以它在实际中很少使用。

Prewitt 算子

Prewitt 算法思想

Prewitt 算子是 J.M.S.Prewitt 于 1970 年提出的检测算子。不同于 Roberts 算子采用22 大小的模板,Prewittt 算法采用了33 大小的卷积模板。22 大小的模板在概念上很简单,但是他们对于用关于中心点对称的模板来计算边缘方向不是很有用,其最小模板大小为33。3*3 模板考虑了中心点对段数据的性质,并携带有关于边缘方向的更多信息。 在算子的定义上,Prewitt 希望通过使用水平+垂直的两个有向算子去逼近两个偏导数𝐺𝑥,𝐺𝑦,这样在灰度值变化很大的区域上卷积结果也同样达到极大值。

1

1

1

0

0

0

-1

-1

-1

水平方向

1

0

-1

1

0

-1

1

0

-1

垂直方向

Prewitt 算法步骤

Prewitt 边缘检测算子使用两个有向算子(水平+垂直),每一个逼近一个偏导数,这是
一种类似计算偏微分估计值的方法,x,y 两个方向的近似检测算子为:
传统CV算法——一阶微分边缘算子_算法_21
得出卷积模板为:
传统CV算法——一阶微分边缘算子_图像处理_22
记图像M,梯度幅值T,比较
传统CV算法——一阶微分边缘算子_算法思想_23 threshold
如果最终T 大于阈值 threshold,那么该点为边缘点。

Prewitt 算法优缺点

Prewitt 算子对灰度渐变和噪声较多的图像处理效果较好,但不能完全排除检测结果中
出现的虚假边缘。

Sobel 算子

Sobel 算法思想

Sobel 最初是1968 年在一次博士生课题讨论会1968 上提出(“A 3x3 Isotropic Gradient Operator for Image Processing”),后来正式出版发表是在 1973 年的一本专著(“Pattern Classification and Scene Analysis”)的脚注里作为注释出现和公开的。Sobel 算子和Prewitt算子都是加权平均,但是 Sobel 算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的响也不同。一般来说,距离越远,产生的影响越小。 将 Prewitt 边缘检测算子模板的中心系数增加一个权值 2,不但可以突出中心像素点,而且可以得到平滑的效果,这就成为索贝尔算子。

###Sobel 算法步骤
Sobel 算子一种将方向差分运算与局部平均相结合的方法。该算子是在以 f(x,y)为中心的3x3 邻域上计算x 和y 方向的偏导数,即
公式:

传统CV算法——一阶微分边缘算子_图像处理_24

得出卷积模板为:

传统CV算法——一阶微分边缘算子_边缘算子_25

记图像M,梯度幅值T,比较
传统CV算法——一阶微分边缘算子_算法思想_23 threshold
如果最终T 大于阈值 threshold,那么该点为边缘点。

Sobel 算法优缺点

Sebel 有明显的两个优点:一是高频的像素点少,低频的像素点多,使像素的灰度平均值下降,且由于噪声一般为高频信号,所以它具有抑制噪声的能力;二是检测到的边缘比较宽,至少具有两个像素的边缘宽度,从而使其得到了广泛应用。但是不能完全排除检测结果中出现的虚假边缘。

Sobel 的变种——Istropic Sobel

Sobel 算子还有一种变种 Istropic Sobel,是各向同性 Sobel 算子,其模板为
传统CV算法——一阶微分边缘算子_深度学习_27

Sobel 各向同性算子的权值比普通 Sobel 算子的权值更准确。为什么?模板的权值是离中心位置越远则权值(看绝对值)影响越小,如上图,把模板看成是9 个小正方形,小正方形边长为1,则虚线三角形的斜边长为√2,下直角边长为 1,则如果(0,0)位置权值绝对值大小为1,则按照距离关系,位置(1,0)处的权值绝对值大小应该为√2才是准确的

Kirsch 算子

Kirsch 算法思想

Kirsch 算子是 R.Kirsch 提出来的一种边缘检测算法。与前述的算法不同之处在于,Kirsch 考虑到 33 的卷积模板事实上涵盖着 8 种方向(左上,正上,……,右下),于是Kirsch 采用 8 个 33 的模板对图像进行卷积,这8 个模板代表 8 个方向,并取最大值作为图像的边缘输出。

Kirsch 算法步骤

它采用下述8 个模板对图像上的每一个像素点进行卷积求导数:
传统CV算法——一阶微分边缘算子_边缘算子_28
传统CV算法——一阶微分边缘算子_图像处理_29
传统CV算法——一阶微分边缘算子_边缘算子_30
传统CV算法——一阶微分边缘算子_算法思想_31
最终选取8 次卷积结果的最大值作为图像的边缘输出。

Kirsch 算法计算优化

假设图像中一点 A 及其周围3×3 区域的灰度如下图所示,设𝑞𝑖(i=0,1,……,7)为图像,经过Kirsch 算子第(i+1)个模板处理后得到的A 点的灰度值。

传统CV算法——一阶微分边缘算子_边缘算子_32


处理后在A 点的灰度值为:

传统CV算法——一阶微分边缘算子_算法_33

通过矩阵变换发现经过 Kirsch 算子得到的像素值直接的关系, 事实上需要直接由邻域 像素点计算得到的只有 传统CV算法——一阶微分边缘算子_边缘算子_34, , 因此可以大大减少计算量。

传统CV算法——一阶微分边缘算子_图像处理_35

Kirsch 算法优缺点

Kirsch 算子属于模板匹配算子,采用八个模板来处理图像的检测图像的边缘,运算量比
较大,但是它在保持细节和抗噪声方面都有较好的效果。

*Robinson 算子

Robinson 与Kirsch 算子非常类似,也是8 个模板,只是模板的内容有差异:

传统CV算法——一阶微分边缘算子_边缘算子_36

*Nevitia 算子

Nevitia 算子采用的是 5×5 的卷积模板,它与 Kirsch 类似,也是属于方向算子,总共能确定4*(5-1)=12 个方向,因此包含有12 个 5×5 的模板。 其中前6 个模板如下,后6 个模板可以由对称性得到。

传统CV算法——一阶微分边缘算子_图像处理_37


5×5 Nevitia 算子的前 6 个模板 ,最终选取12 次卷积结果的最大值作为图像的边缘输出。

链接: Glab.