【思维导图】canny滤波 原理步骤细致剖析

canny滤波 原理步骤细致剖析

制作人

霏儿,百度飞桨PPDE开发者技术专家,计算机视觉、虚拟现实、元宇宙,欢迎技术交流

目的

最优边缘检测

含义

最优检测

  • 算法能够尽可能多地标识出图像中的实际边缘

最优定位准则

  • 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近

检测点与边缘点一一对应

  • 图像中的边缘只能标识一次

步骤

转为灰度图

  • 减少计算开销

滤波

  • 高斯滤波

    • 卷积核满足正态分布

    • 核越大,图像越模糊

    • 高斯核大小将影响canny滤波器的性能

      • 尺寸越大,滤波器对噪声的敏感度会越低
      • 尺寸越大也会让边缘检测的定位误差也将略有增加
    • 对同像素加权相加,使得最相近的像素有更高重要度

  • 目的

    • 降低噪声

计算梯度大小&方向

  • 计算Gx,Gy

    • 即水平Gx和垂直Gy方向的一阶导数值
  • 计算梯度值

  • 计算梯度方向

非极大值抑制(NMS)

  • 角度法

    • 划分为0,45,90,135度四个角度

    • 优点

      • 计算简单
    • 劣势

      • 无插值,8邻域中计算的部分不是计算出来的梯度方向
  • 插值法

    • 优点

      • 更精确
    • 劣势

      • 计算开销大
  • 目的

    • 梯度计算得到的边缘很粗,一条边缘中央一般很亮,两边亮度逐渐降低,可以根据这个特点去掉非局部灰度最高的“假边”
    • 寻找像素点局部最大值,将非极大值点所对应的灰度值置为0,这样可以剔除掉一大部分非边缘的点
  • 算法思路

    • 将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。
    • 如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,否则该像素点将被抑制
  • 原理

    • 确定像素点C的灰度值在其8值邻域内是否为最大
    • 图1中蓝色的线条方向为C点的梯度方向,这样就可以确定其局部的最大值肯定分布在这条线上,也即出了C点外,梯度方向的交点dTmp1和dTmp2这两个点的值也可能会是局部最大值。
    • 因此,判断C点灰度与这两个点灰度大小即可判断C点是否为其邻域内的局部最大灰度点
    • 如果经过判断,C点灰度值小于这两个点中的任一个,那就说明C点不是局部极大值,那么则可以排除C点为边缘

双阈值

  • 方法

    • 设置两个阀值(threshold),分别为maxVal和minVal
    • 当某个像素点值高于threshold_low 时,则可以认为它是边缘,把它的灰度置为1
    • 当某个像素点值高于threshold_low 时,则认为它不是边缘,把它的灰度置为0
    • 处于threshold_low 和threshold_high 之间的像素点,如果它的八邻域有真边上的点,则认为它也是边缘,并把灰度置为1
  • 目的

    • 非极大值抑制之后,检测到的边缘线条比较多,我们可以滤掉一些很暗的边缘,并让主要的边缘凸显出来
    • 过滤掉由于噪声和颜色变化引起的一些边缘像素
    • 用弱梯度值过滤边缘像素,并保留具有高梯度值的边缘像素

你可能感兴趣的:(计算机视觉,计算机视觉,人工智能,图像处理)