首先回顾一下边缘检测的一般步骤:
边缘检测算法一般包含如下四个步骤:
1.滤波(去噪)
2.增强(一般是通过计算梯度幅值)
3.检测(在图像中有许多点的梯度幅值会比较大,而这些点并不都是边缘,所以应该用某种方法来确定边缘点,比如最简单的边缘检测判据:梯度幅值阈值)
4.定位(有的应用场合要求确定边缘位置,可以在子像素水平上来估计,指出边缘的位置和方向)
边缘检测方法比较常用的有基于各种算子的方法,有基于一阶导数的各种算子(Roberts、Sobel、Prewitt等),还有基于二阶导数的拉普拉斯算子等。
其中一阶导数一般找梯度极大值。
二阶导数找过零点(需要忽略无意义的过零点(即均匀零区))。
本文主要概述一下边缘检测中比较有代表性的的Canny和LoG算法。
其中Canny基于一阶导数,而LoG算法基于二阶导数。
Canny边缘检测器
Canny边缘检测的算法步骤:
1.用高斯滤波器平滑图像(不同尺度的Canny检测子由高斯的不同标准差来表示)
2.用一阶偏导有限差分计算梯度幅值和方向(梯度方向为边缘法向)
3.对梯度幅值进行非极大值抑制(Non-Maxima Suppression, NMS)
4.用双阈值算法检测和连接边缘
其中非极大值抑制细化了幅值图像中的屋脊带,只保留幅值局部变化最大的点。
双阈值算法:用两个阈值得到两个阈值图像,然后把高阈值的图像中的边缘连接成轮廓,连接时到达轮廓的端点时,在低阈值图像上找可以连接的边缘。不断收集,直到所有的间隙连接起来为止。
LoG边缘检测算法
LoG边缘检测算法步骤:
1.平滑:高斯滤波器
2.增强:Laplacian算子计算二阶导
3.检测:二阶导零交叉点并对应于一阶导数的较大峰值
4.定位:线性内插
根据卷积的求导法则,先卷积后求导和先求导后卷积是相等的,所以可以把第1、2步合并为一步,先对高斯滤波器做拉普拉斯变换,得到墨西哥草帽算子,然后再用这个算子与图像做卷积。
这个算子还有一个有效的近似:使用两个具有明显不同的标准差的高斯平滑掩模的差(DoG, difference of Gaussians)。