zoukankan      html  css  js  c++  java
  • Canny Edge Detector

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

    1. 对原图的灰度图进行高斯滤波
    2. 求一阶导数, 得到每个像素点的梯度强度和方向.
    3. 非最大抑制. 对每个edge candidate像素点, 在它的edge方向上, 它的(3 imes 3)邻域内, 有两个相邻点. 如果当前像素点处的梯度强度比任意一个相邻点弱, 则将其置为0. 需要注意的是, edge的方向的计算方式见下图.
    4. double thresholding, 然后将点连接成线.
      single thresholding值不好选. double threshing的做法是取一大一小两个threshold, 分别得到两张新图:(T_H, T_L), 后者非零点的个数与前者非零点的个数比值在1到3之间. (T_H)上的非零点一定也是(T_L)上的非零点. 令: (T_L = T_L - T_H). 然后对于(T_H)上的每一个非零点, 找到它们在(T_L)上的所有非零邻接点, 两者并集就是最后的edge points.

    Canny Edge Detector比Sobel, LoG edge detector 的效果都要好.

    第二行第一个为LoG的结果, 第二个为Canny的结果. 从图中可以看出, Canny对edge的定位更准确, edge点的连通性也更好.

  • 相关阅读:
    正则表达式匹配
    最长回文子串
    无重复字符的最长子串
    n个骰子的点数之和
    关于模型选择
    最小堆
    kmeans++
    Dijkstra 算法
    mapreduce中获取输入文件的路径
    mapreduce数据不平衡时的处理方法
  • 原文地址:https://www.cnblogs.com/dengdan890730/p/6148082.html
Copyright © 2011-2022 走看看