目录
一 概述
1.背景知识
2.噪声对边缘模型的影响
3.边缘检测的基本步骤
二 边缘检测-基于梯度算子
1.梯度定义
2.梯度算子的说明
3.举例
4.阈值处理
三 边缘检测-基于LoG算子
1.理论基础
2.LoG算子介绍
3.LoG算子的检测步骤
三 边缘检测-基于Canny算子
1.Canny算子介绍
2.Canny算子的数学推到过程
3.Canny算子过程总结
4.Canny算子举例
一 概述
1.背景知识
原理:基于灰度突变来定位边缘位置
常见的几种边缘模型如下
斜坡模型的一阶导数和二阶导数如下所示
2.噪声对边缘模型的影响
结论:找边缘之前去噪 很重要
3.边缘检测的基本步骤
边缘检测基本步骤:
(1)降噪,可以用【高斯滤波器】【均值滤波器】【中值滤波器】等算子对图像进行平滑处理
(2)边缘点的检测
(3)边缘定位
边缘检测主要方法:
(1)基于梯度算子的,如Prewitter,Sobel
(2)LoG算子检测【高斯拉普拉斯】,又称为Marr-Hildreth检测器
(3)Canny算子检测
二 边缘检测-基于梯度算子
1.梯度定义
2.梯度算子的说明
什么是梯度算子?
答:用于计算梯度偏导数的滤波器模板,或者叫差分算子、边缘算子、边缘检测子
常见的梯度算子如下所示
3.举例
4.阈值处理
为了减少无关的边缘,对检测结果进行阈值处理
原理:对梯度图像进行阈值处理,降低噪声的干扰
三 边缘检测-基于LoG算子
1.理论基础
(1)灰度变化与图像尺寸无关,因此可以使用不同尺寸的算子(而不仅仅是小算子如3,5,7),而取决于数值范围
(2)灰度的突然变化会在一阶导数中引起波峰或波谷,在二阶导数中等效地引起零交叉
因此,算子应具备如下特定:
(1)能计算图像中任一个位置的一阶和二阶微分的算子
(2)它的尺寸可以被调整,以便在任何期望的尺寸上起作用,大的算子可以检测模糊边缘,小的算子可以检测精细细节。
2.LoG算子介绍
一句话总结:先对高斯函数求二阶导,再与原图进行卷积
3.LoG算子的检测步骤
LoG算子检测步骤 :
(1)用一个n*n的高斯低通滤波器对输入图像滤波
(2)计算由第一步得到的图像的拉普拉斯
(3)找到拉普拉斯结果中的零交叉点(目的)
问:高斯滤波器大小如何确定?
答:经验法则,一个n*n的LoG滤波器,n 应是大于或等于6 sigma的最小奇整数。 举例:方差为2 的高斯核,则n = 6*2+1 = 13
问:如何找到零交叉点?
答:用一个3*3的邻域,作用域图像中的任意像素位置,存在零交叉点意味着至少 有一个相对的领域的值相反。测试四种情况(上/下,左/右,2个对角),如果g(x,y) 的值与阈值比较,则需相对邻域数值差的绝对值超过这个阈值,则称之为零交叉像素。
三 边缘检测-基于Canny算子
1.Canny算子介绍
Canny算子的目标
(1)低错误率,所有的边缘点都被找到
(2)边缘点被很好的定位
(3)单一的边缘点响应(真实边缘周围只返回一个点)
问:如何满足如上三个原则?
答:对最佳台阶边缘检测器的一个较好近似是高斯一阶导数,这个结论高斯证明过 我们就不研究了,拿来用就行~
2.Canny算子的数学推到过程
(1)首先用一个高斯函数平滑图像,计算结果的幅度,然后使用梯度幅度和方向来 估计每一点处的方向和边缘强度
(2)由于是用梯度算子,所以边缘会比较宽(之前讨论过),因此下一步是要 用细化边缘,方法是【非最大值抑制】,该方法的本质是指边缘法线的许多离散方向(由于边缘方向是很多离散的值,因此我们需要限定4个方向:水平、垂直、+45、-45)
令d1,d2,d3,d4表示上述4个基本边缘方向:水平、-45、垂直、+45
- 寻找最接近a(x,y)的方向dk
- 如果M(x,y)的值至少小于沿dk的两个邻居之一,则令g(x,y)=0,否则 g(x,y)=M(x,y)。 g(x,y)是抑制后的梯度图像
(3)由于g(x,y)中存在伪边缘点,因此需要对其进行阈值处理,Canny使用两个 阈值,TL:TH = 1:2 或1:3
(4)根据强弱边缘生成连通的边缘
- gNH的所有强像素均被标记为边缘像素
- 在gNH中定位下一个未被访问的边缘像素P
- 在gNL中将所有的弱像素标记为有效边缘像素,用8连通性的方法连接到P
- 如果gNH中的所有非零像素都被访问过,则跳到5,否则返回1
- 将gNL中未标记为有效边缘像素的所有像素置零
- 将gNL中的非0 像素附加到gNH,得到最终的Canny结果
人话:就是遍历强边缘中的所有非零像素,对于每一个非零像素,找弱边缘中与其连通的像素,标记为边缘,否则置为0 ,然后将修改过的弱边缘附加到强边缘图中即可。
3.Canny算子过程总结
(1)用高斯滤波器平滑输入图像
(2)计算梯度幅值图像和角度图像
(3)对幅度图像应用非最大抑制
(4)用双阈值处理和连接分析来检测并连接边缘
4.Canny算子举例
这篇有点长了,后面还有边缘连接,再开一篇吧