您的位置:首页 > 理论基础

Datawhale 计算机视觉基础-图像处理(上)- Task06 边缘检测

2020-06-03 05:31 92 查看

基本知识

  • 什么是边缘?

    边缘是图像强度函数快速变化的地方

  • 如何检测边缘?
    为了检测边缘,我们需要检测图像中的不连续性,可以使用导数来检测不连续性。

Sobel边缘检测的原理

索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量
Sobel卷积因子为:

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:

具体计算如下:

Gx = (-1)f(x-1, y-1) + 0f(x,y-1) + 1*f(x+1,y-1)

+(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)

+(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

= [f(x+1,y-1)+2f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2f(x-1,y)+f(x-1,y+1)]

Gy =1* f(x-1, y-1) + 2f(x,y-1)+ 1f(x+1,y-1)

+0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)

+(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

= [f(x-1,y-1) + 2f(x,y-1) + f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]

其中f(a,b), 表示图像(a,b)点的灰度值;

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

通常,为了提高效率 使用不开平方的近似值:

如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

然后可用以下公式计算梯度方向:

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

Canny边缘检测的原理

Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出,就此拉开了Canny边缘检测算法的序幕。

Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括:

  1. 以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。
  2. 检测到的边缘应精确定位在真实边缘的中心。
  3. 图像中给定的边缘应只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。

为了满足这些要求,Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述,它可以由高斯函数的一阶导数来近似。

在目前常用的边缘检测方法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流行的算法之一。

完成一个Canny边缘检测算法可以分为以下四步:

高斯滤波 目的
1.高斯滤波 去噪声降低错误率
2.计算梯度幅值和方向 估计每一点处的边缘强度与方向
3.非极大值抑制(NMS) 对Sobel、Prewitt等算子的结果进一步细化
4应用双阈值(Double-Threshold)检测 确定真实的和可能的边缘。

1.高斯滤波

边缘检测结果容易受到图像噪声的影响,图片中一些噪声会大大影像边缘检测。因此为了使图像平滑,可以用高斯滤波器内核与图像进行卷积。 此步骤将使图像稍微平滑,以减少边缘检测器上明显噪声的影响。

大小为(2k+1)×(2k+1)(2k + 1)×(2k + 1)(2k+1)×(2k+1)的高斯滤波器核的方程式为:

Hij=12πσ2exp⁡(−(i−(k+1))2+(j−(k+1))22σ2);1≤i,j≤(2k+1) {\displaystyle H_{ij}={\frac {1}{2\pi \sigma ^{2}}}\exp \left(-{\frac {(i-(k+1))^{2}+(j-(k+1))^{2}}{2\sigma ^{2}}}\right);1\leq i,j\leq (2k+1)} Hij​=2πσ21​exp(−2σ2(i−(k+1))2+(j−(k+1))2​);1≤i,j≤(2k+1)

【例2】下面一个5×5高斯卷积核例子,用于创建相邻图像,σ=1.4\sigma = 1.4σ=1.4。 (*表示卷积运算。)
B=1159[245424912945121512549129424542]∗A \mathbf {B} ={\frac {1}{159}}{\begin{bmatrix}2&4&5&4&2\\4&9&12&9&4\\5&12&15&12&5\\4&9&12&9&4\\2&4&5&4&2\end{bmatrix}}*\mathbf {A} B=1591​⎣⎢⎢⎢⎢⎡​24542​491294​51215125​491294​24542​⎦⎥⎥⎥⎥⎤​∗A
注意,选择高斯核的大小会影响检测器的性能。 尺寸越大,检测器对噪声的灵敏度越低。 此外,随着高斯滤波器核大小的增加,用于检测边缘的定位误差将略有增加。一般5x5是一个比较不错的trade off。

2.计算梯度强度和方向

进行高斯滤波后,图像中的边缘可以指向各个方向,接下来使用四个算子来检测图像中的水平、垂直和对角边缘。边缘检测的算子(如Roberts,Prewitt,Sobel等)返回水平GxG_xGx​和垂直GyG_yGy​方向的一阶导数值,由此便可以确定像素点的梯度GGG和方向θ\thetaθ 。
G=Gx2+Gy2(1) \mathbf {G} ={\sqrt {{\mathbf {G} _{x}}^{2}+{\mathbf {G} _{y}}^{2}}} \tag{1} G=Gx​2+Gy​2​(1)

θ=arctan⁡(Gy/Gx)(2) \mathbf {\theta } =\operatorname {arctan} \left(\mathbf {G} _{y}/\mathbf {G} _{x}\right) \tag{2} θ=arctan(Gy​/Gx​)(2)

其中G\mathbf {G}G为梯度强度, θ\thetaθ表示梯度方向,arctan⁡\operatorname {arctan}arctan为反正切函数。通过上式我们可以得到一个梯度矩阵G\mathbf {G}G和方向矩阵 θ\thetaθ。

【例3】角度的计算

见下图,假设 θ\thetaθ有四条线,分别是0,45,90,135度线(0度和180重合,是一条线)。需要通过(2)式求出的θ\thetaθ进行近似,分类到这四条线或四个角度中。

比如计算出的$\theta=91 $度,则应将其归类到90–270度方向

3.非极大值抑制(NMS)

在每一点上,邻域中心与沿着其对应的梯度方向的两个像素相比,若中心像素为最大值,则保留,否则中心置0,这样可以抑制非极大值,保留局部梯度最大的点,以得到细化的边缘。

对图像进行梯度计算后,仅仅基于梯度值提取的边缘仍然很模糊。对边缘有且应当只有一个准确的响应。而非极大值抑制则可以帮助将局部最大值之外的所有梯度值抑制为0。非极大值抑制是一种边缘稀疏技术,非极大值抑制的作用在于“瘦”边。直观上地看,对第二步得到的图片,边缘由粗变细了。

4. 用双阈值算法检测和连接边缘

一张图解释双阈值算法检测:

双阈值法非常简单,我们假设两类边缘:经过非极大值抑制之后的边缘点中,梯度值超过TH的称为强边缘,梯度值小于TH大于TL的称为弱边缘,梯度小于TL的不是边缘

可以肯定的是,强边缘必然是边缘点,因此必须将T1设置的足够高,以要求像素点的梯度值足够大(变化足够剧烈),而弱边缘可能是边缘,也可能是噪声,如何判断呢?当弱边缘的周围8邻域有强边缘点存在时,就将该弱边缘点变成强边缘点,以此来实现对强边缘的补充。实际中人们发现T1:T2=2:1的比例效果比较好,其中T1可以人为指定,也可以设计算法来自适应的指定,比如定义梯度直方图的前30%的分界线为T1。检查8邻域的方法叫边缘滞后跟踪,连接边缘的办法还有区域生长法等等。

引用

关于Datawhale

Datawhale是一个专注于数据科学与AI领域的开源组织,汇集了众多领域院校和知名企业的优秀学习者,聚合了一群有开源精神和探索精神的团队成员。Datawhale以“for the learner,和学习者一起成长”为愿景,鼓励真实地展现自我、开放包容、互信互助、敢于试错和勇于担当。同时Datawhale 用开源的理念去探索开源内容、开源学习和开源方案,赋能人才培养,助力人才成长,建立起人与人,人与知识,人与企业和人与未来的联结。
时间原因,后面补上

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: