• 边缘分割(Canny算子)


    最近有用到Canny算子做边缘检测。回顾一下Canny算子的基本原理:总的来说,图像的边缘检测必须满足两个步骤

        (1)有效的抑制噪声,使用高斯算子对图像进行平滑;

        (2)尽量精确的确定边缘的位置;

    Canny算子的边缘检测可以分为三个步骤:

    Step 1:  高斯平滑函数。目的是为了平滑以消除噪声;

    Step 2:一阶差分卷积模板。目的是为了达到边缘增强。

      该步骤有点类似于与两个方向模板进行卷积运算。这两个方向模板为(a)和(b)所示:左图体现的是在X方向上的差异,右图体现的是在y方向上的差异。同时获得梯度幅值的大小以及方向角。通过该步,获得在边缘位置处特征被加强的图像。

    Step 3:非极大值抑制(NMS)。目的是保留梯度方向上的最大值。

    这一步是比较关键的一点:

    仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值

    图2非极大值抑制


    四个扇区的标号为0到3,对应3*3邻域的四种可能组合。
          在每一点上,邻域的中心象素M与沿着梯度线的两个象素相比。如果M的梯度值不比沿梯度线的两个相邻象素梯度值大,则令M=0。

    ——假设上一步骤得到的梯度图为G(x,y);对G(x,y)进行初始化:N(x,y)=G(x,y)

    ——在梯度和反梯度方向上各找n个像素点。若G(x,y)不是这些点中的最大点,则将N(x,y)置为0,否则保持N(x,y)不变。

    Step4:  双线性阈值

    首先是一个较大的阈值:Nmax.使用该阈值二值化后的图像含有较少的假的边缘点,但是端点较多!

    使用较小的阈值:Nmin,使用该阈值二值化后的图像含有较多的假的边缘点;

    通过上一步获取的边缘点,判断其8邻域内有无第二步获得的边缘点,然后进行连接!


    另一种简单的方法是,把梯度方向简化为4个方向:『0,45,90,135』

    最后一步为对N(x,y)进行阈值化处理:

    大的阈值会得到——少量的边缘点以及众多的空隙

    小的阈值会得到——大量的边缘点以及众多的错误检测。

    一般Low=0.4High。

  • 相关阅读:
    删除所有空白列 cat yum.log | awk '{$1=$2=$3=$4=null;print $0}'>>yum.log1 sed ‘s/[ ]*$//g' 删除所有空格 sed -i s/[[:space:]]//g yum.log
    make clean 清除之前编译的可执行文件及配置文件。 make distclean 清除所有生成的文件。
    ipmitool -I lanplus -H 10.1.81.90 -U admin -P admin mc reset cold
    netperf对比
    iozone
    CentOS 7 vs. CentOS 8 版本差异大比拼
    seajs模块化jQuery与jQuery插件【转】
    教你怎么写jQuery的插件
    Jquery特效之=》仿京东多条件筛选特效
    sql FOR XML PATH('')
  • 原文地址:https://www.cnblogs.com/CBDoctor/p/2220331.html
Copyright © 2020-2023  润新知