定义
一种一阶边缘检测算法。
Canny算子是一种利用变分法以实现最优的边缘检测的算法,其数学表达形式非常近似于高斯函数的一阶导数。其特征在于,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,Canny的目标是找到最优边缘,最优边缘检测的含义是:首先,算法能够尽可能多地标识出图像中的实际边缘;其次,标识出的边缘要与实际图像中的实际边缘尽可能接近;图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。
Canny算子进行边缘检测的关键步骤
去噪
为了避免噪声点的干扰,首先使用高斯滤波进行去噪。
亮度梯度搜寻
图像中的边缘可能会指向不同的方向,所以Canny算法使用4个mask检测水平、垂直以及对角线方向的边缘。原始图像与每个mask所作的卷积都存储起来。对于每个点我们都标识在这个点上的最大值以及生成的边缘的方向。这样我们就从原始图像生成了图像中每个点亮度梯度图以及亮度梯度的方向[1]。
边缘跟踪
进一步,为了达到去噪的目的,再次进行边缘点的剔除操作,将假边缘全部去掉。为此,我们需要两个阈值minVal和maxVal。强度梯度大于maxVal的任何边缘必定是边缘,而小于minVal的那些边缘必定是非边缘,因此将其丢弃。介于这两个阈值之间的对象根据其连通性被分类为边缘或非边缘。如果它们与 “确定性”像素有连接,则将它们视为边缘的一部分。 否则,它们也将被丢弃。
Canny算子进行边缘检测的评价
第一步所用的平滑滤波器将会直接影响Canny算法的结果。较小的滤波器产生的模糊效果也较少,这样就可以检测较小、变化明显的细线。较大的滤波器产生的模糊效果也较多;设置的阈值过高,可能会漏掉重要信息;阈值过低,将会把枝节信息看得很重要,很难给出一个适用于所有图像的通用阈值。
参考文献
[1] Canny J. A computational approach to edge detection[J]. IEEE Transactions on pattern analysis and machine intelligence, 1986 (6): 679-698.
参阅:边缘检测