Canny Edge Detector

Canny边缘检测算法有自己的理论和经验性的推导, 没仔细看/没看明白.
它的步骤如下:

  1. 对原图的灰度图进行高斯滤波

  2. 求一阶导数, 得到每个像素点的梯度强度和方向. 非最大抑制. 对每个edge candidate像素点,求一阶导数, 得到每个像素点 的梯度强度和方向.

  3. 非最大抑制. 对每个edge candidate像素点, 非最大抑制. 对每个edge candidate像素点,
    在它的edge方向上, 它的3×3邻域内, 有两个相邻点. 如果当前像素点处的梯度强度比任意一个相邻点弱, 则将其置为0.
    需要注意的是, edge的方向的计算方式见下图.
    Canny Edge Detector_第1张图片

  4. double thresholding, 然后将点连接成线.
    single thresholding值不好选. double threshing的做法是取一大一小两个threshold, 分别得到两张新图:TH,TL, 后者非零点的个数与前者非零点的个数比值在1到3之间. TH上的非零点一定也是TL上的非零点. 令: TL=TL−TH. 然后对于TH上的每一个非零点, 找到它们在TL上的所有非零邻接点, 两者并集就是最后的edge points.

Canny Edge Detector比Sobel, LoG edge detector 的效果都要好.
Canny Edge Detector_第2张图片
第二行第一个为LoG的结果, 第二个为Canny的结果. 从图中可以看出, Canny对edge的定位更准确, edge点的连通性也更好.

你可能感兴趣的:(图像处理)