MATLAB梯度和拉普拉斯算子在图像边缘检测中的应用
- 数学方法
边缘检测最通用的方法是检测灰度值的不连续性,这种不连续性用一阶和二阶导数来检测。
- (1)一阶导数:一阶导数即为梯度,对于平面上的图像来说,我们只需用到二维函数的梯度,即: ,该向量的幅值:,为简化计算,省略上式平方根,得到近似值;或通过取绝对值来近似,得到:。
(2)二阶导数:二阶导数通常用拉普拉斯算子来计算,由二阶微分构成:
- 边缘检测的基本思想:
- 寻找灰度的一阶导数的幅度大于某个指定阈值的位置;
- 寻找灰度的二阶导数有零交叉的位置。
- 几种方法简介
- Sobel边缘检测器:以差分来代替一阶导数。Sobel边缘检测器使用一个3×3邻域的行和列之间的离散差来计算梯度,其中,每行或每列的中心像素用2来加权,以提供平滑效果。
-1 | -2 | 1 |
0 | 0 | 0 |
1 | 2 | 1 |
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
- Prewitt边缘检测器:使用下图所示模板来数字化地近似一阶导数。与Sobel检测器相比,计算上简单一些,但产生的结果中噪声可能会稍微大一些。
-1 | -1 | -1 |
0 | 0 | 0 |
1 | 1 | 1 |
-1 | 0 | 1 |
-1 | 0 | 1 |
-1 | 0 | 1 |
- Roberts边缘检测器:使用下图所示模板来数字化地将一阶导数近似为相邻像素之间的差,它与前述检测器相比功能有限(非对称,且不能检测多种45°倍数的边缘)。
-1 | 0 |
0 | 1 |
0 | -1 |
1 | 0 |
- Laplace边缘检测器:二维函数的拉普拉斯是一个二阶的微分定义:
模板算子可分为四邻域和八邻域,如下:
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |
(四邻域)
1 | 1 | 1 |
1 | -8 | 1 |
1 | 1 | 1 |
(八邻域)
- LoG边缘检测器
由于噪声点(灰度与周围点相差很大的像素点)对边缘检测有一定的影响,所以效果更好的是LoG算子,即Laplacian-Guass算子。引入高斯函数来平滑噪声:
该函数的Laplace算子:
它把Guass平滑滤波器和Laplace锐化滤波器结合起来,先平滑掉噪声,再进行边缘检测,所以效果比单用Laplace算子要更为平滑,效果更好。
- Canny边缘检测器
主要分为以下几个步骤:①使用具有指定标准差的一个高斯滤波器来平滑图像,以减少噪声;②在每个点处计算局部梯度和边缘方向;③对步骤②中确定的边缘点产生梯度中的脊线顶部进行追踪,并将实际山不在脊线顶部的像素设置为零,从而在输出中给出一条细线(非最大值抑制),然后使用滞后阈值处理法对这些脊线像素进行阈值处理。最后进行边缘连接。
- 实验结果
原始图像:
算子
算子
算子
算子
(4邻域)
(8邻域)
- LoG
四种结果的比较:(Laplace采用8邻域模板)
图像来源:(网行天下首页>>设计图库>>文化艺术>>插画集:《牧羊犬灰度》)
图像规格:800×677 格式:SVG 模式