opencv——Canny边缘检测

来源:互联网 发布:好听的淘宝店铺名 编辑:程序博客网 时间:2024/06/07 11:26
opencv——Canny边缘检测

1、对灰度图进行高斯滤波消除噪声。
2、Canny算法中所采用的卷积算子:


        其x向、y向的一阶偏导数矩阵,梯度幅值以及梯度方向的数学表达式为:


3、对幅值进行极大值抑制

图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但这不不能说明该点就是边缘。通俗意义上是指寻找像素点局部最大值,将非极大值点所对应的灰度值置为0。


图(1) 非极大值抑制

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

        实际上,我们只能得到C点邻域的8个点的值,而dTmp1和dTmp2并不在其中,要得到这两个值就需要对该两个点两端的已知灰度进行线性插值,也即根据图1中的g1和g2对dTmp1进行插值,根据g3和g4对dTmp2进行插值,这要用到其梯度方向。

4、双阈值

  1. 如果某一像素位置的幅值超过 阈值, 该像素被保留为边缘像素。
  2. 如果某一像素位置的幅值小于 阈值, 该像素被排除。
  3. 如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。


0 0
原创粉丝点击