文章目录
多种边缘检测算法(Sobel算子、Isotropic Sobel算子、Roberts算子、Prewitt算子、Laplacian算子、Canny算子)介绍及比较
边缘检测算法简介
通常来说,边缘是指图像中像素值有突变的地方,常用于图像的分割领域。
目前,在实际的图像分割中,往往只用到了一阶导数和二阶导数,虽然在原理上可以用到更高阶的导数,但是由于图像中噪声的影响,在纯粹的二阶导数中就会出现对噪声的敏感现象,三阶以上导数信息往往失去了应用价值。
- 一阶导数的边缘算子:常见的
Sobel算子
、Roberts算子
和Prewitt算子
- 二阶导数的边缘算子:根据二阶导数过零点,常见的有
Laplacian算子
,此类算子对噪声敏感 - 前两种都是通过微分算子来检测图像边缘,还有一种是
Canny算子
,其是在满足一定约束条件下,推导出来的边缘检测最优化算子。
同时,由于二阶导数对噪声比较敏感,因此通常在使用二阶导数前,需要前对图像进行平滑滤波
,消除部分噪声,再进行边缘检测
。不过利用二阶导数信息的算法是基于过零检测
的,因此得到的边缘点数比较少,有利于后序的处理和识别工作。
各种算子的存在,就是对这种导数分割原理进行实例化计算,是为了在计算过程中能够直接使用的一种计算单位。
多种边缘检测算法对比表
算子 | 优点 | 缺点 |
---|---|---|
S o b e l Sobel Sobel | *
S
o
b
e
l
Sobel
Sobel算子要比
P
r
e
w
i
t
t
Prewitt
Prewitt算子更能准确检测图像边缘; * 边缘定义较准确,常用语噪声较多,灰度渐变的图像; * 对像素位置的影响进行了加权,相比之下比 P r e w i t t Prewitt Prewitt算子、 R o b e r t s Roberts Roberts算子效果更好; * 以滤波算子形式来提取边缘, X X X、 Y Y Y方向各用一个模板,两个模板组合起来构成一个梯度算子; * X X X方向模板对垂直边缘影响最大, Y Y Y方向模板对水平边缘影响最大 | * 由于边缘是位置的标志,对灰度的变化不敏感 |
R o b e r t s Roberts Roberts | * 对垂直边缘的检测效果好于斜向边缘; * 对具有陡峭的低噪声的图像效果最好; * 定位精度高 | * 对噪声敏感,无法抑制噪声的影响; * 提取边缘的结果边缘较粗,边缘定位不是很准确 |
P r e w i t t Prewitt Prewitt | *
P
r
e
w
i
t
t
Prewitt
Prewitt边缘检测结果在水平方向和垂直方向均比
R
o
b
e
r
t
s
Roberts
Roberts算子明显,适合用来识别噪声较多,灰度渐变的图像; * 由于其进行了像素平均,使得对噪声有抑制作用 | * 像素平均相当于对图像进行低通滤波,所以 P r e w i t t Prewitt Prewitt算子对边缘的定位不如 R o b e r t s Roberts Roberts算子 |
L a p l a c i a n Laplacian Laplacian | * 对图像阶跃性边缘点定位准确 | * 对噪声比较敏感,只适用于无噪声图像; * 容易丢失边缘方向的信息,造成一些不连续的检测边缘 |
C a n n y Canny Canny | * 对噪声不敏感,不容易受到噪声干扰; * 能够检测到真正的弱边缘; * 使用两种不同的阈值分别检测强边缘和弱边缘 * 当强边缘与弱边缘相连时,才将弱边缘包含在输出图形中 | * 易使高频边缘被平滑掉,从而造成边缘丢失 |
Sobel算子
简介
Sobel算子
是典型的基于一阶导数的边缘检测算子,由于该算子引入了类似局部平均的运算,因此对噪声具有平滑作用,能够很好的消除噪声的影响。
Sobel算子
对像素的位置的影响做了加权,因此与Prewitt算子
,Roberts算子
相比效果更好。
原理
Sobel算子
包含两组
3
×
3
3 \times 3
3×3的矩阵,分别为横向和纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
检测水平方向 沿横向模板:
G x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] G_x=\begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} Gx= −1−2−1000121
检测垂直方向 沿纵向的模板
G x = [ 1 2 1 0 0 0 − 1 − 2 − 1 ] G_x=\begin{bmatrix} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{bmatrix} Gx= 10−120−210−1
图像的每一个像素的横向及纵向梯度近似值,可用以下的公式结合,来计算梯度的大小。
G = G x 2 + G y 2 2 G=\sqrt[2]{G_x^2 + G_y^2} G=2Gx2+Gy2
然后可用以下公式,计算梯度方向
θ = arctan ( G y G x ) \theta = \arctan(\frac{G_y}{G_x} ) θ=arctan(GxGy)
在以上例子中,如果以上角度 θ = 0 \theta = 0 θ=0,即代表该图像拥有纵向边缘,左方较右方暗。
优缺点
优点
由于该算子引入了类似局部平均的运算,因此对噪声具有平滑作用,能够很好的消除噪声的影响。
Sobel算子
对像素的位置的影响做了加权,因此与Prewitt算子
,Roberts算子
相比效果更好。
缺点:
由于Sobel算子
并没有将图像的主题与背景严格地区分开,换而言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
lsotropic Sobel (各向同性 Sobel)算子
Sobel算子
另一个形式是 各向同性Sobel(lsotropic Sobel),也有两个
- 一个是检测沿水平边缘的
- 一个是检测沿垂直边缘的
构成:将Sobel算子矩阵中所有的
2
2
2改成
2
\sqrt{2}
2,就能得到各向同性Sobel
矩阵模板。
Roberts算子
简介
罗伯茨(Roberts)算子又被称为交叉微分算子,它是基于交叉差分的梯度算子,通过局部差分计算检测边缘线条。常用来处理具有陡峭的低噪声图像,当图像边缘接近于 + 4 5 ∘ +45^{\circ} +45∘或 − 4 5 ∘ -45^{\circ} −45∘时,该算法处理效果更理想。
缺点是对边缘的定位不太准确,提取的边缘线条较粗。
原理
Roberts算子的两个模板:
d x = [ − 1 0 0 1 ] d_x=\begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} dx=[−1001]
d y = [ 0 − 1 1 0 ] d_y=\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} dy=[01−10]
优缺点
优点: 对具有陡峭的低噪声的图像处理效果较好
缺点: 利用 Roberts 算子
提取边缘的结果是边缘比较粗,因此边缘定位不是很准确
Prewitt算子
简介
Prewitt算子
是一种一阶微分算子的边缘检测,利用像素点上下、左右相邻的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。
原理
其原理是在图像空间中利用两个方向模板与图像进行邻域卷积来完成,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
d x = [ 1 0 − 1 1 0 − 1 1 0 − 1 ] d_x=\begin{bmatrix} 1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1 \end{bmatrix} dx= 111000−1−1−1
d y = [ − 1 − 1 − 1 0 0 0 1 1 1 ] d_y=\begin{bmatrix} -1 & -1 & -1\\ 0 & 0 & 0\\ 1 & 1 & 1 \end{bmatrix} dy= −101−101−101
优缺点
优点:
由于其是加权平均算子,因此对噪声有抑制作用,对灰度渐变和噪声较多的图像处理效果较好
缺点:
像素平均相当于对图像进行滤波,因此Prewitt算子
对边缘的定位不如Roberts算子
Laplacian算子
简介
Laplacian算子
是一种各向同性算子,二阶微分算子,在只关心边缘位置,不考虑其周围的像素灰度差值时较为合适。
Laplacian算子
对孤立像素的响应要比对边缘或线的响应更强烈,因此只适用于无噪声图像。存在噪声情况下,使用Laplacian算子
检测边缘之前,要进行低通滤波。所以,通常的分割算法都是把Laplacian算子
和平滑算子
结合起来,生成一个新的模板。
原理
Laplacian算子
采用二阶差分的原理
一维二阶差分:
f ′ ( x ) = ( f ( x + 1 ) − f ( x ) ) − ( f ( x ) − f ( x − 1 ) ) = f ( x − 1 ) − 2 f ( x ) + f ( x + 1 ) f'(x) = (f(x + 1) - f(x)) - (f(x) - f(x - 1)) = f(x - 1) - 2f(x) + f(x + 1) f′(x)=(f(x+1)−f(x))−(f(x)−f(x−1))=f(x−1)−2f(x)+f(x+1)
二维二阶差分:
f ′ ( x , y ) = − 4 f ( x , y ) + f ( x − 1 , y ) + f ( x + 1 , y ) + f ( x , y − 1 ) + f ( x , y + 1 ) f'(x, y) = -4f(x, y) + f(x - 1, y) + f(x + 1, y) + f(x, y - 1) + f(x, y + 1) f′(x,y)=−4f(x,y)+f(x−1,y)+f(x+1,y)+f(x,y−1)+f(x,y+1)
离散laplacian算子模板:
[ 0 1 0 1 − 4 1 0 1 0 ] \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} 0101−41010
考虑两个斜对角的扩展模板
[ 1 1 1 1 − 8 1 1 1 1 ] \begin{bmatrix} 1 & 1 & 1 \\ 1 & -8 & 1 \\ 1 & 1 & 1 \end{bmatrix} 1111−81111
优缺点
优点:
具有各方向同性的特点,能够对任意方向的边缘进行提取,具有无方向性的优点,因此使用Laplacian算子提取边缘不需要分别检测X方向的边缘和Y方向的边缘,只需要一次边缘检测即可
缺点:
由于其二阶导数边缘算子的本质,使得其对噪声较为敏感,使噪声能力成分得到加强,容易丢失部分边缘方向信息,造成一些不连续的检测边缘,同时抗噪声能力较差
Canny算子
简介
该算子功能比前面几种都要好,但是它实现起来较为麻烦,Canny算子
是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子
先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法
采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子
还将经过一个非极大值抑制的过程,最后Canny算子
还采用两个阈值来连接边缘。
算法步骤
step1: 用高斯滤波器平滑图象;
step2: 用一阶偏导的有限差分来计算梯度的幅值和方向;
step3: 对梯度幅值进行非极大值抑制,仅保留局部梯度最大值
step4: 用双阈值算法检测和连接边缘
优缺点
优点:
最优化思想的边缘检测算子,同时采用高斯函数对图像进行平滑处理。该方法不容易受噪声干扰,能够检测到真正的弱边缘
缺点: 易使高频边缘被平滑掉,从而造成边缘丢失