计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)

计算机视觉工程师在面试过程中主要考察三个内容:图像处理、机器学习、深度学习。然而,各类资料纷繁复杂,或是简单的知识点罗列,或是有着详细数学推导令人望而生畏的大部头。为了督促自己学习,也为了方便后人,决心将常考必会的知识点以通俗易懂的方式设立专栏进行讲解,努力做到长期更新。此专栏不求甚解,只追求应付一般面试。希望该专栏羽翼渐丰之日,可以为大家免去寻找资料的劳累。每篇介绍一个知识点,没有先后顺序。想了解什么知识点可以私信或者评论,如果重要而且恰巧我也能学会,会尽快更新。最后,每一个知识点我会参考很多资料。考虑到简洁性,就不引用了。如有冒犯之处,联系我进行删除或者补加引用。在此先提前致歉了!

边缘检测算子是用来提取图形边缘的卷积核

边缘提取原理
边缘处的像素值通常会有明显变化
衡量连续的变化可以使用导数
衡量图像像素间离散的变化使用差分
导数:(f(x+Δx)-f(x))/Δx
差分:f(x+1)-f(x)

梯度表示
梯度表示包含大小和方向

如果只有一个算子
只能表示大小

如果有两个算子
两个算子计算的梯度的方向是互相垂直的
如果计算的大小分别为Gx和Gy
方向为:
在这里插入图片描述
大小有三种:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Roberts

计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第1张图片
很直观,我们会想到分别计算x方向和y方向的差分
于是我们得到两个算子
[-1 1]

[-1
1]
但是我们可以发现它们计算的区域不同,只有一个点重合
所以升级为
[-1 1
-1 1]

[-1 -1
1 1]
考虑到三个因素:

  1. 计算量
  2. 实验效果
  3. 像素间距离很小,计算对角差分和相邻的差分,实际意义相差不大(这点事个人理解)

于是最后产生了Roberts算子

Prewitt

计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第2张图片
以第一个算子为例
想计算中心点x方向的梯度
额外考虑了上一行和下一行x方向的梯度
相当于取了平均

Sobel

在这里插入图片描述
在这里插入图片描述
在Prewitt取平均的基础上
对当前行(列)增加了权重
相当于加权平均
实验证明,这样效果好一些

变种:
计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第3张图片
这个的加权平均就严格按照距离的比例关系来了
因为对角的距离是相邻距离的根号2倍

Laplacian

在这里插入图片描述
以上都是一阶差分
Laplacian是二阶差分
证明:
仅考虑x方向
一阶:
中心点右边的点:f(x+1)-f(x)
中心点左边的点:f(x)-f(x-1)
二阶:
中心点:
[f(x+1)-f(x)]-[f(x)-f(x-1)]=f(x+1)+f(x-1)-2f(x)
再考虑到y方向,相加即可得到Laplacian

扩展模式:
在这里插入图片描述

LoG(Laplacian of Gaussian)

原理
高斯平滑(模糊)和拉普拉斯结合

这个模板就不固定了
大小不再局限于3x3
通常可以是5x5
根据方差不同
模板中的数值也不同

主要目的
高斯平滑可以去噪

该算子的一个例子(下文会介绍推导)
计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第4张图片

Canny

Canny严格来说应该是一种算法

步骤:
1.RGB变灰度图(其它算子也都是计算灰度图,没有太大必要计算三通道再取平均,毕竟计算的是边缘信息,颜色信息不重要)
2.高斯平滑去噪
3.使用任意算子计算梯度大小和方向(因为要计算大小和方向,所以Laplacian等相关算子就不能用了)
4.非极大值抑制
将梯度方向分为4部分(因为向上和向下对于梯度没影响,所以把360度转换为180度)
计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第5张图片
计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第6张图片
比如现在2行3列的7是中心点
它的方向是上下走向
找到上下方向的相邻点4和5
因为7比4和5大
所以7保留

注意:
一定是该方向上相邻的两个点
比如方向为右上
那么相邻的点就是右上角和左下角

5.双阈值边缘连接
设定两个阈值high和low
梯度大小大于high的保留
梯度大小小于low的去除(梯度大小修改为0)
梯度在low和high之间的做8邻域连接
如果8邻域内有大于high的,那么该中心点保留,否则去除

8邻域就是中心点周围的8个点

关于高斯

噪声通常是像素值突变的点

举个例子
在5x5的范围内,将所有像素值平均
可以减小这种突变
实现了去噪

这样的坏处是,图像的信息也没了

为了缓解上述情况
我们想到增加中心点的权重
离中心点距离越远,权重越小
高斯分布满足这一条件

所以高斯平滑算子可以用以下公式得到
在这里插入图片描述
进一步
LoG是高斯和拉普拉斯的结合
拉普拉斯是二阶差分
所以我们对上式关于x和y分别求二阶导并相加
得到
计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第7张图片
比如中心点是(3,3)
那么LoG算子(4,5)处的值就是把x=1,y=2代入上式

还有个超参数是高斯函数的方差
方差越大,高斯函数越平缓,去噪效果越好,图像越模糊

优缺点分析
优缺点没那么绝对,也很难死记硬背,还是要学会分析

上文提到,平均可以去噪
那么有平均思想的算子就对噪声不敏感
比如Prewitt、Sobel
有了平均思想自然会造成一定的信息模糊
所以边缘定位会因此效果下降
Roberts没有这种平均思想
在噪声小的条件下,边缘定位就会准确一些

一阶差分形容像素值变化趋势
二阶差分形容变化趋势的快慢或者说剧烈程度
显然噪声的变化程度剧烈
那么没有去噪处理的Laplacian对噪声就会敏感

计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)_第8张图片
四行分别是
常见边缘
像素变化
一阶差分
二阶差分

因为梯度大小要取绝对值或者平方
所以应该将小于0的部分向上翻转

可以看出
二阶差分算子容易检测出双边缘
一阶算子比较适合灰度渐变

Canny这种有很多步骤的就可以根据步骤分析
高斯平滑:去噪
双阈值连接:连接一些弱边缘
Canny更像一个集大成者
毕竟它已经上升到算法层面了

我觉得学会分析这些就够了,优缺点还是挺难记的


欢迎讨论 欢迎吐槽

你可能感兴趣的:(计算机视觉面试考点,计算机视觉,面试,边缘检测,算子,Canny)