zoukankan      html  css  js  c++  java
  • Canny算法学习

    一. 目标

    识别一副图中的sudden change

    二.定义

    1.边缘

    图像中发生强烈变化的地方

    2.有限差分

    类比于积分,可以使用有限差分来表现变化 

    3.梯度

    图像的梯度: 

    梯度的幅角 : 

    边缘的强度:

    三. 算法步骤

    1.将原图灰度化

    使用公式: $v = 0.299R + 0.587G + 0.114B $

    2.高斯模糊

    由于原图中存在许多随机噪声,在求导过程中,可能会产生很大的变化,但这些噪声并不是我们要求的边缘。所以需要通过高斯模糊去除高频部分。

    3. 使用一阶偏导的有限差分来计算梯度的幅值和方向

    4.非最大化抑制

    图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但这不能说明该点就是边缘。Canny算法中

    1. 将该像素的幅度与该像素正梯度方向上的和负梯度方向上的像素相比

    2.如果该像素是最大的,该值会保留,否则则会被抑制(置0)

     

    5.双阈值的选取

    Canny算法中采用双阈值法,根据高阈值得到一个边缘图像,这样一个图像含有很少的假边缘,但是由于阈值较高,产生的图像边缘可能不闭合,所以需要低阈值。高于高阈值的称为强边缘,介于高阈值和低阈值之间的称为弱边缘

    6.滞后边界跟踪

    在高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8领域中寻找高于低阈值的点,形成轮廓。(即将在强边缘像0素八领域内的弱边缘像素认为是强边缘像素)

    四.相关函数

    Opencv中的Canny函数

    函数原型:

    cv2.Canny(image, thresholod, threshold2, apertureSize, L2gradient) -> edges

    image:输入的图像,要求是灰度图

    thresholod1:低阈值,用来找出弱边缘

    thresholod2:高阈值,用来找出强边缘

    apertureSize:sobel模版的尺寸

    L2gradient:采用L1范式计算算子还是L2范式计算算子

    // edge detection

  • 相关阅读:
    Jquery 实现banner图滚动效果
    常用正则表达式集锦
    获取客户端ip并用正则表达式验证
    锋利的jquery学习笔记
    ASP.NET 中DataGrid item 绑定方法
    SQL float 保留两位小数
    android 应用程序中执行Linux 命令
    UBUNTU 测试跑分
    The declared package..does not match the expected package..
    mybatis 配置文件 配置别名
  • 原文地址:https://www.cnblogs.com/tempestT/p/10894905.html
Copyright © 2011-2022 走看看